Несколько push-уведомлений Apple не отображаются в области уведомлений
Я в основном хочу сделать несколько push-уведомлений в одном приложении видимыми в трее уведомлений в iOS.
Этот сценарий работает, если мои данные включены, в то время как push-уведомление инициируется через APNS, но только последняя получена, если я не в сети и через некоторое время возвращаюсь. Эта функциональность подтверждена документацией APNS.
Тем не менее, это то, что работает в WhatsApp:
- Выключен Data Connection
- Отправил несколько сообщений в WhatsApp
- Включено соединение для передачи данных
- Видел несколько push-уведомлений, полученных в трее уведомлений Apple
Как работает этот сценарий? Могу ли я использовать APNS для этого? Если да, то как?
Посмотрите этот пример изображения нескольких Push-уведомлений в WeChat.
3 ответа
Как вы написали в своем вопросе, это упоминается в Apple Docs:
Если вы отправляете несколько уведомлений на одно и то же устройство или компьютер в течение короткого периода времени, служба push-уведомлений отправит только последнее.
Единственный сценарий того, что вы описываете, будет работать, если ваш WhatsApp был открыт в фоновом режиме при получении тех, push notifications
, Таким образом, WhatsApp будет обрабатывать их как local notifications
и представит их всех в центре уведомлений. Если WhatsApp был закрыт, вы получите только последнее уведомление, как и любое другое приложение.
Вы можете легко проверить это:
- Завершите WhatsApp и включите
Airplane mode
, - Отправьте на ваше устройство 5 сообщений от 1 до 5.
- Очередь
Airplane mode
выключите и заблокируйте ваше устройство. - Вы увидите только одно сообщение (последнее, которое вы отправили "5") в вашем
notifications center
,
Вот как работает WhatsApp:
Пока whatsApp находится в фоновом режиме, получено одно push-уведомление (последнее, которое отправил пользователь, в нашем примере - "5"). Это сообщение не будет показано пользователю.
whatsApp получает его в методе application:didReceiveRemoteNotification:fetchCompletionHandler:
и проверяет на своих серверах, есть ли какие-либо уведомления до "5", которые пользователь не получил. В этом случае они извлекают эти данные со своих серверов и представляют их пользователю, используя local notifications
который в основном является просто способом представления данных и вообще не связан с APNS.
Как описано выше, вы не можете контролировать эти push-уведомления.
Однако вы, возможно, знаете, что в iOS7 новый фоновый режим выполнения (удаленное уведомление) позволяет приложению пробуждаться при получении нажатия, позволяя вам обработать некоторые данные и затем вернуться в спящий режим...
Вероятно, в этом и заключается хитрость: использовать этот способ для получения push-уведомлений (без вывода сообщений) и затем вместо этого запускать собственное локальное уведомление, как сказал @Segev. Смотрите UIBackgroundModes здесь.
Это объяснено в Устранении проблем Push-уведомлений. Проверьте раздел "Некоторые уведомления получены, но не все".