我試圖實現一個通知系統,您可以在其中訂閱其他用戶(不是Firebase主題),並在用戶發佈內容時獲取推送通知。Firebase雲消息:處理應用服務器中的令牌刷新
要做到這一點,我決定使用設備組和註冊標記,使用戶可以得到推送通知到每一個他/她登錄到設備。
目前,用戶可以訂閱另一個用戶,並且還能夠使用通知密鑰接收他登錄到的每個設備的推送通知。爲此,每當用戶登錄並使用以下結構將其存儲在數據庫(應用程序服務器)中時,我都會收到該設備的註冊令牌。
用戶
- USER_ID(PK)
- notification_key_name
- notification_key
設備
- USER_ID(FK)
- ř egistration_token
但是,我無法弄清楚如何在App Server中管理令牌刷新。
考慮這種情況下:在用於在裝置中的第一時間
1)USER_1日誌。
2)使用registration_token_1(均在FCM和App Server中)創建設備組。
3)user_1卸載應用程序並重新安裝(令牌刷新)。
4)USER_1重新登錄。
5)應用服務器增加refresh_token_1到USER_1,他現在有2個令牌,舊的和新的。
6)user_1註銷並且user_2登錄到同一設備,refresh_token_1被轉移到user_2。
7)FCM刪除user_1的設備組,因爲user_1 不再有任何註冊標記。但user_1仍然在應用服務器中有notification_key和一個包含registration_token_1的設備。
8)user_1無法登錄,因爲App Server認爲他已經有設備組,並嘗試將refresh_token_1添加到FCM中不存在的notification_key,從而獲得錯誤代碼400「通知密鑰不存在」。
我對這次幾個問題:
如果令牌被刷新,有沒有辦法從FCM舊令牌?這樣,應用服務器可以替換舊的令牌用新,而無需令牌配對設備標識符,如果標識符不通過卸載量/工廠重置住這似乎是不可靠等
你能推薦將用戶(通知鍵)映射到App Server中的註冊令牌的更好方法?
EDIT 我周圍的一些其它線程讀,發現配對註冊令牌來的設備標識符的形式的可能的解決方案,所以令牌被刷新時,我可以尋找該設備標識符和替換/刪除令牌。現在,我不確定iOS和Android都有持久標識符,可以在應用程序卸載,數據擦除和工廠重置之後存在...