为什么我从GCM服务器端获得"MismatchSenderId"?

Sey*_*emi 71 android push-notification google-cloud-messaging

我正在尝试为我的Android应用创建推送服务,并且我遵循Google GCM的文档和示例:

我可以注册/取消注册我的Android应用程序.从我的服务器端,我可以看到我注册了一个订阅,但当我尝试从服务器向我的Android应用程序发送消息时,我总是会收到以下错误:

向设备#0发送消息时出错:MismatchSenderId

对于我的Android应用,我使用SENDER_ID = 200000000001.

对于我的服务器端,谷歌说我使用API​​_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

我按照这个文件:

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

我也在我的Google API面板中启用了GCM,但我会收到恼人的错误消息.

我该如何解决这个问题?

azg*_*fer 66

您的服务器是否使用GCM服务器返回的新注册ID到您的应用程序?我有这个问题,如果尝试向旧C2DM服务器发出的注册ID发送消息.

并且还要仔细检查发件人ID和API_KEY,它们必须匹配,否则您将收到MismatchSenderId错误.在Google API控制台中,查看项目的网址:

https://code.google.com/apis/console/#project:xxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

xxxxxxxxx是项目ID,即发件人ID.

并确保API密钥属于"服务器应用程序密钥(具有IP锁定)"

  • 这真的很傻,但它确实有效.仪表板页面中列出的项目ID是我必须选择的命名ID,但是您必须使用URL中的数字ID,这非常令人困惑. (7认同)
  • 此信息可能已过期.现在您应该使用项目NUMBER (5认同)
  • 您是否查看了GCM架构概述http://developer.android.com/guide/google/gcm/gcm.html?每个使用您的应用的Android手机都会使用您应用的发件人ID向GCM注册,并且他们将收到您必须存储在服务器上的唯一GCM注册ID.如果您希望向所有用户发送消息,则需要查看所有这些注册ID. (3认同)
  • 花了我很多年才找到这个答案@azgolfer你是一个传奇.伙计们仔细检查你的新注册ID!这为我解决了这个问题. (2认同)

Aja*_*ngh 23

不使用数字ID时会发生不匹配.项目ID不是发送者ID !! 我花了9个小时来搞清楚这一点.对于谷歌创建的所有混淆,请检查以下链接以获取数字ID.

https://console.cloud.google.com

代替

https://console.developers.google.com

希望能帮助到你!!

更新: - 事情又变了.现在发件人ID是使用firebase.

转到https://console.firebase.google.com并选择您的项目.在设置 - >云消息传递下,您可以找到发件人ID.

它的工作原理!


Raj*_*mar 7

请在终端下面的脚本中运行

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
Run Code Online (Sandbox Code Playgroud)

如果成功或失败,它将给出消息

  • MismatchSenderId因为在同一设备中您使用不同的密钥记录.解决此问题卸载应用程序并运行它againg并更新注册密钥.然后在你的teminal中运行CURL脚本,我在上面发布它将给出成功消息,你将收到通知你的设备 (6认同)