Исходные данные iOS очищают предыдущие уведомления

Похоже, что независимо от того, возвращаю ли UIBackgroundFetchResultNewData или UIBackgroundFetchResultNoData из executeFetchWithCompletionHandler, он очищает все предыдущие уведомления (локальные или push) для моего приложения. Это неприемлемо для меня.

Кто-нибудь знает, как мне сделать выборку, а не очищать предыдущие уведомления (исчезают)?

Ответы

Ответ 1

Мое предположение заключается в том, что у вас есть фоновая выборка, которая устанавливает номер вашего значка в 0, если это когда-либо случается, все ваши уведомления очищаются.

Ответ 2

Источник: Справочник API Apple AppDelegate

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

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

application(_:didReceiveRemoteNotification:)

который вызывается только тогда, когда ваше приложение работает на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем плане или в фоновом режиме. Кроме того, если вы включили фоновый режим удаленных уведомлений, система запускает ваше приложение (или пробуждает его из приостановленного состояния) и помещает его в фоновое состояние при поступлении удаленного уведомления. Однако система не запускает ваше приложение автоматически, если у пользователя есть принудительное завершение. В этой ситуации пользователь должен перезапустить приложение или перезапустить устройство до того, как система снова попытается запустить приложение автоматически. Если пользователь открывает ваше приложение из системного предупреждения, система может снова вызвать этот метод, когда ваше приложение собирается ввести передний план, чтобы вы могли обновить свой пользовательский интерфейс и отобразить информацию, относящуюся к уведомлению.

Примечание. Убедитесь, что приложение проверяет состояние перед тем, как установить номер значка приложения в 0. Проверьте следующие случаи:

  • Запуск приложения, получение уведомления

  • Приложение завершено, получает уведомление

  • Запустить приложение прямо из значка приложения

  • Запустить приложение из полученного уведомления

Знание разницы между приведенными ниже 3 имеет важное значение в вашем случае использования.

  • Проверка объекта уведомления, полученного в application(_:didReceiveRemoteNotification:)

  • Проверка объекта уведомления, полученного в application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

  • Проверка didFinishLaunchingWithOptions для UIApplicationLaunchOptionsRemoteNotificationKey