2017-05-31 72 views
0

我設法做了一個實現,該實現允許我創建設備組,添加和刪除註冊ID並向其發送消息,但現在我已經意識到I不明白我應該什麼時候調用這個方法。FCM中設備組的「生命週期」

我最初以爲是

  • 創建一個設備組,當用戶註冊到應用
  • 註冊ID添加到設備組用戶登錄
  • 刪除的註冊ID,我添加上當用戶登出時登錄

問題是,如果用戶只在一臺設備上登錄到應用程序,並且他註銷,那麼當我刪除註冊ID時設備組將被刪除。這意味着我將無法通知用戶任何內容,直到他再次登錄。但是,這不應該是如何工作的,例如在Facebook中,即使您在輸入舊的通知後沒有記錄日誌。

但是,如果我不註銷註冊ID的問題是兩個設備組可以有相同的註冊是在裏面。當我的應用程序被安裝到手機中(在Android的情況下)它會生成一個註冊ID,到目前爲止我只能調試它是唯一一次生成註冊ID。這意味着如果用戶登錄,註銷然後新用戶登錄,我可以將該註冊ID添加到兩個用戶設備組。這是否意味着他們都會收到通知?

我可以強制生成一個新的令牌,當用戶登錄時,通過執行解釋爲here的操作,但我想必須有更好的解決方法。

另外,在某些時候我需要刪除註冊ID,否則我會達到20的限制。

所以我的問題是什麼是正確的(或正確的)設備組的生命週期,考慮到我所描述的問題和任何其他我還沒有發現。 謝謝!

額外問題:如果我向設備組發送通知,然後在收到通知之前,用戶登錄到新設備並將其註冊ID添加到設備組,它會收到通知?我想他不會。

回答

1

我認爲這裏應該如何使用設備組有一點困惑。

首先,如果我正確理解您的流程,只要用戶安裝並向您的應用程序註冊,您就立即創建相應的設備組並添加用戶的註冊令牌。這在某種意義上對它有點太多的用處。

通常(並建議),設備組消息用於單用戶有多個設備(這部分我相信你有),但立即創建一個不會很好。

對設備組信息應如何使用在我心中的流程是這樣的:

  1. 用戶安裝和應用程序寄存器。包括具有唯一標識的憑證。您將相應的註冊令牌保存在同一用戶下。
  2. 用戶登錄到不同的設備,您檢測到該設備的註冊令牌(如果不同),保存(如果您有registration_tokens節點或其他東西),則會生成notification_key(設備組),然後相應地使用它。
  3. 如果用戶註銷,handle it accordingly。還處理設備組映射(請參閱我的回答herehere)。

然後,每次發送消息時,驗證用戶是否只有一個註冊令牌,如果是,則直接使用該特定註冊令牌。

對額外問題的回答:沒有。 (但沒有測試過,所以我不能這麼肯定)我理解FCM消息流向設備組的方式是,在您發送消息之後:

  1. 消息(s)發送到FCM服務器。
  2. 消息然後排隊到設備組中的相應設備。比方說device1device2
  3. 用戶登錄到device3。它不會收到它可能已排好隊的消息。

綜上所述,如果你願意,可以進一步測試。

+0

謝謝,這是相當棘手,但我現在瞭解更多。 – moondaisy