Android GCM仅向具有多个注册ID的设备发送一条消息

Android GCM仅向具有多个注册ID的设备发送一条消息,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,由于我们系统上的一个缺陷,我们错误地将每个设备和每个用户的多个注册ID附加到他们的配置文件中,而不是在升级后进行替换等等 显然,我们现在可以通过处理我们得到的响应中的规范ID来纠正这一点,但是对于一些用户(比如我自己),他们将得到多个通知,而不是每个设备一个通知 我读过可以通过 及 但似乎没有一个完美的解决方案。我刚刚检查过,我可以先发送一个“干运行”请求,处理多个注册ID,替换需要替换的,删除需要删除的,然后发送第二个(删减的)请求 这当然可能是一个解决方案,但我无法想象它会对我们的api

由于我们系统上的一个缺陷,我们错误地将每个设备和每个用户的多个注册ID附加到他们的配置文件中,而不是在升级后进行替换等等

显然,我们现在可以通过处理我们得到的响应中的规范ID来纠正这一点,但是对于一些用户(比如我自己),他们将得到多个通知,而不是每个设备一个通知

我读过可以通过

但似乎没有一个完美的解决方案。我刚刚检查过,我可以先发送一个“干运行”请求,处理多个注册ID,替换需要替换的,删除需要删除的,然后发送第二个(删减的)请求

这当然可能是一个解决方案,但我无法想象它会对我们的api配额友好(尽管我真的不知道)。HTTP equest上是否没有其他属性可以设置为仅发送到单个设备

无论您的信息需求有多大,GCM都是完全免费的,没有配额

(引自)

GCM没有配额,所以你可以毫无恐惧地尝试你的干跑步方法。唯一的问题是dry_运行模式是否实际返回规范注册ID,或者只是立即返回一些假消息ID

使用规范注册ID响应是清理数据库的唯一方法(而不是删除数据库并从头开始重新构建)


您可以在清理过程中进行一些小优化。如果您可以按照插入的顺序(从最早到最新)从数据库中获取注册ID,那么您可能会得到第一个注册ID的规范注册ID响应。对于它们中的每一个,您都将知道当前(规范)注册ID是什么,并将对其进行标记,以便在清理过程中不会发送到它。这将防止为数据库中最多有2个注册ID的所有设备发送重复消息(并将其他设备的重复消息数量减少一个)

我在那里进行了测试,dry_run确实会将所有内容发送回,就像它是一次真正的运行一样(规范ID和所有内容),只是一些带有“假”的内容,它们显然不会将数据推送到手机上。@seaders在这种情况下,dry_run肯定会解决您的问题。没有配额可担心。很酷,这是我实现的解决方案,但如果有更好的单请求解决方案,它真的会更好。希望它能在将来出现,但现在,2将不得不这样做。谢谢你的帮助!