首页 > 解决方案 > Android - 具有相似 URL 的深度链接

问题描述

我正在深度链接(使用喷气背包导航)并且逻辑似乎正在运行。我遇到的问题是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>

标签: androiddeep-linking

解决方案


我认为这种情况正在发生,因为myAppName://discover/{contentId}它更通用并且包含myAppName://discover/category?name={category}.

通常,您需要使您的活动“处理”更具体,以免影响片段之一。

也许像这样的链接可以解决问题:myAppName://discover/detail/{contentId}

此外,我不熟悉新的导航组件深度链接,但我没有在您的代码中看到您定义变量的位置,范围内定义的contentId内容是,我不知道这是否正常。DiscoverDetailActivityalready_handled

编辑

如果您无法控制链接格式,我建议您在导航图中为深层链接设置一个入口点,而不是进行正确的解析、映射、重定向。这将是一个LinkDispatcherActivity拦截所有应用程序链接的透明活动,您可以使用.*通配符定义链接:这<deepLink app:uri="myAppHost://myAppScheme/.*"/>将匹配并拦截所有以 . 开头的链接myAppHost://myAppScheme


推荐阅读