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

如何从SDK发送通知?新版FCM移除getToken方法应如何解决

替代实现方案

FirebaseInstanceId 类及对应的 getToken(String senderId, String scope) 方法从Firebase BOM 28.0.0版本开始正式废弃移除,相关功能统一迁移到 FirebaseMessaging 类中实现,原方法传入的第二个固定参数"FCM"在新版API中已经默认内置,无需额外声明,以下分两种场景给出对应实现方案:

场景1:使用默认Firebase项目配置(无需自定义senderId)

直接调用 FirebaseMessaging 自带的异步获取token方法即可,示例代码:

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "获取FCM token失败", task.getException());
                return;
            }
            // 拿到有效token
            String fcmToken = task.getResult();
            // 后续按原有逻辑上传到服务端、传入你们的SDK即可
        }
    });

场景2:需要指定自定义senderId(和你原来传MYSENDERID的场景一致)

需要先初始化对应senderId的独立FirebaseApp实例,再基于该实例获取token,避免覆盖默认项目配置,示例代码:

// 构造对应senderId的Firebase配置项
FirebaseOptions options = new FirebaseOptions.Builder()
        .setGcmSenderId("MYSENDERID") // 替换为你实际的senderId
        // 其余必填参数可直接从默认FirebaseApp实例获取,无需额外配置
        .setProjectId(FirebaseApp.getInstance().getOptions().getProjectId())
        .setApplicationId(FirebaseApp.getInstance().getOptions().getApplicationId())
        .build();
// 初始化独立的FirebaseApp实例
FirebaseApp customFcmApp = FirebaseApp.initializeApp(context, options, "custom_fcm_app");
// 基于该实例获取Messaging对象,再拉取token
FirebaseMessaging.getInstance(customFcmApp).getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "获取指定senderId的FCM token失败", task.getException());
                return;
            }
            String fcmToken = task.getResult();
            // 后续按原有逻辑处理即可
        }
    });

注意事项

  • 旧版的 onTokenRefresh() 回调同步废弃,替换为 FirebaseMessagingService 中的 onNewToken(@NonNull String token) 方法,token自动刷新时会触发该回调,需要在方法内同步更新服务端/你们SDK存储的token
  • 该API为异步回调,不能直接同步取值
  • 新版方法返回的token格式、有效性和旧方法完全一致,原有推送逻辑不需要修改适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:04