[英]Firebase onNewToken not refreshing my token
因此,我需要在每次過期時刷新我的令牌,但是在 ddo 后面運行的服務不會觸發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() 調用 go 時,我是否需要顯式調用getInstanceID()
? 或者這項服務應該像我一樣用新的更新我的 deviceToken 嗎?
我已經用舊的登錄帳戶對其進行了測試,但沒有收到通知,因此,新令牌尚未刷新(我需要注銷並再次登錄才能再次接收通知)
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
。
因此,您通常最終會在應用程序的onNewToken
和onStart
中獲得令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.