Android 动态链接无法在全新应用安装后继续存在
Posted
技术标签:
【中文标题】Android 动态链接无法在全新应用安装后继续存在【英文标题】:Android dynamic link doesn't survive fresh app installation 【发布时间】:2022-01-08 00:56:29 【问题描述】:我正在尝试使用 Firebase 动态链接在我的应用中实现推荐。
幸福的道路是:
-
链接与 JWT 令牌作为参数共享
另一个用户点击该链接,但没有应用程序,因此它转到 Playstore
安装应用后,在应用启动时,通过参数检索 JWT 令牌并存储在本地
新注册完成,发送token到后台激活推荐人奖励
问题是,在这种情况下,第 3 步在第一次应用启动时没有找到任何数据,而当我在安装应用后重新点击链接时找到。
这是为推荐人生成链接的方式:
val parameters = new DynamicLink.SocialMetaTagParameters.Builder()
.setImageUrl(...)
.setTitle(...)
.build();
val link = Uri.parse("https://my.domain.com/path/?token=$jwtToken");
val dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(link)
.setSocialMetaTagParameters(parameters)
.setDomainUriPrefix("https://my.domain.com")
.setandroidParameters(DynamicLink.AndroidParameters.Builder().build()))
.setiosParameters(...)
.setNavigationInfoParameters(
DynamicLink.NavigationInfoParameters.Builder()
.setForcedRedirectEnabled(true)
.build
).buildDynamicLink()
链接缩短:
FirebaseDynamicLinks.getInstance().createDynamicLink()
.setDomainUriPrefix("https://my.domain.com/")
.setLongLink(dynamicLink.getUri())
.buildShortDynamicLink()
.addOnCompleteListener(activity, task ->
if (task.isSuccessful() && task.getResult() != null)
linkCallback.success(task.getResult().getShortLink().toString());
else
linkCallback.failure(task.getException());
)
在应用打开时,在启动活动的 onResume() 方法中读取链接:
override fun onResume()
super.onResume()
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent()) // getIntent() refers to the Activity's method
.addOnSuccessListener(activity) data -> // Get deep link from result (may be null if no link is found)
val isReferralLink = data?.link?.toString()?.startsWith("https://my.domain.com/path") == true
val jwt = data?.link?.getQueryParameter("token")
// Here, data is null. <-------
// Other attempt :
data?.let aiData ->
FirebaseAppInvite.getInvitation(aiData)?.let result ->
// Here result is still null
我在堆栈溢出线程上看到它无法在 beta 轨道安装中存活,因此我尝试离开 beta 并使用远程配置将其隐藏在生产轨道中,但我无法看到任何区别.
我使用的版本是:
implementation 'com.google.firebase:firebase-dynamic-links:21.0.0'
implementation 'com.google.firebase:firebase-analytics:20.0.0'
implementation 'com.google.firebase:firebase-invites:17.0.0'
问题: 我这里有什么遗漏吗?
提前感谢您的帮助!
编辑:
在这种情况下,正确找到了链接和令牌。
-
链接与 JWT 令牌作为参数共享
另一个用户点击该链接,但没有应用程序,因此它转到 Playstore
安装应用后,第二个用户再次点击链接,首次打开应用
【问题讨论】:
以及data?.link
在var isReferralLink ...
之后的内容
抱歉我刚刚重新测试了一下,数据实际上是空的。
【参考方案1】:
好的,经过几天的测试和研究,我发现了它为什么不起作用。
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(activity) data ->
// Some data reading
在这种情况下,我使用带有活动作为参数的 addOnSuccessListener(),这使它能够感知生命周期。在我的应用中,一个新用户(全新安装)将被重定向到一个入职活动,因此监听器的活动被暂停,并且永远不会触发回调。
=> TLDR:删除此活动参数解决了我的问题。
【讨论】:
我用过同样的东西,它仍然导致null @TejasSherdiwala 您是否按照here 所述检查了您的assetlinks.json?这是我的另一个问题。 我在代码中遇到了一个不同的问题。还有一段代码试图在我输入的逻辑之前提取动态链接。因此,挂起的动态链接意图总是返回 null,因为没有任何待处理的内容。以上是关于Android 动态链接无法在全新应用安装后继续存在的主要内容,如果未能解决你的问题,请参考以下文章
应用不在后台时无法识别 Firebase 动态链接 (iOS)
Firebase 动态链接如何在应用安装中幸存下来的理论是啥?
八月起,Android应用安装包的标准发布格式将发生全新变化