#android #deep-linking
#Android #глубокая привязка
Вопрос:
Я выполняю глубокую привязку (используя навигацию jetpack), и логика, похоже, работает. Проблема, с которой я сталкиваюсь, заключается в том, что логика для activity_discover_detail, похоже, блокирует логику для fragment_discover_landing
Как бы мне предотвратить это?
Вот активность и фрагмент, о которых идет речь, из моего навигационного графика:
<fragment
android:id="@ id/fragment_discover_landing"
android:name="com.my.app.fragments.DiscoverLandingFragment"
android:label="@string/nav_discover_landing"
tools:layout="@layout/discover_landing_fragment">
<action
android:id="@ id/fragment_discover_landing_back_action"
app:popUpTo="@id/fragment_reading_lists"
app:popUpToInclusive="false" />
<argument
android:name="category"
android:defaultValue="Latest"
app:argType="string" />
<argument
android:name="searchText"
app:argType="string" />
<argument
android:name="searchMode"
android:defaultValue="false"
app:argType="boolean" />
<deepLink
android:id="@ id/discover_landing_category"
app:uri="myAppName://discover/category?name={category}" />
</fragment>
<activity
android:id="@ id/activity_discover_detail"
android:name="com.my.app.activities.DiscoverDetailActivity"
tools:layout="@layout/activity_discover_detail">
<argument
android:name="already_handled"
android:defaultValue="true"
app:argType="boolean" />
<deepLink
android:id="@ id/in_app_sell_page"
app:uri="myAppName://discover/{contentId}" />
</activity>
Ответ №1:
Я думаю, что это происходит потому, что myAppName://discover/{contentId}
является более общим и содержит myAppName://discover/category?name={category}
.
В общем, вам нужно сделать «дескриптор» вашей активности более конкретным, чтобы не затенять фрагмент.
возможно, ссылка, подобная этой, сработает : myAppName://discover/detail/{contentId}
Также я не знаком с новой глубинной привязкой навигационного компонента, но я не вижу в вашем коде, где вы определяете переменную, contentId
что определено в DiscoverDetailActivity
области already_handled
, я не знаю, нормально ли это.
Редактировать
Если у вас нет контроля над форматами ссылок, я бы посоветовал иметь единую точку входа для глубоких ссылок в вашем навигационном графике, чем выполнять надлежащий синтаксический анализ, сопоставление, перенаправление. это было бы прозрачное действие, LinkDispatcherActivity
которое перехватывает все ссылки вашего приложения, вы можете использовать .*
подстановочный знак для определения ваших ссылок: это <deepLink app:uri="myAppHost://myAppScheme/.*"/>
соответствовало бы и перехватывало все ссылки, начинающиеся с myAppHost://myAppScheme
.
Комментарии:
1. хороший глаз 🙂 . его еще нет. в данный момент тестирую глубокую ссылку и не закончил вводить аргументы. бит «already_handled» — это остаток старого кода, который находится в процессе рефакторинга
2. Это наверняка сработало бы… но я должен посмотреть, может ли серверная команда и желает ли она изменить свои пункты назначения
3. на данный момент поиск способа справиться с этим в приложении по-прежнему является приоритетом