Несколько push-уведомлений Apple не отображаются в области уведомлений

Я в основном хочу сделать несколько push-уведомлений в одном приложении видимыми в трее уведомлений в iOS.

Этот сценарий работает, если мои данные включены, в то время как push-уведомление инициируется через APNS, но только последняя получена, если я не в сети и через некоторое время возвращаюсь. Эта функциональность подтверждена документацией APNS.

Тем не менее, это то, что работает в WhatsApp:

  1. Выключен Data Connection
  2. Отправил несколько сообщений в WhatsApp
  3. Включено соединение для передачи данных
  4. Видел несколько push-уведомлений, полученных в трее уведомлений Apple

Как работает этот сценарий? Могу ли я использовать APNS для этого? Если да, то как?

Посмотрите этот пример изображения нескольких Push-уведомлений в WeChat.

3 ответа

Решение

Как вы написали в своем вопросе, это упоминается в Apple Docs:

Если вы отправляете несколько уведомлений на одно и то же устройство или компьютер в течение короткого периода времени, служба push-уведомлений отправит только последнее.

Ссылка на сайт

Единственный сценарий того, что вы описываете, будет работать, если ваш WhatsApp был открыт в фоновом режиме при получении тех, push notifications, Таким образом, WhatsApp будет обрабатывать их как local notifications и представит их всех в центре уведомлений. Если WhatsApp был закрыт, вы получите только последнее уведомление, как и любое другое приложение.

Вы можете легко проверить это:

  1. Завершите WhatsApp и включите Airplane mode,
  2. Отправьте на ваше устройство 5 сообщений от 1 до 5.
  3. Очередь Airplane mode выключите и заблокируйте ваше устройство.
  4. Вы увидите только одно сообщение (последнее, которое вы отправили "5") в вашем notifications center,

Вот как работает WhatsApp:

Пока whatsApp находится в фоновом режиме, получено одно push-уведомление (последнее, которое отправил пользователь, в нашем примере - "5"). Это сообщение не будет показано пользователю.

whatsApp получает его в методе application:didReceiveRemoteNotification:fetchCompletionHandler: и проверяет на своих серверах, есть ли какие-либо уведомления до "5", которые пользователь не получил. В этом случае они извлекают эти данные со своих серверов и представляют их пользователю, используя local notifications который в основном является просто способом представления данных и вообще не связан с APNS.

Как описано выше, вы не можете контролировать эти push-уведомления.

Однако вы, возможно, знаете, что в iOS7 новый фоновый режим выполнения (удаленное уведомление) позволяет приложению пробуждаться при получении нажатия, позволяя вам обработать некоторые данные и затем вернуться в спящий режим...

Вероятно, в этом и заключается хитрость: использовать этот способ для получения push-уведомлений (без вывода сообщений) и затем вместо этого запускать собственное локальное уведомление, как сказал @Segev. Смотрите UIBackgroundModes здесь.

Это объяснено в Устранении проблем Push-уведомлений. Проверьте раздел "Некоторые уведомления получены, но не все".

Другие вопросы по тегам