我想在满足某个条件时通知应用用户,例如拍卖价格已经达到某个点或某个电视的价格已经低于用户设定的阈值。
每当应用注册通知时,都会返回来自Google的注册令牌。但是,注册令牌不是永久性的,可能会更改,从而导致多个令牌和重复通知。
Android方法
当以下列形式作为对发送(或甚至dry_run)的响应时返回规范ID - " ... success":7, "失效":0, " canonical_ids":2, "结果":.... reference然后可用于提取规范ID。
对于iOS GCM通知,不会返回规范ID。
替代方法(键值) 另一种建议here的方法是使用商店gcm注册令牌和密钥。然后,如果gcm注册令牌发生更改,您可以根据密钥找到旧令牌。
Suggested object for a key是apns设备令牌,但设备令牌也可能会发生变化 - “另请注意,只要设备令牌发生变化,就可以调用委托方法”。 reference
我查看了使用UIDevice identifierForVendor作为可能的密钥,但这会在卸载/安装周期中发生变化。
这是最佳做法吗? 是否有建议的方法来避免重复通知无法跟踪注册令牌到唯一设备? iOS的Canonical ID,键值方法的唯一键?
建议的解决方案(反馈欢迎)
在服务器上,包含注册令牌(destination / to field)作为通知有效内容的一部分。在客户端(iOS应用程序),从通知有效负载中提取注册ID。在客户端上,跟踪从有效负载收到的注册ID,并向服务器发送您正在接收具有多个注册令牌的通知的事实。然后,服务器可以使较旧的注册令牌到期,和/或客户端甚至可以将它知道的哪个注册令牌(存储在上次注册的共享偏好中)发送到当前