Firebase onNewToken没有刷新我的令牌



因此,每次令牌到期时,我都需要刷新它,但ddoes后面运行的服务不会触发onNewToken()

舱单

<service
android:name=".fcm.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

代码

class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
val currentUser = FirebaseAuth.getInstance().currentUser?.uid
if(currentUser != null){
FirebaseFirestore.getInstance().collection("user").document(currentUser).update("deviceToken",token)
}
}
}

每次在应用程序中执行onStart((时,是否需要显式调用getInstanceID()?还是这个服务应该像我一样用新的设备令牌更新我的设备令牌?

我用一个旧的登录帐户测试了它,但通知没有到达,因此,新的令牌没有被刷新(我需要注销并再次登录才能再次收到通知(

onNewToken。文档说明:

在生成默认Firebase项目的新令牌时调用。

这是在应用程序安装后首次生成令牌时调用的,如果令牌发生更改,则会再次调用。

这意味着,一旦生成了令牌,在推送令牌必须更改之前,将不会调用此方法。

当你的应用程序启动时,你必须获取FirebaseInstanceId的实例并从中提取令牌。它将保证你获得有效的令牌。

您应该将代码保留在onNewToken方法中,并添加下面提到的代码来处理已经生成令牌的情况:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { instanceIdResult: InstanceIdResult ->
val currentUser = FirebaseAuth.getInstance().currentUser?.uid
if(currentUser != null){
FirebaseFirestore.getInstance().collection("user").document(currentUser).update("deviceToken", instanceIdResult.token)
}
}

更新:何时使用

首先,你必须了解两件事:

  • onNewToken令牌不存在并且必须生成(在应用程序安装之后(时调用,或者在令牌过期并且必须更改时调用
  • FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(...)未生成任何令牌!它只返回您当前可用的有效,可以安全使用推送通知令牌。在您的情况下,多次调用它是没有用的

所以现在onNewToken已经就位,可以处理令牌更改了。好的照原样离开。

现在,您需要处理的是一个令牌已经生成、有效并且可以使用的情况。在这种情况下不会调用onNewToken!现在轮到您手动请求将此令牌返回给您了。

示例:

class YourActivity: Activity {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadFcmToken()
}
private fun uploadFcmToken() {
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { instanceIdResult: InstanceIdResult ->
val currentUser = FirebaseAuth.getInstance().currentUser?.uid
if(currentUser != null){
FirebaseFirestore.getInstance()
.collection("user")
.document(currentUser)
.update("deviceToken", instanceIdResult.token)
}
}
}
}

很可能是在FCM已经生成初始令牌之后添加了onNewToken实现

对于这种特定情况(它主要影响您作为开发人员,但不影响您的用户(,您还希望在主活动的onStart中获得令牌。或者,您可以卸载应用程序,并在首次添加onNewToken后重新安装,在这种情况下,它还会生成一个新的令牌并调用onNewToken

因此,您通常会在应用程序的onNewTokenonStart中同时获得令牌。

相关内容

  • 没有找到相关文章

最新更新