2014-03-06 70 views
9

短版本:意圖com.google.android.c2dm.intent.REGISTRATION仍然使用或已由GCM完全棄用?com.google.android.c2dm.intent.REGISTRATION是否已棄用?

加長版:谷歌的gcm-demo-client聲明此意圖在其過濾器,但是,如果我按照同樣的程序,我得到一個有效的註冊ID,當我打電話gcm.register()然後,我的廣播接收器接收,因爲額外的註冊ID註冊過濾器,這第二個註冊ID是假的(我不能發送任何通知)。

在這一點上,我正在考慮刪除REGISTRATION過濾器(並保留RECEIVE),但我想確保在協議中不會丟失重要的東西。

+1

據我記得,那是在2012至少 – mangusta

+1

結束這就是我的懷疑也不贊成,但事實上它仍然出現在谷歌官方的演示讓我不知道如何真正的這是。此外,GCM註冊方法不處理Google決定向您的應用程序發送新註冊ID的情況(這種情況通過讓廣播接收方處理註冊意圖,正如C2DM所做的那樣)。 –

+0

如果您從代碼中調用'gcm.register()',並且當然除去'REGISTRATION'過濾器 – mangusta

回答

2

您可能正在查看舊版Google官方演示版。 的current version不使用com.google.android.c2dm.intent.REGISTRATION,你可以在這裏看到:

<receiver 
     android:name=".GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <!-- Receives the actual messages. --> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.google.android.gcm.demo.app" /> 
     </intent-filter> 
    </receiver> 
+0

確實。我不確定我是如何結束的,因爲我認爲我從你指向的地方得到了它。由於GCM服務器現在不能再通知您的應用程序,所以新的註冊仍然無法處理Google更改您的註冊ID的情況,但我猜他們不會這樣做,直到GCM方法可以處理它。謝謝。 –

5

你可能不接受註冊ID爲您的用戶的一小部分。

https://blog.pushbullet.com/2014/02/12/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post/

課#2:要準備好寄存器反覆失敗,在某些設備上 即使創建工作的註冊ID。

這個技巧很奇怪,可能不再相關,但我沒有 確認GCM中的bug是否已經修復的方法。

錯誤是這樣的:無論你多少次呼叫寄存器,它 將總是失敗並在一些設備上拋出異常。儘管 寄存器引發異常,但正在創建的工作註冊ID爲 ,但未返回。爲了得到這個註冊ID,這個 權限添加到您的GCM廣播接收器的IntentFilter的:

<action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

愛是愛GCM。 =)