如何从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
相关产品推荐
相关产品推荐

