You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:04:59