FCM令牌没有在少数设备中生成



我正在使用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时有两种情况:
    1. 当在初始应用程序启动时生成新令牌时
    1. 无论何时更改现有令牌
  • 在#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")
}

最新更新