Google 致力于为黑人社区推动种族平等。查看具体举措

为目的地创建深层链接

在 Android 中,深层链接是指将用户直接转到应用内特定目的地的链接。

借助 Navigation 组件,您可以创建两种不同类型的深层链接:显式深层链接和隐式深层链接。

创建显式深层链接

显式深层链接是深层链接的一个实例,该实例使用 PendingIntent 将用户转到应用内的特定位置。例如,您可以在通知、应用快捷方式或应用微件中显示显式深层链接。

当用户通过显式深层链接打开您的应用时,任务返回堆栈会被清除,并被替换为相应的深层链接目的地。当嵌套图表时,每个嵌套级别的起始目的地(即层次结构中每个 <navigation> 元素的起始目的地)也会添加到相应堆栈中。也就是说,当用户从深层链接目的地按下返回按钮时,他们会返回到相应的导航堆栈,就像从入口点进入您的应用一样。

您可以使用 NavDeepLinkBuilder 类构建 PendingIntent,如下例所示。请注意,如果提供的上下文不是 Activity,构造函数会使用 PackageManager.getLaunchIntentForPackage() 作为默认 Activity 来启动(如果有)。

Kotlin

    val pendingIntent = NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent()
    

Java

    PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent();
    

如果您已有 NavController,则还可以通过 NavController.createDeepLink() 创建深层链接。

创建隐式深层链接

隐式深层链接是指应用中特定目的地的 URI。调用 URI(例如,当用户点击某个链接)时,Android 可以将应用打开到相应的目的地。

在触发隐式深层链接时,返回堆栈的状态取决于是否使用 Intent.FLAG_ACTIVITY_NEW_TASK 标记启动隐式 Intent

  • 如果该标记已设置,则任务返回堆栈会被清除,并被替换为相应的深层链接目的地。就像显式深层链接,当嵌套图表时,每个嵌套级别的起始目的地(即层次结构中每个 <navigation> 元素的起始目的地)也会添加到相应堆栈中。也就是说,当用户从深层链接目的地按下返回按钮时,他们会返回到相应的导航堆栈,就像从入口点进入您的应用一样。
  • 如果该标记未设置,则您仍然位于上一个应用的任务堆栈中,该应用中的隐式深层链接已触发。在这种情况下,如果按下返回按钮,则您会返回到上一个应用;如果按下向上按钮,则会在您的导航图中的层次父级目的地上启动应用的任务。

您可以使用 Navigation Editor 创建指向某个目的地的隐式深层链接,如下所示:

  1. 在 Navigation Editor 的 Design 标签中,选择深层链接的目的地。
  2. 点击 Attributes 面板 Deep Links 部分中的 + 。
  3. 在随后显示的 Add Deep Link 对话框中,输入一个 URI。

    请注意以下几点:

    • 没有架构的 URI 会被假定为 http 或 https。例如,www.google.com 同时与 http://www.google.comhttps://www.google.com 匹配。
    • 形式为 {placeholder_name} 的占位符与一个或多个字符相匹配。例如,http://www.example.com/users/{id}http://www.example.com/users/4 匹配。Navigation 组件通过将占位符名称与已定义的参数(为深层链接目的地所定义)相匹配,尝试将占位符值解析为相应的类型。如果没有定义具有相同名称的参数,则对参数值使用默认的 String 类型。
    • 您可以使用 .* 通配符匹配 0 个或多个字符。
  4. (可选)选中 Auto Verify 可要求 Google 验证您是相应 URI 的所有者。如需了解详情,请参阅验证 Android 应用链接

  5. 点击 Add。所选目的地上方会显示链接图标 ,以表示该目的地具有深层链接。

  6. 点击 Text 标签,以切换到 XML 视图。已向相应目的地添加嵌套的 <deepLink> 元素:

    <deepLink app:uri="https://www.google.com" />
        

要启用隐式深层链接,您还必须向应用的 manifest.xml 文件中添加内容。将一个 <nav-graph> 元素添加到指向现有导航图的 Activity,如下例所示:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">

        <application ... >

            <activity name=".MainActivity" ...>
                ...

                <nav-graph android:value="@navigation/nav_graph" />

                ...

            </activity>
        </application>
    </manifest>
    

构建项目时,Navigation 组件会将 <nav-graph> 元素替换为生成的 <intent-filter> 元素,以匹配导航图中的所有深层链接。

其他资源

要详细了解 Navigation,请参阅下面列出的其他资源:

示例

Codelab

视频