我想在我的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存在于同一设备中(因为应用已安装两次)
这是发送邮件后的数据库图像,并且有两个相同的 GCM ID(GCM ID字段具有相等的值)
所以问题是,这是一个问题,当我在具有相同GCM ID的多个记录后发送消息时,因为我在我的应用程序中收到多条消息。我应该如何尝试纠正它。
当我卸载应用程序时,之后我在应用程序引擎中获取这些日志。 没有GCM ID将其从数据存储中删除,并且此调用也会多次执行。
注册ID APA91bGn_GgXcp4L_bqwOMhmO9BRnXfjCAQgso-EbmC27L1UoNcdcPmtt5rxVMXKtW7P3_fzUNGmyMXtKBjz22iCVLiYyKPwp3uGrd8BxPlXhfQeIqYHKfyimciVXLuXdsGFvzIlIMrf不再向GCM注册,从数据存储中删除
因此,如果将多封邮件发送到同一设备,我是否会快速使用应用引擎中的免费GCM配额?
答案 0 :(得分:0)
我在我的表中添加了androidId字段,所以在注册时检查,如果表中存在androidId我更新该行的gcm id,这样我的表中只有一行,即使app安装了多个在同一设备上的次数