2015-06-21 118 views
4

我有一個應用程序,允許用戶使用服務器發出的憑據登錄,可以說使用密碼和用戶名簡單登錄。
因此,用戶啓動應用程序,輸入用戶名和密碼,服務器驗證用戶,保存此信息。 (在這種情況下細節確實不起作用)。
我需要實現什麼?
有一些事件,當我的服務器需要通知用戶。讓我們考慮改變訂單狀態。如果是這樣,我需要在狀態欄中通知用戶。
我決定使用GCM來完成這項任務。
我讀到這個,並得到了一些問題。GCM,註冊ID和處理用戶登錄/註銷

  1. 當用戶從android中的GCM服務獲取註冊ID時,它是常量還是可以更改。據我所知,不能保證它總是相同的。那麼我該如何處理這個ID的刷新。 或者如果我不打電話GoogleCloudMessaging.getInstance(applicationContext).register它將保持不變,直到我註冊新的或即使我調用註冊方法它可以返回相同的ID。我可以將此ID保存在SharedPreferences中,例如長時間使用它嗎?或者它可能在一段時間後失效?

  2. 主要問題是我需要處理同一設備上的多個用戶。據我所知,由gcm服務發佈的註冊ID綁定到設備和應用程序。因此,如果新用戶註銷並使用新憑據(新用戶帳戶)登錄,我該如何處理?例如,我可以將此ID存儲在服務器上的數據庫中,並使用它直到用戶從我的應用中的帳戶註銷,然後將其從數據庫中刪除,並且如果此設備上的用戶將使用其他帳戶註冊ID登錄用於通知其他用戶?它會起作用嗎?或者我錯過了一些東西。

  3. 如何處理用戶多個設備。我的羣組通知密鑰將來自用戶帳戶(電子郵件,用戶名..)的一些唯一數據。如果我理解正確,我需要在用戶使用其服務器帳戶登錄的所有設備上獲得註冊ID,並將其映射到一個通知密鑰。我是否應該自行處理通知取消並向GCM服務器發送上游消息,以通知其他用戶設備通知已被解除?

請幫助理解這項服務。
在此先感謝。

回答

6

我已經在我們的一個應用程序中實現了這一點。在此我們發送通知給用戶每當新的列表被添加。

用戶可以同時從多個設備登錄。設備可能是android或ios的任何東西。 也有多個用戶可以從同一設備登錄(註銷以前的用戶後)。

每當用戶從Android設備登錄時都會從GCM獲取註冊ID。這個GCM ID對於一個設備來說不是恆定的,只要你再次從GCM服務器請求它,它就會被更改。

我們使用通知密鑰將通知發送到多個設備,它包含所有設備的GCM註冊ID。如果您丟失了通知密鑰,則無法恢復。更糟糕的是,您無法使用先前使用的通知密鑰名稱重新生成新的通知密鑰。 切勿將用戶帳戶(電子郵件,用戶名..)的唯一數據用作通知密鑰名稱。始終生成一些隨機字符串作爲通知密鑰名稱。

爲了克服這個遵循以下步驟 1.創建一個表來存儲以下detsils 色譜柱: ID 用戶id deviceGCMId DEVICEID notificationKey notificationKeyName

  • 每當用戶登錄將以下參數發送到服務器。 GCMId,deviceId,userId
  • 首先檢查userId和deviceId是否存在。 如果不存在,則轉到步驟5否則轉到步驟6
  • 從給定的userId獲取表中的notificationKey和notificationKeyName。如果未找到,則生成新的notificationKeyName,並從該密鑰生成新的notificationKey。使用當前GCMRegId生成密鑰。將密鑰存儲在變量中。
  • 在表格中添加新的條目,並在步驟4中生成notificationKey和鍵名。還要在通知鍵下添加GCM ID。
  • 檢查deviceId是否相同並且GCM ID不同,然後添加更新表中的GCM ID並將該GCM ID添加到通知密鑰下。如果設備ID和gcm id相同,則不需要執行任何操作
  • 有時會從GCM服務器中丟棄通知密鑰並顯示密鑰未找到錯誤。在這種情況下,從新的密鑰名稱中創建新的notificationKey,並針對該密鑰添加GCM ID。

    欲瞭解更多信息要經過以下有用的鏈接

    https://medium.com/appunite-edu-collection/notifications-d7df385b0ff4

    https://medium.com/@Bicx/adventures-in-android-user-notifications-e6568871d9be

    希望這將有助於

    +0

    用戶可以得到以前的消息,直到用戶註銷?當登錄用戶收到消息。希望我清楚。謝謝 – mubeen

    +0

    如果從應用程序註銷,用戶將不會收到消息。因爲無論何時註銷操作,我們都會從通知密鑰中刪除設備GCM ID。 –

    +0

    是的,但是,如果我們將註銷用戶的數據存儲在其他存儲中,並且用戶登錄時,它會檢查用戶的可用數據並將其發送給用戶。這是我的想法。 – mubeen