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

FCM升级至24.0.1后为何需google-services.json?原FirebaseOptions方案失效?

FCM升级24.0.1后初始化问题解答

1. 为何原FirebaseOptionsBuilder方案无法再使用?

核心是你的代码初始化逻辑和新版FCM的实例匹配规则不兼容:

  • 你初始化的是命名为"SDK"的非默认FirebaseApp实例,但调用FirebaseMessaging.getInstance()时未指定该实例,默认会去获取未初始化的默认FirebaseApp,而新版FCM强制要求默认实例有合法配置来源(优先google-services.json),找不到就触发崩溃。
  • 新版FCM部分内部组件依赖google-services.json解析注入的元数据(如google_app_id),若未通过插件或手动注入这些元数据,部分初始化流程会报错。
  • 并非FirebaseOptionsBuilder方案彻底失效,而是你的代码没正确将自定义实例绑定到FirebaseMessaging。

2. 可行的SDK端消息管理方案

修正FCM手动初始化逻辑

只需在获取FirebaseMessaging时指定你初始化的命名实例即可:

val options = FirebaseOptions.Builder()
        .setGcmSenderId(firebaseConfig!!.GcmSenderId)
        .setApiKey(firebaseConfig.ApiKey)
        .setApplicationId(firebaseConfig.ApplicationId)
        .setStorageBucket(firebaseConfig.StorageBucket)
        .setProjectId(firebaseConfig.ProjectId)
        .setDatabaseUrl(firebaseConfig.DatabaseUrl)
        .build()

// 初始化命名为"SDK"的FirebaseApp
val firebaseApp = FirebaseApp.initializeApp(context, options, "SDK")

// 获取对应实例的FirebaseMessaging
FirebaseMessaging.getInstance(firebaseApp).token.addOnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w("Test", "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    val token = task.result
    Log.d("Test", token)
}

其他替代方案

若不想依赖FCM,可选择第三方聚合推送服务(如极光推送、个推),或各厂商原生推送服务(华为、小米、OPPO等),这些服务大多支持动态配置初始化参数,无需本地配置文件。

3. 回退至旧版本是否可行?

技术上可行,但强烈不推荐:

  • 旧版本的FirebaseInstanceId API已被官方标记为废弃,后续不会再更新功能或修复安全漏洞,可能出现与Android 14+等新系统版本的兼容性问题。
  • 未来Firebase服务端可能停止接收旧版本SDK生成的Token,导致消息推送失效。

内容的提问来源于stack exchange,提问作者Preet Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:34:53