AWS SNS 端点自行禁用

AWS SNS Endpoint getting disabled on its own

我已将我的 Android 和 iOS 应用设置为能够通过 SNS 接收通知。设置工作正常,设备确实收到通知。但后来,通知开始失败。

我已经为成功和失败场景启用了日志记录。根据日志,我不断收到以下形式的错误:"Endpoint is disabled:arn:aws:sns:myRegion:myAccount:endpoint/GCM/myApp/myDeviceEndpointHash"

我知道错误意味着端点被禁用。此外,我知道通过控制台和 API.

重新启用端点的方法

我的问题是为什么这种情况一直发生。我将通知推送到的 99% 的设备都会发生这种情况。提前致谢。

在与 AWS 支持团队进行了长时间的交谈后,有几件事浮出水面。

  1. GCM 和 APNS 可以根据一些清理策略禁用您设备的端点。换句话说,这些设备的端点会发生变化,并且不受 AWS 的控制。
  2. 当 GCM 禁用您的设备端点时,它会在新端点和旧端点之间创建一个映射。使用此映射,它仍然能够通过旧端点提供通知。但是,此映射仅存在一小段时间。一旦这个映射消失了,通知就开始失败。此外,当映射存在时,GCM 会向 SNS 提供一条警告消息,即端点将很快被禁用并提供新的端点,但它只会被记录下来。

现在,该怎么办?解决方案分为两部分:

  1. 每当您的应用程序启动时,您都会为它创建一个新端点,携带 完成此设备的整个 SNS 注册过程。这导致 要使用最新设备端点更新的 SNS 存储库 由 GCM 提供。
  2. 假设用户在很长一段时间内没有启动该应用程序。然后,您可以在 SNS 日志上放置一个 Lambda,使用这个 Lambda 您可以确定端点何时将被禁用。 对于此事件,您可以向设备推送静默通知并 那么您的设备必须在 SNS 上静默重新注册。

第二步涉及服务器端和设备端的大量工作。最后,我们决定不实施它,因为它不会发生在大多数用户身上,而且所涉及的工作也不合理。