Как WhatsApp обходит ограничение APNS для отображения нескольких сообщений pu sh, полученных, когда устройство не подключено? - PullRequest
2 голосов
/ 26 апреля 2020

Работая с APNS, я смог обеспечить безупречную работу уведомлений pu sh, когда устройство подключено к сети.

Для любых APNS pu sh, которые я отправляю, когда устройство находится в автономном режиме, только последнее Получено, как только устройство вернется в онлайн. Кажется, это согласуется с дизайном Apple Store-and-Forward .

Однако - я заметил, что при отправке сообщений WhatsApp на автономное устройство, когда это устройство подключается к сети, оно получает все pu sh уведомления (по одному на каждое сообщение). Это не что-то, основанное на идентификаторе свертывания, а скорее независимое уведомление pu sh для каждого сообщения.

Так как же это сделал WhatsApp?

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

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Вместо обычного уведомления pu sh, используйте Background Notification , которое не будет отображать ничего видимого, но разбудит ваше приложение в фоновом режиме. Используйте это событие, чтобы выполнить вызов API, получить соответствующие данные и сгенерировать несколько локальных уведомлений.

При внедрении application(_:didReceiveRemoteNotification:fetchCompletionHandler:):

* обратите внимание на следующее. 1010 * система вызывает этот метод, когда ваше приложение работает на переднем или заднем плане система не запускает ваше приложение автоматически, если пользователь принудительно завершил его , вы должны вызвать заблокируйте параметр обработчика (fetchCompletionHandler), иначе ваше приложение будет остановлено. Ваше приложение имеет до 30 секунд времени настенного времени для обработки уведомления и вызова указанного блока обработчика завершения Приложения, использующие значительное количество энергии при обработке удаленных уведомлений, не всегда могут проснуться рано, чтобы обработать будущее уведомления

Пожалуйста, полностью прочитайте соответствующую документацию, прежде чем делать какие-либо предположения о том, как, по вашему мнению, это должно работать.

0 голосов
/ 26 апреля 2020

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

Если вы используете один и тот же идентификатор при планировании нового уведомления, система удаляет ранее запланированное уведомление с этим идентификатором и заменяет его новым.

Для локальных уведомлений это свойство устанавливается равным значению, которое передается инициализатору запроса (см. метод init(identifier:content:trigger:)). Для удаленных уведомлений ему присваивается значение ключа apns-collapse-id, которое вы указали в заголовке запроса APN при создании удаленного уведомления. Если значение не установлено, система автоматически присваивает идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...