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

修改FirebaseApp初始化后配置报FirebaseApp was deleted错误如何解决

问题修复方案

报错原因

  • 原有逻辑删除默认FirebaseApp实例后,重新初始化的新实例没有同步到后续依赖FirebaseApp的组件,FirebasePushNotificationManager仍然持有已删除的旧实例引用,触发java.lang.IllegalStateException: FirebaseApp was deleted异常
  • 原代码中FirstOrDefault()没有做空判断,当不存在匹配的默认App时直接调用Delete()会触发空引用异常,属于潜在崩溃点

修复代码

优化原有逻辑,补全空校验,删除旧实例前先停止依赖服务,重新初始化App后将新实例传入推送管理器:

var apps = FirebaseApp.GetApps(Context);
// 先停止旧推送服务对FirebaseApp的依赖
FirebasePushNotificationManager.Disable();

if (apps.Count != 0)
{
    var defaultApp = apps.Where(i => i.Name == FirebaseApp.DefaultAppName).FirstOrDefault();
    // 补全空和状态判断,避免无效调用
    if (defaultApp != null && !defaultApp.IsDeleted)
    {
        defaultApp.Delete();
    }
}

var options = new FirebaseOptions.Builder()
    .SetApiKey(config["API_KEY"])
    .SetApplicationId(config["GOOGLE_APP_ID"])
    .SetGcmSenderId(config["GCM_SENDER_ID"])
    .SetProjectId(config["PROJECT_ID"])
    .SetStorageBucket(config["STORAGE_BUCKET"])
    .Build();

// 接收新初始化的FirebaseApp实例
var newDefaultApp = FirebaseApp.InitializeApp(Context, options);

if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
    FirebasePushNotificationManager.DefaultNotificationChannelId = "FirebasePushNotificationChannel";
    FirebasePushNotificationManager.DefaultNotificationChannelName = "General";
    FirebasePushNotificationManager.DefaultNotificationChannelImportance = NotificationImportance.Max;
}

// 传入新的App实例初始化推送,第三个参数为true重置旧配置
FirebasePushNotificationManager.Initialize(newDefaultApp, Context, true);

额外注意事项

  • 该配置修改操作仅推荐放在Application的OnCreate生命周期中执行,不要在App运行过程中频繁切换Firebase配置,避免组件状态混乱
  • 如果你同时使用了FirebaseAuth、FirebaseStorage等其他Firebase组件,删除旧App实例前需要先释放这些组件的旧实例,避免后续调用触发同类异常
  • 确保所有Firebase相关SDK版本保持一致,版本不兼容也可能导致实例同步失败

内容的提问来源于stack exchange,提问作者Denys Tsurkanovski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:02