Как часто проверяете отзывы APNS? - PullRequest
9 голосов
/ 14 февраля 2012

Чтобы обнаружить недействительные токены, как часто я должен проверять службу обратной связи?

Я внедрил систему вещания, используя сервис APNS. Я открываю соединение, отправляю все сообщения APNS и отключаюсь. Затем я открываю соединение обратной связи сразу после завершения трансляции и читаю все недействительные токены.

Я получаю недопустимые токены в соединении обратной связи. Тем не менее, часто моя трансляция происходит только частично (некоторые устройства получают, а другие нет), и когда я удаляю все токены, кроме заведомо исправных, мои тестовые устройства постоянно получают сообщение.

Я предполагаю, что это означает, что Apple прекращает трансляцию после получения первых нескольких недействительных токенов.

Так я правильно не слушаю обратную связь?

Ответы [ 2 ]

3 голосов
/ 07 июня 2012

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

Это позволяет клиенту правильно повторить уже отправленные сообщения и удалить токен, который был недействительным

2 голосов
/ 18 февраля 2012

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

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

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

То, что вы должны искать, это:

  • Убедитесь, что в вашей базе данных есть только VALID токены
  • Убедитесь, что у вас есть схема повторов
  • Взгляните на Notnoop , это очень простой Java API, который много для вас обрабатывает
...