2012-10-18 57 views
7

我想在我的Android应用程序中使用GCM服务。Android谷歌云消息传递(GCM)和不匹配的发件人ID

为此,我使用的Android文档从http://developer.android.com/guide/google/gcm/gcm.html

我所创建的客户端登记处理与发送方的ID等,并且其中,我使用的注册ID和发送者ID发送消息的服务器侧应用。

当我通过Eclipse在我的手机中安装应用程序时,推送通知工作正常,所以我拥有的发件人ID是正确的。

然后,当我apk文件导出Eclipse和在我的手机上安装它,我收到错误的信息,即SenderId是错误的

MissmatchedSenderId 

任何人有一个想法whyI正在此。

我已阅读这些主题:

Why do I get "MismatchSenderId" from GCM server side?

When sending messages using GCM, I keep getting the response 'MismatchSenderId'

但在我的情况下,奇怪的是,一切都导出应用为APK前工作正常,然后我有这个问题。

任何想法都是很好的。

回答

10

我真的有同样的问题,并且正在研究超过10个小时。

我终于发现问题了! 与服务器API密钥或浏览器API密钥或SenderID没有任何关系。 问题是谷歌文档:

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

谷歌说,你要调用getRegistrationId功能且仅当该ID是空的通话记录! 这对我来说根本不起作用......当我这样做的时候,我总是收到MismatchSenderId发送到这个regId。

我的解决办法是: 总是调用

GCMRegistrar.register(this, SENDER_ID); 

当功能

protected void onRegistered(Context c, String regId) 

在我的服务器数据库称为保存的RegID。

如果我这样做,一切正常!

+0

非常感谢@schurtertom,这实际上也适用于我。 –

+0

我在哪里可以找到“GCMRegistrar”,我已将Google Play Services添加为我的项目属性中的库。仍然无法导入这个类。你能帮我解决这个问题吗? –

1

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

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

我们在更新服务器API密钥后就能解决问题。 也由@schurtertom的答案是非常有帮助