2017-02-16 18 views
1

У меня есть приложение для Android и iOS, чтобы получать уведомления через SNS. Настройка работает нормально, и устройство получает уведомления. Но позже уведомление начинает терпеть неудачу.AWS SNS Endpoint отключается самостоятельно

Я уже включил протоколирование как для сценариев успеха, так и для отказа. И в соответствии с журналами я продолжаю получать ошибки формы: «Конечная точка отключена: arn: aws: sns: myRegion: myAccount: конечная точка/GCM/myApp/myDeviceEndpointHash»

Я знаю, что ошибка означает, что конечная точка отключен. Кроме того, я знаю о способах повторного включения конечной точки через консоль и API.

Вопрос в том, почему это продолжается. Это происходит с 99% устройства, на которое я нажимаю уведомления. Заранее спасибо.

+0

У вас есть правильная настройка сертификата/разрешения на вашем сервере отправки? Одна вещь, чтобы дважды проверить, что вы отправляете правильные сертификаты dev/prod. –

+0

Сертификаты верны, так как я могу отправлять уведомления как в среде dev, так и в prod. Единственное, что он перестает работать через некоторое время и проверяет сообщение об ошибке, я просто получаю сообщение об ошибке «Endpoint is disabled». И даже сейчас, если я устанавливаю приложение из TestFlight, а также в хранилище, уведомления работают правильно. –

ответ

3

После продолжительного разговора с командой поддержки AWS появилось несколько вещей, которые всплыли.

  1. GCM и APNS могут отключить конечную точку вашего устройства, основываясь на некоторой политике очистки. Другими словами, устройства подвергаются изменениям в своих конечных точках и не контролируют AWS.
  2. Когда GCM отключает конечную точку вашего устройства, он создает сопоставление между новой конечной точкой и старой конечной точкой. Используя это сопоставление, он все еще может обслуживать уведомления через старую конечную точку. Но это отображение существует на короткое время. Как только это отображение исчезло, уведомления начинают сбой. Кроме того, хотя отображение есть, GCM предоставляет сообщение SNS для предупреждения о том, что конечная точка скоро будет отключена, а также предоставит новую конечную точку, но она будет только регистрироваться.

Теперь, что делать? Решение состоит из двух частей:

  1. Всякий раз, когда начинается ваше приложение, вы создаете новую конечную точку для него, несут из всего процесса регистрации SNS для данного устройства. Это приводит к обновлению репозитория SNS с последней конечной точкой устройства , предоставленной GCM.
  2. Предположим, пользователь не запустил приложение очень долго. Затем вы можете поместить Лямбду в журналы SNS, используя эту Лямбду , которую вы можете определить, когда конечная точка должна быть отключена. Для этого события вы можете нажать молчающее уведомление на устройство и , после чего ваше устройство должно перезаписывать себя на SNS незаметно.

Этот второй шаг включает в себя большую часть работы, как на стороне сервера, так и на стороне устройства. В конце концов, мы решили не реализовывать его, поскольку это не происходит для большинства пользователей, и работа не может быть оправдана.