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


76

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

我可以注册/注销我的Android应用程序。从服务器端,我可以看到已经注册了一个订阅,但是当我尝试将消息从服​​务器发送到我的Android应用程序时,总是出现以下错误:

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

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

对于Google所说的服务器端,我使用API​​_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxxxs

我遵循了这份文件:

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

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

我该如何解决这个问题?


在manifest.json文件中
签入

Answers:


68

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

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

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

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

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


我在这里有一个很大的疑问,是否可以将我的应用程序部署到只有一个SERIALID的其他手机上?
Seyed Vahid Hashemi

3
您是否看过GCM架构概述developer.android.com/guide/google/gcm/gcm.html?使用您的应用程序的每部Android手机都将使用您的应用程序的发件人ID向GCM注册,并且它们将收到一个唯一的GCM注册ID,您必须将其存储在服务器上。如果您希望向所有用户发送消息,则需要输入所有这些注册ID。
azgolfer 2012年

7
这确实很愚蠢,但是可以。仪表板页面上列出的项目ID是我要选择的命名ID,但是您必须使用URL中的数字ID,这非常令人困惑。
Redth 2012年

2
花了我很长时间才能找到这个答案@azgolfer你是一个传奇。伙计们仔细检查您的新注册ID!这为我解决了。
SergioM

5
该信息可能已过时。现在,您应该使用项目NUMBER
Ethan Fischer

24

不使用数字ID时会发生不匹配。项目ID不是发送者ID!我花了9个小时才弄清楚这一点。对于由Google造成的所有混乱,请检查以下链接以获取数字ID。

https://console.cloud.google.com

代替

https://console.developers.google.com

希望能帮助到你!!

更新:-事情又变了。现在,发件人ID为firebase。

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

而且有效!


天啊!您的帖子为我节省了时间...谢谢!
彼得·莫斯卡拉

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

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


6
MismatchSenderId,因为在同一设备中,您使用不同的密钥登录。要解决此问题,请卸载应用程序并再次运行g并更新注册密钥。然后在您的终端上运行CURL脚本,我会在该终端上发布成功消息,您将获得成功消息,并且您会收到通知您的设备的消息
Raj Kumar 2015年

4

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

您可以在以下菜单中找到该值:菜单> IAM和管理>设置。

查看截图:GCM项目编号



2

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

您可以在Google Play控制台的特定应用“服务和API”->“链接的用户ID”下找到此12位数字


2

服务器密钥发件人ID参数HTTP请求彼此不匹配时,会发生这种情况 。基本上,服务器ID和服务器密钥都必须属于同一个Firebase项目。请参考下图。如果混合了来自不同Firebase项目的这些参数,则会导致错误MismatchSenderId 在此处输入图片说明


0

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

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

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

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

在此处输入图片说明

然后将其粘贴到请求中。

在此处输入图片说明




-1

如果用于本机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" />

希望能帮助到你!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.