【问题标题】:Android Google Cloud Messaging (GCM) and missmatched sender idAndroid Google Cloud Messaging (GCM) 和不匹配的发件人 ID
【发布时间】:2012-10-08 14:33:12
【问题描述】:

我正在尝试在我的 Android 应用中使用 GCM 服务。

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

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

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

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

MissmatchedSenderId

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

我已经阅读了这些主题:

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

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

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

任何想法都是受欢迎的。

【问题讨论】:

    标签: android google-cloud-messaging


    【解决方案1】:

    其实我也有同样的问题,研究了10多个小时。

    我终于发现问题了! 与服务器 API 密钥或浏览器 API 密钥或 SenderID 无关。 问题出在 Google 文档上:

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

    Google 说你必须调用 getRegistrationId 函数,并且只有当 id 为空时才调用寄存器! 这对我根本不起作用......当我这样做时,我总是在发送到这个 regId 时返回 MismatchSenderId。

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

    GCMRegistrar.register(this, SENDER_ID);
    

    当函数

    protected void onRegistered( Context c, String regId )
    

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

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

    【讨论】:

    • 非常感谢@schurtertom,这对我也有效。
    • 在哪里可以找到“GCMRegistrar”,我已将 Google Play 服务作为我的库添加到我的项目属性中。仍然无法导入此类。你能帮我解决这个问题吗?
    【解决方案2】:

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

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

    我们在更新服务器 API 密钥后解决了这个问题。 @schurtertom 的回答也很有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多