#android #deep-linking #android-deep-link
#Android #глубокая привязка #android-глубокая ссылка
Вопрос:
У меня уже есть фильтр намерений для моей applink / deeplink. Пример кода :
<activity android:name="com.XXXX.XXXX.XXXXXXXXXXXXActivity"
android:enabled="true"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent"
android:launchMode="singleInstance">
<intent-filter android:autoVerify="true">
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.xxxxxx.com" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
Этот фильтр намерений не перенаправляет ссылки из веб-браузера в приложение, потому что у нас нет никакого пути или шаблона пути. Нам нравится только наше поведение. Но для нового варианта использования входа в saml мы должны открыть страницу входа в saml в веб-браузере (не в app webview) и после входа перенаправить обратно в приложение. Итак, теперь мы хотим использовать шаблон пути. Теперь начинается проблема. У нас та же схема и хост. Итак, если я создам новый фильтр намерений в рамках того же действия с той же схемой и хостом с помощью браузера pathPattern, перенаправляющего все URL-адреса в приложение, которое мне вообще не нужно. Пример кода :
<activity android:name="com.XXXX.XXXX.XXXXXXXXXXXXActivity"
android:enabled="true"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent"
android:launchMode="singleInstance">
<intent-filter android:autoVerify="true">
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.xxxxxx.com" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.xxxxxx.com" />
<data android:pathPattern="/ap/signin.*" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
Я попробовал с новым действием и использовал там второй фильтр намерений, но все та же проблема. Все URL-адреса начинают перенаправляться из браузера в приложение, вместо этого только URL-адрес / ap / signin.
Когда я использую только 2-й фильтр намерений и удаляю 1-й фильтр намерений, URL-адрес /ap/signin перенаправляет только из браузера в приложение, но все остальные URL-адреса deeplink / applink перестают работать. Это мне известно.
У кого-нибудь есть правильное решение этой проблемы? Не нарушая существующий поток, как я могу ввести новый шаблон пути?
Ответ №1:
Вам нужно использовать «pathPrefix», чтобы в вашем приложении открывались только точки доступа / входа
<intent-filter>
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="xxxxxx.com" />
<data android:pathPrefix="/ap/signin/" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
Комментарии:
1. Должен ли я использовать 2 разных фильтра намерений, а во 2-м фильтре намерений использовать один и тот же код или мне следует изменить существующий фильтр намерений следующим образом?
2. Нет, это не работает. Тот же опыт, который я получаю, что и с pathPattern
3. Убедитесь, что вы открыли новый тег фильтра намерений
4. Нет, это не работает. Если я создам новый фильтр намерений или новое действие с другим фильтром намерений, после входа в saml URL-адрес в приложении откроется первый URL-адрес перенаправления с моим именем хоста, который не является указанным мной pathPrefix. URL-адрес pathPrefix появляется после перенаправления URL-адреса для этого URL-адреса запроса post. То же самое происходит и с шаблонами путей. Мой ожидаемый результат должен быть только из браузера / ap / signin… URL-адрес должен быть перенаправлен на приложение, а все остальные URL-адреса должны быть deeplink / applink при нажатии на URL-адрес с мобильного устройства, но не в браузере.
5. Пример: если я нажму xxxxx.com/bb/feature/sso .. ссылка из мобильного сообщения / электронной почты она должна быть привязана / привязана, но если URL-адреса открываются в браузере, она не должна быть привязана или привязана. Только из браузера / ap / signin… должно быть перенаправлено в app или deeplink / applinked. Но в настоящее время то, что я испытываю: 1. ссылки на приложения по щелчку привязаны / привязаны к сообщению / электронной почте, что ожидается. 2. Из приложения я запустил поток, который открывается в brwoser. Я вошел в браузер, затем происходит перенаправление URL, которое перенаправляет на /bb/ feature / sso … что является вызовом post.