我有疑问。当GCM返回规范id时,我该如何处理这种情况。 我在StackOverflow上发现了几个相同的问题,但没有解决方案。 Amazon SNS有关令牌管理的文档说SNS会自动处理这种情况。当GCM返回规范id亚马逊SNS用新的更新旧令牌。但我怎么知道呢?我有自己的数据库,包含所有已注册的令牌和端点。我不知道亚马逊是否是更新令牌,并向所有人发送通知。结果在设备上发现了大量重复的消息。
P.S。服务器必须支持一个帐户的多个设备。
答案 0 :(得分:0)
有关如何管理移动令牌的信息,请查看http://mobile.awsblog.com/post/Tx223MJB0XKV9RU/Mobile-token-management-with-Amazon-SNS。
答案 1 :(得分:0)
仅当您的应用已使用他们注册时,Amazon SNS才会处理令牌管理。由于您拥有自己的数据库和端点,因此您必须自己管理它。
从服务器推送消息后,您将收到响应中的规范ID。
根据Google的文档,
规范注册ID是最后一个的注册令牌 客户端应用程序请求的注册。这是该ID 服务器应该在向设备发送消息时使用。
如果您尝试使用旧的注册令牌发送消息,GCM将会 像往常一样处理请求,但它将包括规范ID 响应的registration_id字段。一定要更换 使用此规范ID存储在服务器中的注册令牌,如 最终旧的注册令牌将停止工作。
最好使用推送后返回的规范ID更新您的注册ID。
此外,如果您的设备收到重复通知,则可能有所帮助: -
这可能是由于客户端应用程序中的错误导致同一设备的多个注册。因此,请确保同一设备未多次注册。
此外,如果您从设备卸载应用程序并尝试向该设备发送推送,则会从GCM服务器收到 NotRegistered 错误。然后,您的服务器应该删除注册令牌,而不是再次使用该注册令牌来推送消息。
P.S。即使一个用户有多个设备,您的数据库映射应该是这样的: - 用户的每个设备将具有不同的注册令牌,并且每个令牌将映射到单个用户。 由于令牌不同,因此在用户的所有设备上接收相同的消息不会有问题。
希望这有帮助!干杯!