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

Firebase Messaging安卓端请求token时如何设置Sender Id

Android端最新版Firebase Messaging指定Sender ID获取Token实现方案

当前最新版Firebase Messaging(23.0.0+,对应Firebase BOM 32.0.0+)已废弃旧版getToken(senderId, scope)方法,需通过自定义FirebaseApp实例的方式实现指定Sender ID获取Token,适配多Firebase项目发送推送的场景。

前置依赖配置

在项目中引入最新版本的FCM依赖,推荐用Firebase BOM统一管理版本避免冲突:

// 项目级build.gradle配置
plugins {
  id 'com.android.application' version '8.0+'
  id 'com.google.gms.google-services' version '4.4.0' apply false
}

// 模块级build.gradle配置
plugins {
  id 'com.android.application'
  id 'com.google.gms.google-services'
}

dependencies {
  implementation platform('com.google.firebase:firebase-bom:32.7.0')
  implementation 'com.google.firebase:firebase-messaging'
}

初始化指定Sender ID的Firebase实例

首先从发送推送的目标Firebase项目中获取以下参数:

  • 发件人ID(Sender ID,路径:项目设置→云消息传递→发件人ID)
  • Web API密钥(路径:项目设置→常规→Web API密钥)
  • 项目ID(路径:项目设置→常规→项目ID)
  • 对应安卓应用ID(路径:项目设置→常规→你的安卓应用→应用ID)

在应用启动阶段(如Application的onCreate方法中)初始化独立的FirebaseApp实例:

// Kotlin示例代码
val senderProjectOptions = FirebaseOptions.Builder()
    .setProjectId("发送端项目的项目ID")
    .setApiKey("发送端项目的Web API密钥")
    .setGcmSenderId("你需要设置的目标Sender ID")
    .setApplicationId("发送端项目绑定的安卓应用ID")
    .build()

// 初始化自定义实例,第二个参数为自定义唯一标识,避免和默认应用实例冲突
try {
    FirebaseApp.initializeApp(this, senderProjectOptions, "custom_sender_app")
} catch (e: IllegalStateException) {
    // 实例已初始化时捕获异常即可
}

获取对应Sender ID的FCM Token

通过自定义的FirebaseApp实例获取FCM实例,再请求对应Token:

val customSenderApp = FirebaseApp.getInstance("custom_sender_app")
val fcmInstance = FirebaseMessaging.getInstance(customSenderApp)

fcmInstance.token.addOnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w("FCM_TOKEN", "获取对应Sender ID的Token失败", task.exception)
        return@addOnCompleteListener
    }
    // 此处获取到的就是对应指定Sender ID的FCM Token
    val targetToken = task.result
    // 后续将Token同步给你的业务服务端即可
}

注意事项

  • 无需额外配置推送接收逻辑,默认集成的FCM服务即可接收所有合法Sender ID发来的推送,只需将对应Token交给对应发送端即可
  • 不要频繁调用getToken方法,FCM会自动管理Token生命周期,当Token更新时,可在重写的FirebaseMessagingService.onNewToken方法中重新触发上述逻辑,同步更新对应Sender ID的Token给服务端
  • 所有配置参数必须和发送端的Firebase项目完全匹配,否则会出现Token获取失败、推送无法接收等问题
  • 如无需长期使用自定义的FirebaseApp实例,可调用FirebaseApp.getInstance("custom_sender_app").delete()释放资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:24:01