2013-04-11 130 views
9

我目前正在使用登錄系統實施GCM到應用程序。我想根據登錄到應用程序的用戶(一個設備,多個用戶)嚮應用程序發送通知。我經歷了這些過程。GCM與登錄系統

  1. 登錄爲 「用戶A」
  2. 註冊GCM(獲取註冊ID)發送給服務器側
  3. 出到用戶
  4. 廣播通知甲
  5. 註銷取消註冊
  6. 登錄爲「用戶B 「
  7. 註冊GCM(獲取註冊ID - 單獨獲取與用戶A相同的註冊ID,有時返回爲不同的註冊ID-)
  8. GCM推送通知到用戶A(即使用戶未註冊)

我不知道如何讓應用程序識別登錄到設備的用戶並僅將通知推送給該特定用戶。而不是用戶B登錄並獲取用戶A的通知。任何意見和答案將不勝感激!如果您需要檢查我的項目中的特定代碼,請告訴我。

+0

[this](http://developer.android.com/google/gcm/gcm.html)在註冊和註銷結束時有解決方案。它遲到的答覆,但可能有助於某人。 – Anitha 2015-04-16 04:57:56

回答

9

註冊ID標識特定設備上的特定應用程序。它不知道在你的應用程序中登錄用戶。因此,當您取消註冊GCM(當用戶註銷時)時,應該打電話給您的服務器,讓其知道用戶已註銷。

這將讓您的服務器知道該用戶已註銷,並且服務器將停止向其發送GCM消息。

如果在用戶A註銷並且用戶B登錄後獲得相同的註冊ID,則無關緊要(即使您獲得新註冊ID,舊註冊ID仍然可以工作,這就是爲什麼GCM返回規範註冊ID當設備有多個註冊ID的應用程序)。

編輯:

讓我們考慮其中後您的服務器發送它的通知,但該通知得到由谷歌後,纔在用戶B日誌發送到您的應用程序用戶A登錄了特殊情況下(這應該是比較少見) 。處理這種情況的最安全的方式是在您的應用程序中接收通知並放棄它,並向用戶B顯示任何內容。爲了知道何時放棄收到的通知,您可以使用用戶名將user屬性添加到您的通知數據中作爲它的價值。在應用程序中處理通知時,請在顯示通知之前檢查用戶屬性是否與登錄用戶相匹配。

+0

我同意這一點。但是,當GCM等待例如10通知發送到設備並且用戶試圖從系統註銷時,它可能是可能的。當用戶成功註銷GCM時,可能有可能發出所有通知。這是我迄今關注的問題 – 2013-04-12 01:26:46

+0

@IssacZH。我編輯了我的答案以解決您的問題。 – Eran 2013-04-12 05:18:23

+0

感謝您的反饋。基於你的編輯答案,我想我明白了。 – 2013-04-12 07:03:24