2012-10-18 103 views
7

我想在我的Android應用程序中使用GCM服務。Android谷歌雲消息傳遞(GCM)和不匹配的發件人ID

爲此,我使用的Android文檔從http://developer.android.com/guide/google/gcm/gcm.html

我所創建的客戶端登記處理與發送方的ID等,並且其中,我使用的註冊ID和發送者ID發送消息的服務器側應用。

當我通過Eclipse在我的手機中安裝應用程序時,推送通知工作正常,所以我擁有的發件人ID是正確的。

然後,當我apk文件導出Eclipse和在我的手機上安裝它,我收到錯誤的信息,即SenderId是錯誤的

MissmatchedSenderId 

任何人有一個想法whyI正在此。

我已閱讀這些主題:

Why do I get "MismatchSenderId" from GCM server side?

When sending messages using GCM, I keep getting the response 'MismatchSenderId'

但在我的情況下,奇怪的是,一切都導出應用爲APK前工作正常,然後我有這個問題。

任何想法都是很好的。

回答

10

我真的有同樣的問題,並且正在研究超過10個小時。

我終於發現問題了! 與服務器API密鑰或瀏覽器API密鑰或SenderID沒有任何關係。 問題是谷歌文檔:

final String regId = GCMRegistrar.getRegistrationId(this); 
if (regId.equals("")) { 
    GCMRegistrar.register(this, SENDER_ID); 
} else { 
    Log.v(TAG, "Already registered"); 
} 

谷歌說,你要調用getRegistrationId功能且僅當該ID是空的通話記錄! 這對我來說根本不起作用......當我這樣做的時候,我總是收到MismatchSenderId發送到這個regId。

我的解決辦法是: 總是調用

GCMRegistrar.register(this, SENDER_ID); 

當功能

protected void onRegistered(Context c, String regId) 

在我的服務器數據庫稱爲保存的RegID。

如果我這樣做,一切正常!

+0

非常感謝@schurtertom,這實際上也適用於我。 –

+0

我在哪裏可以找到「GCMRegistrar」,我已將Google Play Services添加爲我的項目屬性中的庫。仍然無法導入這個類。你能幫我解決這個問題嗎? –

1

GCM提供的SenderID和API密鑰的組合對於每個應用程序都是唯一的。

當我們在客戶端更新了senderID但仍使用與舊senderID相關的API密鑰時,我們遇到了senderID不匹配問題。

我們在更新服務器API密鑰後就能解決問題。 也由@schurtertom的答案是非常有幫助