FCM令牌在某些设备上无法生成。

3

我正在使用FirebaseInstanceId.getInstance().getToken()方法生成设备令牌。我知道这个方法已过时,但我渴望找到问题的确切根源。

当我在模拟器中使用此方法时,它正常工作并返回所有模拟器变化的令牌。

我尝试使用Android手机进行调试,它会返回设备令牌。但是我们的应用程序在Zebra TC57设备上运行,那里不起作用,该方法返回null。这适用于某些设备,而某些设备则无法正常工作。我有一个设备,其中此问题无法复现。Android版本:8.1.0

我尝试检查Google Play服务版本,使用以下代码: PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0)) 这将返回17785019。

我检查了Google Play商店包的可用性。

PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 )); this is giving package name `com.android.vending` translating to new GooglePlayStorePackageName. 

尝试了多个步骤,但无法找到确切的根本原因。

1个回答

2

那个方法已经被弃用了,有原因在。只需使用新的推荐方法即可。

FCM不能保证生成这些令牌。但是当它生成令牌时,您可以确保在您的FCM服务的onNewToken方法中获得新的令牌。

class NotificationService: FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
    }
}

从文档摘录:

/**

  • onNewToken 方法被调用的情况分为两种:
    1. 在初始启动应用程序时生成新令牌
    1. 每当现有令牌更改时
  • #2 下,当现有令牌更改时,有三种情况:
  • A)应用程序恢复到新设备
  • B)用户卸载/重新安装应用程序
  • C)用户清除应用数据
  • */

您可以使用 new 方法在应用程序中的任何位置随时获取生成的令牌。只有在初始生成成功后,此方法才会返回令牌。

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")
        }


令牌未能生成,因为应用于设备运行的安全策略,但仍无法推断出是哪个策略。对设备进行了恢复出厂设置,使用相同的代码在同一设备上生成了令牌。问题与弃用的方法无关(我确实承认应更改弃用的方法),但这不是根本原因。 - Ravi
在Android 8中,FCM正常运行是否需要Google Play服务和Play商店的最低版本?或者是否有从代码测试FCM连接性的机制? - Ravi
我将授予悬赏,因为它将在24小时后过期。 - Ravi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接