Deep Link 使用导航组件未打开我的目标片段
Deep Link using Navigation Component not opening my destination fragment
我在我的应用程序中使用 Android 导航 UI 进行导航。我需要在我的第二个片段中打开一个网络 URL(动态 links)。
这是我在导航图中的代码
<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
<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>
我想在用户点击 https://myproject.page.link/i5sA
之类的 URL 时打开我的第二个片段,但是当我点击这个 link 我的应用程序甚至没有提示打开这个应用程序。仅提示浏览器。当我单击“使用 chrome 浏览器打开”时,它只会使用默认启动目标打开我的应用程序。
我需要的是当用户在该网站上按下时 URL 我需要使用 SecondFragment 打开我的应用程序 MainActivity 并获取 URL 数据而不是打开默认的主页片段。
我看过 developer page 以及很多文章和教程,但我不知道我在这里遗漏了什么,任何人都可以告诉我...
app:uri="https://myproject.page.link/*"
使用 *
作为占位符在 android 架构导航中不是有效的深层链接。
尽管 https://myproject.page.link/*
URI 有效打开 https://myproject.page.link/* 完全按原样(即带有星号)
Path parameter placeholders in the form of {placeholder_name} match one or more characters. For example, http://www.example.com/users/{id} matches http://www.example.com/users/4.
因此,如果您想将这个星号用作要传递给您的应用程序的某些信息的占位符,您需要将其括在大括号 {} 中;所以你的 URI 将是:
app:uri="https://myproject.page.link/{placeholder_name}"
请注意,您可以从 Google 搜索应用程序(而不是浏览器应用程序)测试此 URI,因为如果您想从浏览器打开它,您必须在全局注册域名;这是为了允许 Google 验证您是 URI 的所有者。 Check here for more info.
我在我的应用程序中使用 Android 导航 UI 进行导航。我需要在我的第二个片段中打开一个网络 URL(动态 links)。
这是我在导航图中的代码
<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
<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>
我想在用户点击 https://myproject.page.link/i5sA
之类的 URL 时打开我的第二个片段,但是当我点击这个 link 我的应用程序甚至没有提示打开这个应用程序。仅提示浏览器。当我单击“使用 chrome 浏览器打开”时,它只会使用默认启动目标打开我的应用程序。
我需要的是当用户在该网站上按下时 URL 我需要使用 SecondFragment 打开我的应用程序 MainActivity 并获取 URL 数据而不是打开默认的主页片段。
我看过 developer page 以及很多文章和教程,但我不知道我在这里遗漏了什么,任何人都可以告诉我...
app:uri="https://myproject.page.link/*"
使用 *
作为占位符在 android 架构导航中不是有效的深层链接。
尽管 https://myproject.page.link/*
URI 有效打开 https://myproject.page.link/* 完全按原样(即带有星号)
Path parameter placeholders in the form of {placeholder_name} match one or more characters. For example, http://www.example.com/users/{id} matches http://www.example.com/users/4.
因此,如果您想将这个星号用作要传递给您的应用程序的某些信息的占位符,您需要将其括在大括号 {} 中;所以你的 URI 将是:
app:uri="https://myproject.page.link/{placeholder_name}"
请注意,您可以从 Google 搜索应用程序(而不是浏览器应用程序)测试此 URI,因为如果您想从浏览器打开它,您必须在全局注册域名;这是为了允许 Google 验证您是 URI 的所有者。 Check here for more info.