Android谷歌云消息传递(GCM)和不匹配的发送者ID

7
我正在尝试在我的安卓应用中使用GCM服务。为此,我使用了来自http://developer.android.com/guide/google/gcm/gcm.html的安卓文档。我创建了客户端注册流程,其中包括发送方ID等,以及服务器端应用程序,在该应用程序中,我使用注册ID和发送方ID来发送消息。当我通过Eclipse在手机上安装应用程序时,推送通知正常工作,因此我的发送方ID是正确的。然后,当我导出apk文件并在手机上安装它时,我收到错误消息,表示SenderId错误。
MissmatchedSenderId

有人知道我为什么会收到这个吗。

我已经阅读了这些主题:

为什么我从GCM服务器端收到"MismatchSenderId"?

使用GCM发送消息时,我一直收到响应'MismatchSenderId'

但在我的情况下奇怪的是,在将应用程序导出为apk之前,一切都正常工作,然后我就遇到了这个问题。

任何想法都非常欢迎。

2个回答

10

我曾经遇到了同样的问题,并进行了超过10个小时的研究。

最终我找到了问题所在! 与服务器API密钥、浏览器API密钥或发送者ID无关。 问题出在Google的文档上:

final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID);
} else {
  Log.v(TAG, "Already registered");
}

谷歌表示,您必须调用getRegistrationId函数,并且只有在id为空时才调用register!但是这对我完全没有用... 当我这样做时,每次发送到该regId时都会返回MismatchSenderId。
我的解决方案是: 始终调用
GCMRegistrar.register(this, SENDER_ID);

当函数

protected void onRegistered( Context c, String regId )

被称为将regId存储在我的服务器数据库中。

如果我这样做,一切都很顺利!


我在哪里可以找到“GCMRegistrar”?我已经将Google Play服务添加为我的项目属性库,但仍无法导入此类。您能否帮助我克服这个问题? - Parthiban M

1

GCM提供的SenderID和API密钥的组合是每个应用程序唯一的。

当我们在客户端更新SenderID但仍使用与旧SenderID相关的API密钥时,我们遇到了SenderID不匹配的问题。

我们在更新服务器API密钥后成功解决了该问题。@schurtertom的答案也非常有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接