首页 > 解决方案 > 使用导航组件的深层链接未打开我的目标片段

问题描述

我正在使用 Android Navigation UI 在我的应用中进行导航。我需要在我的第二个片段中打开一个 Web URL(动态链接)。

这是我在导航图中的代码

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.myproject.main.HomeFragment"
        android:label="Home"
        tools:layout="@layout/fragment_home" >
        <action
            android:id="@+id/action_nav_home_to_secondFragment"
            app:destination="@id/secondFragment" />

    </fragment>
    <fragment
        android:id="@+id/nav_library"
        android:name="com.myproject.main.SecondFragment"
        android:label="@string/menu_library"
        tools:layout="@layout/fragment_library">
       <deepLink
            android:id="@+id/deepLink"
            app:uri="https://myproject.page.link/*" />

    </fragment>
</navigation>

并将此导航图添加到清单中的主要活动中

<activity
     android:name=".main.MainActivity"
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
     android:label="@string/app_name"
     android:theme="@style/AppTheme.NoActionBar"
      >
     <nav-graph android:value="@navigation/mobile_navigation" />
</activity> 

当用户单击 URL 时,我想打开我的第二个片段,https://myproject.page.link/i5sA但是当我单击此链接时,我的应用程序甚至不会被提示在此应用程序中打开。仅提示浏览器。当我单击使用 chrome 浏览器打开时,它只会使用默认的起始目的地打开我的应用程序。

我需要的是当用户按下该网页 URL 时,我需要使用 SecondFragment 打开我的应用 MainActivity 并获取该 URL 数据,而不是打开默认的主页片段。

我看过开发者页面以及很多文章和教程,但我不知道我在这里缺少什么,任何人都可以告诉我......

标签: androiddeep-linkingandroid-navigationandroid-navigation-graph

解决方案


app:uri="https://myproject.page.link/*"

用作*占位符不是 android 架构导航中的有效深层链接。

虽然https://myproject.page.link/*URI 可以有效地打开https://myproject.page.link/ * 完全按原样(即带有星号)

根据文档

{placeholder_name} 形式的路径参数占位符匹配一个或多个字符。例如,http://www.example.com/users/{id}匹配http://www.example.com/users/4

因此,如果您想将此星号作为占位符,以便将某些信息传递给您的应用程序,您需要将其包装到花括号 {}; 所以你的URI是:

app:uri="https://myproject.page.link/{placeholder_name}"

请注意,您可以从 Google 搜索应用程序(而不是浏览器应用程序)测试此 URI,因为如果您想从浏览器打开它,您必须全局注册域名;这是为了让 Google 验证您是 URI 的所有者。在这里查看更多信息


推荐阅读