2013-11-21 57 views
1

我的應用程序中有一個免費服務,它目前使用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服務的文檔看起來有點輕鬆,並未解決其從後臺服務中使用的問題。

親切的問候

回答

0

不知道有什麼推薦的遷移路徑,但這裏有一個爲我工作:Registration confusion Android GCM

+0

感謝您的回覆。此遷移示例是使用gcm.jar的GCM,而不是Google Play服務。我知道我可以在後臺服務中使用這種形式的GCM,但已棄用它。我想知道如何轉到Google Play服務。也許我無法從後臺服務中使用Google Play服務,因爲我無法通過調用getErrorDialog()來引導用戶啓用它。 – user3018303

+0

我沒有在服務器上使用gcm.jar。我在PHP中使用Curl使用原始HTTP請求。 HTTP協議非常簡單。 –

0

從文檔中的示例中的代碼應足以檢查播放服務:

private boolean checkPlayServices() { 
     int resultCode = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(this); 
     if (resultCode != ConnectionResult.SUCCESS) { 
      if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
       GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
         PLAY_SERVICES_RESOLUTION_REQUEST).show(); 
      } else { 
       Log.i(GCMTAG, "This device is not supported."); 
       finish(); 
      } 
      return false; 
     } 
     return true; 
    } 

僅當結果不是ConnectionResult.SUCCESS時才適合調用方法GooglePlayServicesUtil.getErrorDialog()。你不必這樣做。例如,如果您有錯誤,可以從您的服務向主要活動發送消息,指導用戶嘗試更新其版本。