【问题标题】:AWS SNS Endpoint getting disabled on its ownAWS SNS 终端节点自行禁用
【发布时间】:2017-06-14 22:27:34
【问题描述】:

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

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

我知道这个错误意味着端点被禁用。另外,我知道通过控制台和 API 重新启用端点的方法。

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

【问题讨论】:

  • 您的发送服务器上是否设置了正确的推送证书/权限?需要仔细检查的一件事是您发送的是正确的开发/产品证书。
  • 证书是正确的,因为我能够在开发和生产环境中推送通知。唯一的问题是它在一段时间后停止工作并且在检查错误消息时,我只收到“端点已禁用”错误。即使是现在,如果我从 TestFlight 以及商店安装应用程序,通知也会正常工作。

标签: push-notification amazon-sns


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2016-06-27
    • 1970-01-01
    • 2017-11-01
    • 2021-04-06
    • 1970-01-01
    • 2018-11-30
    • 2019-11-30
    相关资源
    最近更新 更多