我正在使用FirebaseInstanceId.getInstance().getToken()
方法生成设备令牌。我知道这种方法不受欢迎,但我很想找到这个问题的确切RCA。
当我在模拟器中使用这个方法时,它运行良好,并返回多个模拟器尝试的所有模拟器变体的令牌。
我试着用安卓手机调试它正在返回设备令牌。但我们的应用程序在Zebra TC57设备上运行,在那里它不工作,方法返回null。这在某些设备中有效,但在某些设备上不起作用。我有一台设备无法重现问题安卓版本:8.1.0
我试着用检查谷歌播放服务版本PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
这是返回17785019
我检查了谷歌播放商店包的可用性
PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 )); this is giving package name `com.android.vending` translating to new GooglePlayStorePackageName.
尝试了多个其他步骤,但无法找到的确切根本原因
该方法被弃用是有原因的。只需使用推荐的新方法。
FCM不保证这些代币的生成。但是,当它生成令牌时,您可以保证在FCM服务的onNewToken
方法中获得新令牌。
class NotificationService: FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
}
}
文件摘录
/**
- 调用onNewToken时有两种情况:
- 当在初始应用程序启动时生成新令牌时
- 无论何时更改现有令牌
- 在#2下,当现有令牌发生更改时,有三种情况:
- A( 应用程序已恢复到新设备
- B( 用户卸载/重新安装应用程序
- C( 用户清除应用程序数据*/
您可以使用新方法在应用程序中的任何位置按需获取生成的令牌。只有在初始生成成功的情况下,此方法才会返回令牌。
fun tryGetToken() {
FirebaseMessaging.getInstance().getToken().addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w(FCM_TAG, "Fetching FCM registration token failed", task.exception)
return@addOnCompleteListener
}
fcmToken = task.result
Log.d(FCM_TAG, "FCM fetch success $fcmToken")
}