Я пытаюсь использовать push-уведомления Apple. Все работает нормально, кроме случаев, когда приложение находится в фоновом режиме.
Метод обратного вызова DidRecieveRemoteNotification
иногда не вызывается сразу после получения уведомления. Иногда для вызова требуется более 5 минут. Это стандартное поведение?
Когда приложение работает на переднем плане, метод обратного вызова вызывается сразу после получения уведомления. Я хотел бы такое же поведение, даже когда приложение находится в фоновом режиме.
Тихие уведомления немедленно вызывают обратный вызов, когда они находятся в фоновом режиме, поскольку их цель — разбудить приложение на короткий период времени.
В целях экономии заряда батареи обычные push-уведомления не будут вызывать обратный вызов в фоновом режиме (если только ваше приложение не выполняет что-то еще в фоновом режиме). Обратный вызов будет вызван при следующем открытии приложения, будь то нажатие на уведомление или иным образом.
Это не то, что вы можете исправить, так работает экосистема. Если вам нужно, чтобы ваше приложение делало что-то немедленно, вам придется использовать тихие уведомления.
Итак, после дальнейшего расследования я обнаружил, что была еще одна ошибка, не позволяющая iOS разбудить мое приложение. Теперь он работает как положено с тихими уведомлениями. Спасибо!
Он работал около получаса, и я пытался отправить много уведомлений, может быть, около 50. Затем он снова перестал пробуждать приложение сразу после доставки уведомления.
@DanielGlos, как быстро вы отправили 50? PushNotificaitons не имеют соглашения об уровне обслуживания. Они могут быть задержаны, они могут никогда не появиться, только один хранится на серверах яблок, если вы не в сети, а остальные удаляются и т. д. Какого варианта использования вы пытаетесь достичь, вам может понадобиться веб-сокет
Когда клиент создает новый заказ, отправляется уведомление, и приложение должно распечатать счет заказа. В документации iOS говорится: «Приложения, которые потребляют значительное количество энергии при обработке удаленных уведомлений, не всегда могут быть пробуждены раньше для обработки будущих уведомлений». так что, возможно, это тот случай, когда он перестает работать после получения нескольких уведомлений.
@DanielGlos да. Если вы пытаетесь создать приложение, которое всегда будет прослушивать события (возможно, вы создаете что-то для магазина, например, приложение для точек продаж), то PushNotifications — неправильный путь. Вам нужно будет использовать веб-сокет между вашим бэкэндом и включить фоновый режим, чтобы соединение могло оставаться открытым в фоновом режиме.
Попробовал ваше предложение с тихими уведомлениями, но оно ведет себя точно так же. Иногда он вызывается сразу, иногда требуется некоторое время.