Android 动态 link 无法在全新应用程序安装后继续存在
Android dynamic link doesn't survive fresh app installation
我正在尝试使用 Firebase Dynamic 在我的应用中实施推荐 link。
幸福的道路是:
- Link 与 JWT 令牌共享作为参数
- 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
- 安装应用程序后,在应用程序启动时,通过参数检索 JWT 令牌并存储在本地
- 新注册完成,token发送到后台激活referrer奖励
问题是在这种情况下,第 3 步在第一次启动应用程序时找不到任何数据,而当我在安装应用程序后重新单击 link 时找到了。
这是为 referrer 生成 link 的方式:
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()
link 缩短为:
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()方法中读取link activity :
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 track install 中存活,所以我试图离开 beta 并使用远程配置将它隐藏在 production track 中,但我无法看到有什么不同。
我使用的版本是:
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'
问题:
我在这里遗漏了什么吗?
提前感谢您的帮助!
编辑:
在这种情况下,正确找到 link 和令牌。
- Link 与 JWT 令牌共享作为参数
- 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
- 安装应用后,第二个用户再次点击 link 并首次打开应用
好的,经过几天的测试和研究,我发现了它不起作用的原因。
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(activity) { data ->
// Some data reading
}
在这种情况下,我使用了带有 activity 作为参数的 addOnSuccessListener(),这使其具有生命周期意识。在我的应用程序中,新用户(全新安装)将被重定向到入职 activity,因此侦听器的 activity 已暂停,并且永远不会触发回调。
=> TLDR:删除这个 activity 参数解决了我的问题。
我正在尝试使用 Firebase Dynamic 在我的应用中实施推荐 link。
幸福的道路是:
- Link 与 JWT 令牌共享作为参数
- 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
- 安装应用程序后,在应用程序启动时,通过参数检索 JWT 令牌并存储在本地
- 新注册完成,token发送到后台激活referrer奖励
问题是在这种情况下,第 3 步在第一次启动应用程序时找不到任何数据,而当我在安装应用程序后重新单击 link 时找到了。
这是为 referrer 生成 link 的方式:
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()
link 缩短为:
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()方法中读取link activity :
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 track install 中存活,所以我试图离开 beta 并使用远程配置将它隐藏在 production track 中,但我无法看到有什么不同。
我使用的版本是:
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'
问题: 我在这里遗漏了什么吗?
提前感谢您的帮助!
编辑:
在这种情况下,正确找到 link 和令牌。
- Link 与 JWT 令牌共享作为参数
- 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
- 安装应用后,第二个用户再次点击 link 并首次打开应用
好的,经过几天的测试和研究,我发现了它不起作用的原因。
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(activity) { data ->
// Some data reading
}
在这种情况下,我使用了带有 activity 作为参数的 addOnSuccessListener(),这使其具有生命周期意识。在我的应用程序中,新用户(全新安装)将被重定向到入职 activity,因此侦听器的 activity 已暂停,并且永远不会触发回调。
=> TLDR:删除这个 activity 参数解决了我的问题。