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

时间:2012-07-03 14:41:12

标签: 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,但我会收到恼人的错误消息。

如何解决此问题?

11 个答案:

答案 0 :(得分:66)

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

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

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

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

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

答案 1 :(得分:22)

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

https://console.cloud.google.com

而不是

https://console.developers.google.com

希望它有所帮助!!

更新: - 情况又发生了变化。现在发件人ID是使用firebase。

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

它有效!

答案 2 :(得分: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

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

答案 3 :(得分:4)

我最近遇到了同样的问题,我根据项目ID尝试了“gcm_sender_id”的不同值。但是,“gcm_sender_id”值必须设置为“项目编号”。

您可以在以下菜单中找到此值:菜单> IAM&管理员>设置。

查看屏幕截图:GCM Project Number

答案 4 :(得分:2)

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

authorizedEntity是服务器的项目编号

答案 5 :(得分:2)

您的Android应用需要更正12位数字ID(又名GCM项目编号)。如果这个12位数字不正确,那么你也会收到这个错误。

这个12位数字可以在您的Google Play控制台中找到,位于您的特定应用“服务& API' - > 'LINKED SENDER IDS'

答案 6 :(得分:0)

服务器密钥和S ender ID 参数HTTP请求彼此不匹配时,会发生这种情况。基本上,服务器ID和服务器密钥都必须属于同一个Firebase项目。请参考下图。如果混合使用来自不同Firebase项目的这些参数,则会导致错误 MismatchSenderId enter image description here

答案 7 :(得分:0)

检查Android项目google-services.json文件夹中的app文件。如果不确定,请从Firebase控制台生成一个新的。我在两种情况下都收到此错误。

  1. 我在测试应用程序(包含正确的google-services.json文件)中使用了测试Firebase项目。然后,我尝试将推送通知发送到另一个应用程序,并收到此错误(““错误”:“ MismatchSenderId”')。我知道第二个应用程序已绑定到另一个具有不同google-services.json的Firebase项目。由于服务器密钥不同,因此应重写请求。

  2. 我在应用程序中更改了google-services.json,因为我想将 test Firebase项目替换为 actual 。我生成了正确的google-services.json文件,更改了请求,但一直收到此错误。第二天,它自行修复。我怀疑Firebase无法同步更新。

要获取请求的服务器密钥,请打开https://console.firebase.google.com并选择适当的项目。

enter image description here

然后将其粘贴到请求中。

enter image description here

答案 8 :(得分:0)

随着GCM的弃用和API的删除,如果您在2019年5月29日之后尝试使用GCM,则可能会看到MismatchSenderId。有关更多详细信息,请参见the Google GCM and FCM FAQ

答案 9 :(得分:-1)

使用发件人ID&此处生成的API密钥:http://developers.google.com代替(首先浏览Google Cloud Messaging并按照说明操作)。

答案 10 :(得分:-1)

If use for native Android, check your AndroidMaifest.xml file:

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

instead

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

Hope it helps!!