2014-09-24 67 views
1

Google Cloud Messaging(GCM)允許通過單個請求向多個設備發送推送通知。如果用戶卸載了應用程序,我收到一個NotRegistered錯誤響應。我怎麼能告訴多個設備中的哪一個已經刪除了應用程序(從而取消註冊它們並且不再向它們發送任何通知)?向多個Android設備發送推送通知時,如何檢測卸載了哪個特定設備?

我是否應該安全地播放每個設備的一條消息(將多個設備選項視爲全用戶廣播)還是存在替代方案?

回答

1

如果您在單個請求中將推送通知發送到多個設備(registration_ids),那麼最好的辦法是使用JSON接口而不是純文本接口。 JSON接口將響應一個對象,顯示成功和失敗的次數以及您發送推送通知的每個設備的對象列表results

不幸的是,這裏的文檔中的示例:http://developer.android.com/google/gcm/http.html顯示的格式不正確。

下面是一個例子迴應:

{ 
    "multicast_id":123456, 
    "success":1, 
    "failure":1, 
    "canonical_ids":0, 
    "results":[ 
    {"message_id":"0:abcde"}, 
    {"error":"NotRegistered"} 
    ] 
} 

你可以先檢查failure S上的號碼,如果有故障,通過results對列表進行迭代。 results中的元素數量將與您發送的推送消息的數量相同,順序與請求中指定的registation_ids相同。您現在可以找到錯誤並計算出哪些設備是NotRegistered或甚至是InvalidRegistration;這意味着registation_id不再有效,您的服務器應該停止發送推送通知。

相關問題