我正在尝试为我的Android应用程序创建推送服务,并且我关注此问题的Google GCM文档和示例:
我可以注册/取消注册我的Android应用。从我的服务器端,我可以看到我注册了一个订阅,但是当我尝试从服务器向我的Android应用程序发送消息时,我总是会收到以下错误:
向设备#0发送消息时出错:MismatchSenderId
对于我的Android应用,我使用SENDER_ID = 200000000001。
对于我的服务器端,谷歌说我使用API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs
我遵循了这份文件:
我也在我的Google API面板中启用了GCM,但我会收到恼人的错误消息。
如何解决此问题?
答案 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
答案 7 :(得分:0)
检查Android项目google-services.json
文件夹中的app
文件。如果不确定,请从Firebase控制台生成一个新的。我在两种情况下都收到此错误。
我在测试应用程序(包含正确的google-services.json
文件)中使用了测试Firebase项目。然后,我尝试将推送通知发送到另一个应用程序,并收到此错误(““错误”:“ MismatchSenderId”')。我知道第二个应用程序已绑定到另一个具有不同google-services.json
的Firebase项目。由于服务器密钥不同,因此应重写请求。
我在应用程序中更改了google-services.json
,因为我想将 test Firebase项目替换为 actual 。我生成了正确的google-services.json
文件,更改了请求,但一直收到此错误。第二天,它自行修复。我怀疑Firebase无法同步更新。
要获取请求的服务器密钥,请打开https://console.firebase.google.com并选择适当的项目。
然后将其粘贴到请求中。
答案 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!!