0

我試圖實現一個通知系統,您可以在其中訂閱其他用戶(不是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都有持久標識符,可以在應用程序卸載,數據擦除和工廠重置之後存在...

回答

2

因此,經過一些研究,我終於決定放棄設備組。他們不值得爲我的申請目的而痛苦。我決定只使用註冊令牌,將它們與用戶ID配對,並完全跳過設備組。

一旦令牌刷新,管理令牌和設備是開發者的責任,單獨使用Firebase API無法檢索舊令牌。實際上,一旦發送通知,Firebase可以返回無效註冊令牌列表,以便可以用來刪除後端中的無效令牌。

我找不出任何其他方式跟蹤舊的令牌,除了將它們與唯一的設備標識符配對,只有這樣,後端才能真正知道刷新後要更新哪個令牌。在數據庫中保存設備標識符對我來說似乎有些不妥,我非常確定iOS不再提供任何類型的持久標識符,所以這是不行的。

登錄時跟蹤註冊令牌非常簡單易行並且更易於在後端進行管理。至於發送通知,它們被分成1000個組,然後發送給相應的用戶。一旦發送通知,無效令牌就會從數據庫中刪除。