You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase Instance ID与Android Instance ID:导入类失败及替代疑问

关于InstanceID类无法导入及Firebase替代方案的解答

我来帮你理清这个问题的核心:

  • 你找不到InstanceID类的直接原因是依赖库引错了
    原来的com.google.android.gms.iid.InstanceID并不在play-services-identityplay-services-auth里,它属于play-services-iid库。不过这里要重点说明:这个库已经被Google官方弃用了,就算你引入它,也会收到明确的废弃警告。

  • 你的猜测完全正确:InstanceID已经被Firebase Instance ID完全取代
    Google在将GCM迁移到FCM后,就把设备标识、令牌管理等核心功能整合到了Firebase生态中。原来的InstanceID功能已经被FirebaseMessaging类彻底替代,你不需要再寻找旧的InstanceID类了。

  • 正确的做法:迁移到Firebase的令牌获取方案
    如果你已经完成了GCM到FCM的迁移,只需要做以下几步:

    1. 引入Firebase Messaging依赖:
      implementation "com.google.firebase:firebase-messaging:${firebaseVersion}"
      
    2. 使用FirebaseMessaging获取设备令牌,替代原来的InstanceID.getInstance().getToken()逻辑:
      FirebaseMessaging.getInstance().getToken()
          .addOnCompleteListener(task -> {
              if (!task.isSuccessful()) {
                  Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                  return;
              }
              // 获取到的FCM设备令牌
              String token = task.getResult();
          });
      
  • 如果暂时需要保留旧逻辑(极不推荐)
    虽然不建议,但如果你暂时还没完成迁移,需要引入已废弃的play-services-iid依赖:

    implementation "com.google.android.gms:play-services-iid:${googlePlayServicesVersion}"
    

    但要注意,这个库已经停止维护,后续版本中可能会被彻底移除,所以优先推荐使用Firebase的官方方案。

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

火山引擎 最新活动