Android Firebase Dynamic Link 应用新装首次启动无法获取参数如何解决
关于Firebase Dynamic Link安装后首次启动无法获取参数的问题排查与解决
原问题背景
我尝试通过Firebase Dynamic Link在应用中实现邀请返利功能,预期正常流程如下:
- 分享携带JWT token参数的链接
- 其他用户点击链接,若未安装应用则跳转至Playstore
- 应用安装完成后首次启动时,提取链接中的JWT token并本地存储
- 新用户完成注册后,将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 token参数的链接
- 其他用户点击链接,未安装应用跳转至Playstore
- 应用安装完成后,用户再次点击链接打开应用,可正常获取链接和token参数
问题
是否遗漏了必要配置项?
解决方案
你可以按以下优先级逐一排查修复:
- 移除废弃依赖
firebase-invites已经在2020年正式停止服务,和现有版本的firebase-dynamic-links存在兼容性冲突,直接删除以下依赖即可:
// 移除这行 implementation 'com.google.firebase:firebase-invites:17.0.0'
- 补全Android参数配置
你当前创建动态链接时的Android参数是空配置,必须明确指定应用包名才能实现安装后的参数匹配,修改如下:
.setAndroidParameters(DynamicLink.AndroidParameters.Builder("你的应用包名") // 可选:指定最低支持的应用版本号,低于该版本会跳转Play商店 .setMinimumVersion(1) .build())
- 调整动态链接读取逻辑
- 不要只在
onResume中读取参数,同步在启动页的onCreate方法中也调用getDynamicLink逻辑 - 读取到动态链接参数后调用
setIntent(null)避免重复触发 - 不要在回调中绑定Activity生命周期,避免页面销毁时回调被取消:
// 修改回调写法,移除activity参数 .addOnSuccessListener { data -> // 原有逻辑不变 // 处理完成后清空intent setIntent(null) }
- 调整跳转配置
setForcedRedirectEnabled(true)会强制跳过动态链接的中间预览页,部分场景下会导致Play商店的安装来源匹配失败,可以先关闭该配置测试。 - 检查应用关联配置
确保你已经在Firebase控制台配置了Android应用的数字资产链接文件assetlinks.json,并上传到你的域名根目录下,保证应用和动态链接域名的关联验证通过。
内容的提问来源于stack exchange,提问作者Nebneb
相关产品推荐
相关产品推荐

