Для меня эта проблема была вызвана состоянием сетевой гонки.
Рассматриваемое приложение работает, когда сервер отправляет уведомление VOIP APN на устройство, которое фактически активирует приложение (в отличие отстандартные уведомления APN, которые не будят приложение).Затем приложение опубликует локальные уведомления о полученной информации.Когда пользователь открывает приложение, он очищает все локальные уведомления, опубликованные приложением.
Я не уверен, когда это начало происходить, но оказывается, что когда приложение просыпалось от удаленного уведомления,в моем начальном контроллере представления выполнялась функция ViewDidAppear
, хотя приложение работало в фоновом режиме и не было запущено или не отображалось на экране.Код в этой функции отвечал за очистку уведомлений, но только после проверки с сервером, чтобы убедиться, что ему разрешено это делать.Следовательно, мы получили странную задержку (из-за задержки в сети), которая заставила бы приложение очищать уведомления, как только они появились.Это происходит иногда только потому, что уведомления всегда планировались на 1 секунду в будущем, поэтому, если сетевой вызов происходил достаточно быстро, у него не было уведомлений для очистки.
Мое решение состояло в том, чтобы поместить логику, которая очищает уведомления, вОбработчик DidBecomeActive
вместо ViewDidAppear
.Это сразу решило проблему.