2014-08-28 61 views
1

我創建了一個使用Android版GCM的Android應用程序。此應用程序適用於多個設備。 但是突然之間,它停止了之前工作過的一臺設備上的工作。我只在該設備上遇到問題:它不再收到任何消息。經過一些調試和調整我的代碼進行測試後,似乎該設備在GCM上註冊時會不斷獲得新的註冊ID(我想當您多次註冊設備時,您會收到相同的註冊ID?)。我從設備中刪除了幾次應用程序,然後重新安裝了應用程序,並將不同的註冊ID保存到我的數據庫(而其他設備則保留相同的註冊ID)。我總是會收到1個設備的不同註冊ID

當我調試郵件傳輸代碼時,我注意到GCM將消息發送給多個註冊ID(所有存儲在我的數據庫中的同一設備),並且每條消息的狀態都正常,但我的設備沒有收到任何消息。我熟悉一個規範的ID,但是這個規範的ID在每個結果中都是空的。所以我想這不是問題?

這個問題突然出現了。我不知道問題是什麼。該應用程序繼續在其他設備上工作,我只有一個設備上有這個問題。

任何人都可以幫我解決這個問題嗎?

回答

1

首先,你應該知道你從GCM得到的id對你的設備來說並不是恆定的,並且可以改變,所以你不能指望它作爲任何東西的主鍵。

當你從GCM得到一個ID時,你需要保存它(可能在SharedPreferences中),然後每次檢查這個ID是否存在,如果是的話就不需要用GCM註冊。 然後每次您將發送一條消息到該ID它應該到達。

+0

在「每次檢查此ID是否存在」時,您對「每次」的含義是什麼?每次應用程序啓動?每次安裝該應用程序? – pomber 2014-08-28 17:23:48

+0

這是我實施GCM的方式。當SharedPreferences中沒有註冊ID時,我註冊我的設備並將此註冊ID保存到SharedPreferences和我的數據庫中。當應用程序重新啓動時,我檢查是否存在註冊ID。如果是的話,我不會再次註冊。 當我收到'deviceNotRegistred錯誤'時,我注意到了這個問題。我更改了我的代碼進行測試,以便每次打開應用程序時都會註冊並獲得註冊ID。然後我發送了一條消息給該註冊ID進行測試。他們都沒有到達。並且下一次生成另一個註冊ID,也不接收消息。 – 2014-08-28 19:19:41

+0

我的意思是每次啓動應用程序時,都需要檢查現有的GCM註冊ID(如果不存在) - 註冊。閱讀此鏈接http://developer.android.com/google/gcm/client.html – Tomer 2014-08-29 08:58:45

0

單個設備的GCM註冊ID不相同。 GCM註冊ID發生變化,可能會失效,這就是爲什麼Google建議您在更新應用程序時重新註冊的原因,因爲您的當前ID無法保證正常工作。

http://developer.android.com/google/gcm/adv.html#reg-state

撥打電話的取得註冊ID可能會或可能不會返回你,你之前有同樣的註冊ID。

相關問題