2017-06-12 99 views
4

從官方文檔,我的理解是它的工作方式是這樣的:如何處理每個用戶的多個Firebase FCM令牌?

  1. 用戶安裝的應用程序,FCM令牌生成
  2. 發送令牌應用服務器
  3. Server使用令牌發送推通知到此設備。

如果同時該用戶在其他設備上安裝應用程序會怎樣?我應該在應用程序服務器上存儲每個用戶的多個令牌嗎?如果是的話 - 那意味着應該檢查哪些內容已過期?

回答

2

如果同時該用戶在其他設備上安裝應用程序會怎麼樣?應該在應用程序服務器上存儲每個用戶的多個令牌嗎?

是的。用戶可能有多個設備,這是一種常用的Device Groups的情況。

如果是 - 那意味着應該有一些東西像檢查哪些過期了?

如果令牌到期,回調被觸發(onTokenRefresh()用於Android系統),從那裏你將有新的令牌發送到你的應用服務器,並刪除對應於用戶/設備舊。

+0

但是如果用戶從10個設備登錄並丟失9個設備會怎麼樣。所以他們不會啓動回調。我需要永遠向這些丟失的設備發送通知嗎? – Graykos

+0

開發者有責任跟蹤設備組的映射。看到我的答案[這裏](https://stackoverflow.com/a/42248240/4625829)和[這裏](https://stackoverflow.com/a/42522002/4625829)。 –

+5

「刪除與用戶/設備對應的舊版本」...好的,但是如何確定獨特的設備?如果它是使用2個不同瀏覽器或不同機器的相同用戶會怎麼樣?是否有一個firebase方法來獲得唯一的設備ID,或者公共的Web API? – johnb003

2

我也遇到了確切的挑戰,並不得不解決一個解決方案: 爲用戶存儲每個令牌與設備ID。 知道這個函數實際上存在於Firebase消息傳遞方法中是非常有趣的。但更令人驚訝的是,沒有文件來處理這種情況。 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getId()

總而言之,在向服務器發送新令牌時,還會發送getId()方法返回的設備ID,並使用它來強制每個設備使用令牌的唯一性。

同時爲了在利用FCM的設備分組功能的同時應用此解決方案,可以在FCM組上創建服務器請求,以便在刪除該設備標識中的舊標記之後將其替換爲新標識。