2013-08-20 51 views
1

我正嘗試創建一個使用推送通知的應用程序。我完成了第三方服務器和應用程序開發中的所有工作,並且通知已成功發送。如何正確更新應用程序中的GCM註冊ID

在這個應用程序的某個部分,用戶將通過特定的服務註冊到GCM和第三方服務器,然後向第三方服務器上傳他希望在完成。

我面臨的問題是,當我卸載應用程序時,GCM服務器(當我發送消息時)不會響應NotConnected錯誤。所以當我重新安裝應用時,GCMRegistrar會給我一個新的註冊ID,這使得我的服務器爲同一個用戶提供了兩個不同的註冊ID。

雖然我可以藉助規範的id來解決這個問題。尤其是谷歌表示

"canonical_ids": 1  
"results": [{ "message_id": "1:2342", "registration_id": "32" }] 

成功,但註冊ID應該在服務器數據庫進行更新(從23到32)

所以,如果我聽谷歌的建議,與變更註冊身份證到舊的(工作)身份證,這將導致應用程序的後綴和新的註冊ID將橄欖球比賽發送到具有該特定新的註冊ID的服務器,並且服務器將不知道在哪裏存儲該信息。

我知道註冊ID不是用戶的ID,而是註冊設備的ID。

我的第一個想法是讓服務器有不同的註冊ID。所以當我得到一個規範的id時,我會忽略它。我不喜歡這個主意雖然...

我的第二個想法是,當我更改註冊ID到舊之一,以某種方式更新到應用程序...

可有人告訴我這聽起來對我的情況更好?這是我第一次使用推送通知......

回答

0

所以,如果我聽谷歌的建議,以改變註冊ID,以舊(工作)一個

這是什麼的對面谷歌告訴你這樣做。他們鼓勵你從你的數據庫中刪除舊的ID,並只保留新的註冊ID。

這裏的relevant quote

規範標識

在服務器端,只要應用程序表現很好,一切都應該正常工作。但是,如果應用程序中的某個錯誤會觸發同一設備的多個註冊,則可能很難調和狀態,並且最終可能會出現重複的消息。

GCM提供了一種稱爲「規範註冊ID」的功能,可以輕鬆從這些情況中恢復。規範註冊ID被定義爲您的應用程序請求的最後一次註冊的ID。這是在向設備發送消息時服務器應使用的ID。

如果稍後嘗試使用不同的註冊ID發送消息,GCM將像往常一樣處理請求,但它將在響應的registration_id字段中包含規範註冊ID。請確保替換存儲在您的服務器上的註冊ID與此規範ID,因爲最終您使用的ID將停止工作。