Firebase Instance ID与Android Instance ID:导入类失败及替代疑问
关于InstanceID类无法导入及Firebase替代方案的解答
我来帮你理清这个问题的核心:
你找不到
InstanceID类的直接原因是依赖库引错了
原来的com.google.android.gms.iid.InstanceID并不在play-services-identity或play-services-auth里,它属于play-services-iid库。不过这里要重点说明:这个库已经被Google官方弃用了,就算你引入它,也会收到明确的废弃警告。你的猜测完全正确:InstanceID已经被Firebase Instance ID完全取代
Google在将GCM迁移到FCM后,就把设备标识、令牌管理等核心功能整合到了Firebase生态中。原来的InstanceID功能已经被FirebaseMessaging类彻底替代,你不需要再寻找旧的InstanceID类了。正确的做法:迁移到Firebase的令牌获取方案
如果你已经完成了GCM到FCM的迁移,只需要做以下几步:- 引入Firebase Messaging依赖:
implementation "com.google.firebase:firebase-messaging:${firebaseVersion}" - 使用
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(); });
- 引入Firebase Messaging依赖:
如果暂时需要保留旧逻辑(极不推荐)
虽然不建议,但如果你暂时还没完成迁移,需要引入已废弃的play-services-iid依赖:implementation "com.google.android.gms:play-services-iid:${googlePlayServicesVersion}"但要注意,这个库已经停止维护,后续版本中可能会被彻底移除,所以优先推荐使用Firebase的官方方案。
内容的提问来源于stack exchange,提问作者10101010




