You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Navigation Component的Deep Link无法打开目标Fragment怎么办?

问题修复方案

一、解决系统不弹出应用打开选项的问题

  • 首先确认你的myproject.page.link域名对应的assetlinks.json文件已经正确部署,文件中需包含你应用的包名、正式及测试环境签名的SHA256指纹,路径为https://myproject.page.link/.well-known/assetlinks.json,可直接在浏览器访问确认是否可正常获取。
  • 补充App Links自动验证配置,你可以选择两种方式实现:
    1. 直接在导航图的deepLink标签添加app:autoVerify="true"属性,让自动生成的intent-filter包含自动验证配置
    2. 手动在MainActivity的清单配置中添加完整的intent-filter,代码如下:
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
          android:host="myproject.page.link"
          android:scheme="https"
          android:scheme="http" />
    </intent-filter>
    
  • 测试时可以通过adb命令验证链接是否能匹配到你的应用:adb shell am start -W -a android.intent.action.VIEW -d "https://myproject.page.link/i5sA" com.myproject,如果能直接拉起应用说明配置生效。

二、解决跳转后仅打开首页无法直达SecondFragment的问题

  • 首先修复导航图中的ID匹配错误:你当前SecondFragment对应的节点id是@+id/nav_library,但HomeFragment的跳转action中目标id写的是@id/secondFragment,两者不一致,请统一修改为相同id,示例修改如下:
    <fragment
      android:id="@+id/secondFragment"
      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/*"
          app:autoVerify="true" />
    </fragment>
    
  • 补充MainActivity的DeepLink处理逻辑:你需要在MainActivity的onCreate和onNewIntent方法中,先解析Firebase动态短链得到真实目标链接,再交给NavController处理,示例代码如下:
    // Kotlin 示例
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navController = findNavController(R.id.nav_host_fragment)
        // 处理启动时的deepLink
        intent?.let {
            FirebaseDynamicLinks.getInstance()
                .getDynamicLink(it)
                .addOnSuccessListener { pendingDynamicLinkData ->
                    pendingDynamicLinkData?.link?.let { deepLink ->
                        navController.handleDeepLink(Intent().setData(deepLink))
                    }
                }
        }
    }
    
    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        val navController = findNavController(R.id.nav_host_fragment)
        intent?.let {
            FirebaseDynamicLinks.getInstance()
                .getDynamicLink(it)
                .addOnSuccessListener { pendingDynamicLinkData ->
                    pendingDynamicLinkData?.link?.let { deepLink ->
                        navController.handleDeepLink(Intent().setData(deepLink))
                    }
                }
        }
    }
    
    核心逻辑说明:你点击的Firebase动态短链需要先通过Firebase SDK解析出配置的真实目标长链,再交给NavController匹配导航图中的deepLink规则,直接传递原始短链无法匹配到你配置的规则。
  • 如果你的动态链接目标长链不是myproject.page.link域名下的地址,需要同步修改导航图中deepLink的uri规则匹配你的长链域名。

三、获取链接携带的参数

你在SecondFragment中可以通过arguments获取导航传入的参数,示例代码如下:

arguments?.let { args ->
    val paramValue = args.getString("你的参数名")
}

内容的提问来源于stack exchange,提问作者Venkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:15:02