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 是自动管理的,但用户没有登录,所以片段没有显示(所以它显然不是未管理的)。
我的 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 是自动管理的,但用户没有登录,所以片段没有显示(所以它显然不是未管理的)。