我已将 Android 和 iOS 应用程序设置为能够通过 SNS 接收通知。设置工作正常,设备确实收到了通知。但后来,通知开始失败。
我已经启用了成功和失败场景的日志记录。根据日志,我不断收到以下形式的错误:“端点已禁用:arn:aws:sns:myRegion:myAccount:endpoint / GCM / myApp / myDeviceEndpointHash”
我知道该错误意味着端点已禁用。另外,我知道通过控制台和 API 重新启用端点的方法。
我的问题是为什么这种情况不断发生。我向其推送通知的 99% 的设备都会发生这种情况。提前致谢。
在与 AWS 支持团队进行长时间交谈后,出现了一些问题。
- GCM 和 APNS 可以根据某些清理策略禁用设备的端点。换句话说,设备的端点可能会发生变化,并且不受 AWS 的控制。
- 当 GCM 禁用您的设备端点时,它会在新端点和旧端点之间创建映射。使用此映射,它仍然能够通过旧端点提供通知。但是,这种映射只存在很短一段时间。一旦该映射消失,通知就会开始失败。此外,当映射存在时,GCM 会向 SNS 提供一条警告消息,表明该端点将很快被禁用,并提供新的端点,但它只会被记录。
现在,该怎么办?该解决方案分为两部分:
- 每当您的应用程序启动时,您都会为其创建一个新端点,携带
该设备的整个 SNS 注册过程。这导致
使用最新的设备端点更新 SNS 存储库
由 GCM 提供。
- 假设用户很长时间没有启动应用程序。然后,您可以使用以下方法在 SNS 日志上放置 Lambda
您可以通过 Lambda 确定端点何时将被禁用。
对于此事件,您可以向设备推送静默通知,然后
那么您的设备必须在 SNS 上静默重新注册。
第二步涉及服务器端和设备端的大量工作。最后,我们决定不实施它,因为大多数用户不会发生这种情况,而且所涉及的工作也不合理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)