从getCanonicalRegistrationId Canonical ID更新后,GCM在数据存储中多次使用相同的ID

时间:2016-05-02 13:11:57

标签: android google-app-engine google-cloud-messaging

我想在我的Android应用程序中实现GCM,我已将此代码用于我的服务器端实现。

https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints

实施工作正常,我的应用程序能够接收发送的消息。

我安装了我的应用并获得了一个GCM ID,在我的服务器上注册了它,然后我将其卸载并再次安装它并且这次获得了新的GCM ID。

现在我发送GCM消息,结果是这段代码( Canonical ID ),如果从结果中收到getCanonicalRegistrationId,它会更新数据存储中的GCM ID。

Result result = sender.send(msg, record.getRegId(), 5);

  if (result.getMessageId() != null) {
    log.info("Message sent to " + record.getRegId());
    String canonicalRegId = result.getCanonicalRegistrationId();
       if (canonicalRegId != null) {
          // if the regId changed, we have to update the datastore
          log.info("Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId);
          record.setRegId(canonicalRegId);
          ofy().save().entity(record).now();
       }

但是在app-engine数据存储中,我能够看到2行具有相同的GCM ID,因为在响应之后它会更新记录。

这是发送任何邮件之前的数据库图像,并且2个不同的 GCM ID存在于同一设备中(因为应用已安装两次) enter image description here

这是发送邮件后的数据库图像,并且有两个相同的 GCM ID(GCM ID字段具有相等的值)

enter image description here

所以问题是,这是一个问题,当我在具有相同GCM ID的多个记录后发送消息时,因为我在我的应用程序中收到多条消息。我应该如何尝试纠正它。

当我卸载应用程序时,之后我在应用程序引擎中获取这些日志。 没有GCM ID将其从数据存储中删除,并且此调用也会多次执行。

注册ID APA91bGn_GgXcp4L_bqwOMhmO9BRnXfjCAQgso-EbmC27L1UoNcdcPmtt5rxVMXKtW7P3_fzUNGmyMXtKBjz22iCVLiYyKPwp3uGrd8BxPlXhfQeIqYHKfyimciVXLuXdsGFvzIlIMrf不再向GCM注册,从数据存储中删除

因此,如果将多封邮件发送到同一设备,我是否会快速使用应用引擎中的免费GCM配额?

enter image description here

1 个答案:

答案 0 :(得分:0)

我在我的表中添加了androidId字段,所以在注册时检查,如果表中存在androidId我更新该行的gcm id,这样我的表中只有一行,即使app安装了多个在同一设备上的次数