Android GCM 发送和 MismatchSenderId
Posted
技术标签:
【中文标题】Android GCM 发送和 MismatchSenderId【英文标题】:Android GCM send and MismatchSenderId 【发布时间】:2012-12-05 16:16:04 【问题描述】:奇怪的是,通知以前可以工作。所以我不确定发生了什么。我尝试将我的应用重新安装到设备上,但没有任何改变。
"multicast_id":xxxxxxxxxxxxxxxxxxx,"success":0,"failure":1,"canonical_ids":0,"results":["error":"MismatchSenderId"]
因为这在某一时刻有效,所以我知道我使用了正确的键。我什至根据我遇到的其他 SOF 线程进行了三次检查。现在潜在的问题是什么?我已经环顾了几天了,我仍然不知所措..
** 编辑 **
这是从我的服务器发出消息时的 POST 信息。
标题
Array
(
[0] => Authorization: key=xxxxxxx-key-for-browser-apps-from-google-apis-console-xxxxxxx
[1] => Content-Type: application/json
)
字段
Array
(
[registration_ids] => Array
(
[0] => xxxxxxxxx-big-old-id-from-the-device-xxxxxxxx
[data] => Array
(
[message] => hello
)
)
还有
我正在使用与Key for browser apps (with referers)
关联的密钥。
【问题讨论】:
你在服务器端有什么改变吗? 我做了一些调整,但我发布的 POST 信息离开了我的服务器。它似乎要结帐,所以我不确定这笔交易是什么.. 由于 redId 可能会有所不同,您确定使用的是注册时获得的最后一个 regId 吗?不久前我遇到了类似的问题,问题是我使用的是插入数据库中的旧 regId。我现在要做的是:在 GCM 中注册,将 regId 保存在移动设备(作为首选项)和远程数据库中。当应用程序再次启动时,我注册手机,检查 regIds 是否匹配;如果他们不这样做,我会从本地和服务器中删除旧的,然后分别将新的保存并插入到移动设备和数据库中。如果它们匹配,我什么也不做。也许有帮助。 【参考方案1】:显然,当您重新编译您的应用程序时,它有时会将设备 ID 生成抛到与之前的 ID 不匹配的位置。
我要做的是在我的手机上完全卸载该应用程序并再次重新编译该应用程序(通过 Eclipse)。这似乎很可悲,但它是我目前最接近可行的解决方案..
【讨论】:
感谢帮了我很多忙的人。我猜谷歌正在缓存首选项,这可以解释为什么卸载有帮助。 无效***.com/questions/35812304/…【参考方案2】:我认为这一定与您在 Google API 控制台中为您的项目设置 API 访问权限的方式有关,尤其是“允许的引用者”。正如开发文档所说
不匹配的发件人 注册 ID 绑定到某个组 发件人。当应用程序注册使用 GCM 时,它必须指定 允许哪些发件人发送消息。确保您使用的是一个 尝试向设备发送消息时的那些。如果你切换到 不同的发件人,现有的注册 ID 将不起作用。发生 当错误代码为 MismatchSenderId 时。
我的项目设置为允许任何引用者,例如:
Key for browser apps (with referers)
API key: my secret
Referers: Any referer allowed
也许您已将其限制在某个 IP 范围内,现在您正试图从该范围之外发送消息
【讨论】:
有趣的是你应该提到这一点。我实际上早先遇到了这个问题,但我发现我必须使用默认的Key for browser apps (with referers)
来解决这个问题。很好的解决方案。
在您的 API 控制台中,“浏览器应用程序的密钥(带有引用者)”部分实际上是否说“允许任何引用者”?如果确实如此,那么我对导致您的错误的原因感到困惑。
太棒了!生成了一个Browser key
,它成功了!奇怪为什么它不能使用服务器密钥。很高兴知道...【参考方案3】:
您没有使用正确的设备令牌,这就是您收到错误的原因。 所以,请获取新的设备令牌(android手机的令牌)并使用它
【讨论】:
【参考方案4】:卷曲 -X POST \ -H "授权:key=在这里写api_key" \ -H "内容类型:应用程序/json" \ -d '"registration_ids": ["这里写gcm生成的reg_id"], "data": "message": "来自 Rajkumar 的手动推送通知", “优先级”:“高” '\ https://android.googleapis.com/gcm/send
MismatchSenderId 因为在同一设备上您使用不同的密钥登录。要解决此问题,请卸载应用程序并再次运行它并更新注册密钥。然后在您的终端中运行我在上面发布的 CURL 脚本,它将给出成功消息,您将收到通知到您的设备
【讨论】:
以上是关于Android GCM 发送和 MismatchSenderId的主要内容,如果未能解决你的问题,请参考以下文章