迁移至API Level 35后Firebase动态链接崩溃:空对象引用
解决API 35下Firebase Dynamic Links空指针崩溃问题
问题根源
Android 14(API 35)对Intent的权限和传递逻辑做了变更,旧版本Firebase Dynamic Links库未适配该变更,导致调用FirebaseDynamicLinks.getDynamicLink(intent)时触发空指针异常。
解决方案
强制升级Firebase Dynamic Links依赖版本
必须升级到21.0.0及以上,该版本开始适配API 35的Intent规则。在模块级build.gradle中更新依赖:implementation 'com.google.firebase:firebase-dynamic-links:21.0.0'安全处理Intent参数
调用getDynamicLink前先判断Intent是否为空,避免空指针:Intent incomingIntent = getIntent(); if (incomingIntent != null) { FirebaseDynamicLinks.getInstance().getDynamicLink(incomingIntent) .addOnSuccessListener(pendingDynamicLinkData -> { // 处理动态链接逻辑 Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } // 后续业务处理 }) .addOnFailureListener(e -> { // 异常处理 }); }修正Manifest配置
确保MainActivity的android:exported="true"(API 31+强制要求),同时检查动态链接的Intent Filter配置正确:<activity android:name=".MainActivity" android:exported="true"> <!-- 启动页Filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 动态链接Filter --> <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_host.page.link" android:scheme="https" /> </intent-filter> </activity>改用onNewIntent处理后台唤醒场景
Android 14中,应用从后台被动态链接唤醒时,getIntent()可能不会更新为最新Intent,需在onNewIntent中重新处理:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 更新当前Intent handleDynamicLink(intent); } private void handleDynamicLink(Intent intent) { if (intent != null) { FirebaseDynamicLinks.getInstance().getDynamicLink(intent) .addOnSuccessListener(...); } }
额外排查步骤
- 确认
google-services.json中的dynamic_links节点配置正确,包含匹配的api_key和app_id。 - 执行
./gradlew clean清理项目缓存,然后重新构建,同时清除应用的缓存和数据后测试。
内容的提问来源于stack exchange,提问作者Anees Ahmad
相关产品推荐
相关产品推荐

