我的應用程序中有一個免費服務,它目前使用C2DM。我想遷移到GCM。從C2DM遷移到GCM以獲得後臺服務
有2個提供給我GCM實現
1:使用gcm.jar和更換髮件人ID的C2DM電子郵件地址
2:使用谷歌播放服務和Google雲端通訊類的GCM註冊
上面的選項1提供了從C2DM到GCM的最簡單的遷移路徑,但是,不建議使用gcm.jar。因此,我將從一個棄用的推送機制(C2DM)轉移到另一個(使用gcm.jar的GCM)
選項2要求您檢查設備上的GooglePlayServices是否最新,然後才能註冊GCM。您可以通過調用GooglePlayServicesUtil.getErrorDialog()api來使Google Play服務準備就緒。然而,我不能從後臺服務調用這個api,因爲它可能會導致屏幕顯示給用戶,這是你不應該從後臺服務中完成的。
目前,我的C2DM和GCM(使用Google Play服務)在我的Android客戶端中處於活動狀態。我希望只有GCM處於活動狀態,並放棄C2DM,但如果Google Play服務尚未準備好在設備上使用,那麼我無法使用GCM。現在我可能會遇到一種情況,即我的後臺服務未在GCM中註冊,並且如果它繼續使用C2DM,則會註冊該服務。
問題:
1:什麼是谷歌推薦的遷移路徑C2DM-> GCM的後臺服務。我應該使用gcm.jar方法,即使它已被棄用?
2:如果Google Play服務目前不在設備上,您是否應該回到使用C2DM,而不是調用GooglePlayServicesUtil.getErrorDialog()?
3:使C2DM和GCM在我的客戶端處於活動狀態並不令人滿意。當我使用GoogleCloudMessaging.register(senderId)註冊GCM時,廣播了com.google.android.c2dm.intent.REGISTRATION消息,該消息被我的C2DM接收器接收。我無法確定消息是C2DM註冊消息還是GCM註冊消息。有沒有辦法區分2個註冊信息?我知道GoogleCloudMessaging.register()會返回註冊ID,但它也會導致com.google.android.c2dm.intent.REGISTRATION消息被廣播,這似乎是不必要的,並且會使真正的C2DM接收者感到困惑。
我歡迎您對我的問題提出建議/見解。圍繞Google Play服務的文檔看起來有點輕鬆,並未解決其從後臺服務中使用的問題。
親切的問候
感謝您的回覆。此遷移示例是使用gcm.jar的GCM,而不是Google Play服務。我知道我可以在後臺服務中使用這種形式的GCM,但已棄用它。我想知道如何轉到Google Play服務。也許我無法從後臺服務中使用Google Play服務,因爲我無法通過調用getErrorDialog()來引導用戶啓用它。 – user3018303
我沒有在服務器上使用gcm.jar。我在PHP中使用Curl使用原始HTTP請求。 HTTP協議非常簡單。 –