【发布时间】:2020-11-23 22:02:31
【问题描述】:
所以,我的令牌每次过期都需要刷新,但是在 d 后面运行的服务不会触发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() ?还是该服务应该像我一样用新的 deviceToken 更新我的 deviceToken ?
我用旧的登录帐户测试过,但没有收到通知,因此新令牌没有刷新(我需要注销并再次登录才能再次接收通知)
【问题讨论】:
-
你怎么知道令牌过期了?通常令牌不会过期。为了安全起见,您不会错过更改,因为您的服务未成功将令牌传输到您的服务器,您还可以获取令牌,例如在每个应用启动时。
-
您通常会在应用程序的
onNewToken和onStart中获得令牌。您自己的设备最需要后者,因为在您第一次使用onNewToken部署安装时,可能已经生成了令牌。或者,您可以在首次添加onNewToken后卸载该应用并重新安装它,在这种情况下,它还会生成一个新令牌并调用onNewToken。
标签: android firebase kotlin firebase-cloud-messaging