【问题标题】:Why do I get "MismatchSenderId" from GCM server side?为什么我从 GCM 服务器端获得“MismatchSenderId”?
【发布时间】:2012-07-04 00:40:52
【问题描述】:

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

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

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

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

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

我关注了这份文件:

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

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

我该如何解决这个问题?

【问题讨论】:

  • 在 manifest.json 文件中检查 gcm 发件人 ID

标签: android push-notification google-cloud-messaging


【解决方案1】:

您的服务器是否使用了 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 的其他手机上?
  • 你看过 GCM 架构概述developer.android.com/guide/google/gcm/gcm.html 吗?使用您的应用程序的每部 Android 手机都将使用您的应用程序的 Sender ID 向 GCM 注册,并且它们将收到一个唯一的 GCM 注册 ID,您必须将其存储在您的服务器上。如果您希望向所有用户发送消息,则需要检查所有这些注册 ID。
  • 这真的很愚蠢,但它确实有效。仪表板页面中列出的项目 ID 是我必须选择的命名 ID,但是您必须使用 url 中的数字 ID,这非常令人困惑。
  • 我花了很长时间才找到这个答案@azgolfer,你是个传奇。伙计们仔细检查您的新注册ID!这为我解决了问题。
  • 此信息可能已过时。现在您应该使用您的项目 NUMBER
【解决方案2】:

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

https://console.cloud.google.com

而不是

https://console.developers.google.com

希望对你有帮助!

更新:- 事情又变了。现在发件人 id 使用 firebase。

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

它有效!

【讨论】:

  • 天哪!你的帖子为我节省了几个小时...谢谢!
【解决方案3】:

请在终端中运行以下脚本

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

成功或失败都会给出消息

【讨论】:

  • MismatchSenderId 因为在同一设备中您使用不同的密钥登录。要解决此问题,请卸载应用程序并再次运行它并更新注册密钥。然后在您的终端中运行我在上面发布的 CURL 脚本,它将给出成功消息,您将收到通知到您的设备
【解决方案4】:

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

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

见截图:GCM Project Number

【讨论】:

    【解决方案5】:

    Server key 和 Sender ID 参数 HTTP 请求不匹配时会发生这种情况。基本上服务器 ID 和服务器密钥都必须属于同一个 firebase 项目。请参考下图。如果混合来自不同 Firebase 项目的这些参数将导致错误 MismatchSenderId

    【讨论】:

      【解决方案6】:
      InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)
      

      authorizedEntity 是服务器的项目号

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

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

          2. 我在应用程序中更改了 google-services.json,因为我想用 实际 替换 test Firebase 项目。我生成了正确的google-services.json 文件,更改了请求,但一直收到此错误。第二天就自己修好了。我怀疑 Firebase 没有同步更新。

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

          然后将其粘贴到请求中。

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

                如果用于原生 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" />
                

                希望对你有帮助!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-06-21
                  • 2020-07-17
                  • 2019-08-20
                  • 2016-11-04
                  • 2012-09-18
                  • 2015-11-16
                  • 2021-02-08
                  相关资源
                  最近更新 更多