77

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

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

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

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

对于我的服务器端,正如谷歌所说,我使用 API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXXxxxxs

我遵循了这份文件:

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

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

我该如何解决这个问题?

4

11 回答 11

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 锁定)”

于 2012-07-03T15:07:29.440 回答
24

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

https://console.cloud.google.com

代替

https://console.developers.google.com

希望能帮助到你!!

更新:- 事情又变了。现在发件人ID与firebase一起使用。

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

它有效!

于 2016-04-08T06:15:44.743 回答
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

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

于 2015-12-24T06:01:25.133 回答
4

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

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

见截图:GCM 项目编号

于 2016-06-14T08:01:17.427 回答
3

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

于 2018-11-16T10:31:16.053 回答
2

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

这个 12 位数字可在您的 Google Play 控制台中的特定应用“服务和 API”->“链接发件人 ID”下找到

于 2016-11-02T14:11:07.317 回答
2
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)

authorizedEntity 是服务器的项目号

于 2016-08-11T23:55:54.117 回答
0

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

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

  2. 我在应用程序中进行了更改google-services.json,因为我想用实际的. 我生成了正确的文件,更改了请求,但一直收到此错误。第二天它就自行修复了。我怀疑 Firebase 不会同步更新。google-services.json

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

在此处输入图像描述

然后将其粘贴到请求中。

在此处输入图像描述

于 2019-09-04T09:29:35.010 回答
0

随着 GCM 的弃用和其 API 的移除,如果您在 2019 年 5 月 29 日之后尝试使用 GCM,您可能会看到 MismatchSenderId。有关更多详细信息,请参阅Google GCM 和 FCM 常见问题解答

于 2020-06-01T22:19:18.463 回答
-1

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

于 2016-03-06T10:17:45.593 回答
-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" />

希望能帮助到你!!

于 2016-04-21T21:49:24.923 回答