7

我正在尝试在我的 android 应用程序中使用 GCM 服务。

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

我使用发件人 ID 等创建了客户端注册过程,并创建了使用注册 ID 和发件人 ID 发送消息的服务器端应用程序。

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

然后,当我使用 Eclipse 导出 apk 文件并将其安装到手机中时,我收到 SenderId 错误的错误消息

MissmatchedSenderId

任何人都知道我为什么会得到这个。

我已经阅读了这些主题:

为什么我从 GCM 服务器端得到“MismatchSenderId”?

使用 GCM 发送消息时,我不断收到响应“MismatchSenderId”

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

任何想法都是受欢迎的。

4

2 回答 2

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 为空时才调用寄存器!这对我根本不起作用......当我这样做时,我总是在发送到这个 regId 时返回 MismatchSenderId。

我的解决方案是:总是打电话

GCMRegistrar.register(this, SENDER_ID);

当函数

protected void onRegistered( Context c, String regId )

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

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

于 2012-10-18T09:00:14.073 回答
1

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

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

更新服务器 API 密钥后,我们能够解决该问题。@schurtertom 的回答也很有帮助

于 2013-08-18T19:10:33.000 回答