如何从Firebase获取动态链接?调用getDynamicLink始终返回null
Firebase动态链接getDynamicLink返回null问题
我们按照Firebase官方文档实现Android端接收动态链接,但使用以下代码时,onSuccess回调中pendingDynamicLinkData始终返回null:
FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { // Get deep link from result (may be null if no link is found) Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); Log.e("deepLink",""+deepLink.toString()); } // Handle the deep link. For example, open the linked // content, or apply promotional credit to the user's // account. // ... // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } });
排查与解决步骤
先验证Intent数据
在onCreate或onNewIntent中打印Intent的完整信息,确认是否携带动态链接相关参数:Log.d("IntentData", getIntent().getDataString()); if (getIntent().getExtras() != null) { Log.d("IntentExtras", getIntent().getExtras().toString()); }如果Intent本身没有动态链接数据,
getDynamicLink必然返回null,需先排查链接跳转逻辑是否正确。核对动态链接配置
- 检查Firebase控制台中,动态链接域名已关联你的应用,包名、签名证书指纹完全匹配。
- 测试生成的动态链接:直接在浏览器打开,确认能正常跳转至你的应用。
区分冷启动/热启动场景
- 冷启动(应用未启动):需在
onCreate中调用getDynamicLink; - 热启动(应用在后台):必须在
onNewIntent中重新调用getDynamicLink,因为此时新Intent不会触发onCreate; - 注意:若从最近任务列表打开应用,Intent可能未更新,需确保动态链接跳转时设置合适的启动标记(如
FLAG_ACTIVITY_CLEAR_TOP)。
- 冷启动(应用未启动):需在
更新依赖版本
确保Firebase动态链接依赖为最新稳定版,旧版本可能存在已知bug:implementation 'com.google.firebase:firebase-dynamic-links:21.2.0' // 替换为最新版本检查Manifest配置
确认AndroidManifest.xml中已正确配置动态链接的Intent过滤器:<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <!-- 替换为你的动态链接域名 --> <data android:host="your-dynamic-link-domain.page.link" android:scheme="https"/> </intent-filter>
内容的提问来源于stack exchange,提问作者Devesh Kumawat
相关产品推荐
相关产品推荐

