dynamic link 好像无法存活到安装过程

Dynamic link seems to not survive to the installation process

我的 MainActivity 以这种方式管理深层 link

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    intent?.let {
        checkDynamicLink(intent)
    }
}

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    checkDynamicLink(intent)
}

private fun checkDynamicLink(intent: Intent) {
    FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(this) { dynamicLink ->
            dynamicLink?.link?.let { deepLink ->
                viewModel.postDeepLink(deepLink)
            }
        }
}

viewModel已分享;一旦用户登录,home fragment 就会获取深度 link 并由 NavController 处理它。

它在调试时以及通过 Android Studio 安装应用程序的生产版本(缩小或未缩小)时都能完美运行。当我通过 Play 商店安装生产应用程序时出现问题。 打开动态 link 时会打开 Play 商店;我安装了该应用程序,然后单击“继续”(我看到“继续”而不是“打开”的事实应该意味着它认识到有一个动态 link 可以用来打开该应用程序)。 我打开应用程序,然后登录;当它到达 home 片段时,显然,没有深度 link 需要管理。它应该打开一个片段,但它没有。

更奇怪:如果我通过动态 link 安装应用程序,然后通过启动器(而不是 Play 商店上的“继续”按钮)打开它,动态 link 和深层 link 得到正确管理。

这似乎是 Play 商店的错误。我的问题是,我是否忘记了什么?

以下是 activity 清单中的 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="@string/firebase_dynamic_links_domain_uri_prefix"
        android:scheme="https" />
    <data
        android:host="@string/firebase_dynamic_links_domain_uri_prefix"
        android:scheme="http" />
</intent-filter>

查看 firebase 动态 link 文档,有几种方法可以设置动态 link。

我建议您检查动态 link 上的包名称是否设置为与您的生产应用程序的包名称匹配。

问题与 AndroidManifest 以及 activity 的声明方式有关:

    <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="@string/firebase_dynamic_links_domain_uri_prefix"
                android:scheme="https" />
        <data
                android:host="@string/firebase_dynamic_links_domain_uri_prefix"
                android:scheme="http" />
    </intent-filter>

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

nav_graph 标签导致动态 link 由应用自动管理,因此当应用通过 Play 商店启动时,动态 link 的深度 link 是自动管理的,但用户没有登录,所以片段没有显示(所以它显然不是未管理的)。