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

使用FirebaseMessaging、Installations替代FirebaseInstanceId的代码方案

代码逻辑说明

你对原有代码的4步逻辑理解完全正确,针对你存疑的两个概念解释如下:

  • Task:是Google Play服务体系提供的异步任务封装,专门处理不能阻塞主线程的耗时操作(比如和Firebase服务器交互拉取令牌的操作),支持绑定成功、失败、完成状态的回调,任务执行结束后会在主线程触发对应回调逻辑。
  • instanceIdResult:是实例ID拉取任务成功后返回的结果对象,内部封装了当前App安装实例的唯一标识、对应的FCM推送令牌两类信息。

原有代码的实际运行逻辑:App启动后异步向Firebase服务端申请当前实例的FCM推送令牌,拿到令牌后调用语音通话SDK的注册接口,把当前设备的FCM令牌和用户账号绑定,这样后续有来电时,服务端可以通过FCM向当前设备推送来电邀请。

适配新版Firebase SDK的改写方案

废弃的FirebaseInstanceId获取令牌的能力已经全部迁移到FirebaseMessaging组件中,你不需要改动后续的注册逻辑,只需要替换获取令牌的入口即可,改写后可正常编译运行:

/* Register your FCM token to receive incoming call invites */
private void registerForCallInvites() {
    FirebaseMessaging.getInstance().getToken()
            .addOnSuccessListener(this, fcmToken -> {
                Log.i(TAG, "Registering with FCM");
                Voice.register(accessToken, Voice.RegistrationChannel.FCM, fcmToken, registrationListener);
            })
            .addOnFailureListener(e -> Log.e(TAG, "FCM token fetch failed", e));
}
额外注意事项
  • 请确保模块级build.gradle中引入了维护中的Firebase Messaging依赖,移除已经废弃的firebase-iid单独依赖。
  • FCM令牌不是永久有效的,会在App重装、清除数据、令牌过期、Firebase主动刷新时发生变更,你需要自定义继承FirebaseMessagingService的服务,重写onNewToken方法,在拿到新令牌时重新执行上述注册逻辑,避免令牌失效后收不到来电推送。

内容的提问来源于stack exchange,提问作者D-I-S-C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:21:23