2012-07-03 40 views
59

我正在嘗試爲我的Android應用創建推送服務,並且我遵循Google GCM的文檔和示例來解決此問題:爲什麼我從GCM服務器端收到「MismatchSenderId」?

我可以註冊/取消註冊我的Android應用。從我的服務器端,我可以看到我一個訂閱註冊,但是當我嘗試從服務器發送郵件到我的Android應用我總是得到以下錯誤:

Error sending message to device #0: MismatchSenderId

對於我的Android應用程序,我用SENDER_ID = 200000000001.

而對於我的服務器端爲谷歌表示,我使用API​​_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

我跟着這個文件:

http://developer.android.com/guide/google/gcm/demo.html

我也在我的Google API面板中啓用了GCM,但我會得到那個惱人的錯誤消息。

我該如何解決這個問題?

+0

入住的manifest.json文件GCM發件人ID – Shivappa

回答

60

您的服務器是否使用GCM服務器返回給您的應用的新註冊ID?如果嘗試將消息發送到舊的C2DM服務器發出的註冊ID,我遇到了這個問題。

而且還仔細檢查發件人ID和API_KEY,它們必須匹配,否則你將得到那個MismatchSenderId錯誤。在Google API控制檯中,查看項目的URL:

https://code.google.com/apis/console/#project:xxxxxxxxxxx 

xxxxxxxxx是項目ID,它是發件人ID。

,並確保API密鑰屬於「主要用於服務器應用程序(與IP鎖定)」

+0

我有一個這裏有很大的疑問。是否可以將我的應用程序部署到只有一個SERIALID的其他手機上? –

+3

您是否看過GCM架構概述http://developer.android.com/guide/google/gcm/gcm.html?每個使用您的應用的Android手機都將使用您的應用的發件人ID在GCM中註冊,並且他們將收到一個唯一的GCM註冊ID,您必須將其存儲在您的服務器上。如果您希望向所有用戶發送消息,則需要查看所有這些註冊ID。 – azgolfer

+6

這真的很愚蠢,但它有效。儀表板頁面中列出的項目ID是我要選擇的一個已命名的ID,但是您必須使用URL中的數字ID,這非常容易混淆。 – Redth

6

請運行下面的腳本在終端

curl -X POST \ 
-H "Authorization: key= write here api_key" \ 
-H "Content-Type: application/json" \ 
-d '{ 
"registration_ids": [ 
"write here reg_id generated by gcm" 
], 
"data": { 
"message": "Manual push notification from Rajkumar" 
}, 
"priority": "high" 
}' \ 
https://android.googleapis.com/gcm/send 

它會給消息,如果它成功了或失敗

+5

MismatchSenderId,因爲在同一設備中,您使用不同的密鑰進行了記錄。解決這個問題卸載應用程序並運行它againg並更新註冊碼。然後在你的終端上運行CURL腳本,我會在它上面發佈成功消息,你會收到通知給你的設備 –

20

當您不使用數字ID時會發生不匹配。項目ID不是發件人ID!我花了9個小時才弄明白這一點。對於谷歌創建的所有困惑,請檢查以下鏈接以獲取數字ID。

https://console.cloud.google.com

代替

https://console.developers.google.com

希望它可以幫助!

更新: - 事情又改變了。現在,發件人ID與Firebase一起使用。

轉到https://console.firebase.google.com並選擇您的項目。在設置 - >雲消息傳遞下,您可以找到發件人ID。

它的工作原理!

+0

哦,天啊!你的文章節省了我的時間......謝謝! –

0

如果使用了原生的Android,請檢查您AndroidMaifest.xml文件:

<meta-data 
     android:name="onesignal_google_project_number" 
     android:value="str:1234567890" /> 
    <!--    its is correct. --> 

代替

<meta-data 
     android:name="onesignal_google_project_number" 
     android:value="@string/google_project_number" /> 

希望它可以幫助!

3

最近我遇到了同樣的問題,我根據項目ID爲「gcm_sender_id」嘗試了不同的值。但是,必須將「gcm_sender_id」值設置爲「項目編號」。

您可以在以下位置找到該值:菜單> IAM &管理員>設置。

見截圖:GCM Project Number

1
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope) 

authorizedEntity是

1

你的Android的應用程序需要糾正12位數字的ID(又名GCM項目編號)服務器的項目編號。如果這個12位數字不正確,那麼你也會得到這個錯誤。

這12位數字中找到你的谷歌遊戲控制檯您的具體應用,「服務& API」下 - >「關聯性者編號」

相關問題