IOS фоновые push-уведомления, не полученные после 2-3 часов бездействия

Мое приложение выполняет тихое извлечение фона через push-уведомления. Все работает нормально, а push-уведомления, отправленные с нашего сервера, запускают тихие фоновые выборки, как ожидалось, когда пользователь открыл приложение за последние 60 минут, или уведомление о push было отправлено в течение 60 минут - даже если устройство заблокировано.

Однако, когда пользователь не открывает приложение в течение 2-3 часов или когда push-уведомление не было отправлено через 2-3 часа, приложение не получает push-уведомление. Я регистрирую активность приложения, и я подтвердил, что:

didReceiveRemoteNotification:fetchCompletionHandler:

не вызывается в делегате приложения.

Несколько фактов:

  • В приложении plist.info я установил UIRequiresPersistentWiFi в true и UIBackgroundModes (только) удаленному уведомлению
  • Полезная нагрузка push-уведомления содержит только доступный для содержимого ключ
  • Через 2-3 часа бездействия (ни с помощью push-уведомления, ни с пользовательской активности), я вижу тот же результат как на моем iPhone 5, так и на iPad с IP-телефоном Wi-Fi 2, работающем под управлением iOS 8.1.2. Другими словами, не имеет значения, является ли подключение к Интернету сотовым или Wi-Fi.
  • Я не верю, что я нажимаю границы ограничения скорости, так как я отправляю не более 1-2 push-уведомлений на устройство в час.

Мое понимание заключается в том, что iOS должна продолжать пробуждать приложение в фоновом режиме и позволять ему обрабатывать извлечение фона из push-уведомления - даже после нескольких часов бездействия (пока устройство не работает и имеет интернет-соединение).

Мне интересно, если кто-то еще испытал это, и если да, если вы нашли обходной путь.

Спасибо заранее!

Ответы

Ответ 1

пройти

Цели > Возможности > Режимы фона

Включить фоновый режим

Ответ 2

В этом нет никакой работы. Вы можете попробовать PushKit (уведомления iOS VOIP push), которые более надежны, но только iOS8 или постоянный сокет VOIP, который доступен с iOS7 (гораздо сложнее).

Apple не гарантирует немедленную доставку для фоновых/выборочных push-уведомлений (содержащих: content-available=1). Эти уведомления были разработаны, чтобы приложение a chance обновляло его содержимое в промежутках между прогонами, а не "immediate" и не надежно.

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

Другими словами - ваше приложение будет уведомлено, только когда iOS решает, он не влияет на батарею. Из моих наблюдений это зависит от многих вещей, таких как:

  • Если ваше устройство подключено к источнику питания,
  • использует Wi-Fi 3G,
  • время от последнего уведомления,
  • приложение для использования энергии и данных, используемое при обработке последнего, itd...
  • когда и как было использовано устройство в недавнем прошлом (заблокированный/разблокированный экран)

Я даже заметил разницу между приложением, запущенным в отладочном сеансе (по Xcode, подключенным кабелем) - уведомления всегда были доставлены, и когда я начал приложение из Springboard/в режиме выпуска (разные энергетические условия), то это начало плохо себя вести.

Ответ 3

 [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
 [[UIApplication sharedApplication] registerForRemoteNotifications];

Ответ 4

Попробуйте это в вашем info.plist, это сработало для меня.

info plist file.

Это пробудит ваше приложение для получения уведомлений в фоновом режиме.