Ответ 1
пройти
Цели > Возможности > Режимы фона
Включить фоновый режим
Мое приложение выполняет тихое извлечение фона через push-уведомления. Все работает нормально, а push-уведомления, отправленные с нашего сервера, запускают тихие фоновые выборки, как ожидалось, когда пользователь открыл приложение за последние 60 минут, или уведомление о push было отправлено в течение 60 минут - даже если устройство заблокировано.
Однако, когда пользователь не открывает приложение в течение 2-3 часов или когда push-уведомление не было отправлено через 2-3 часа, приложение не получает push-уведомление. Я регистрирую активность приложения, и я подтвердил, что:
didReceiveRemoteNotification:fetchCompletionHandler:
не вызывается в делегате приложения.
Несколько фактов:
Мое понимание заключается в том, что iOS должна продолжать пробуждать приложение в фоновом режиме и позволять ему обрабатывать извлечение фона из push-уведомления - даже после нескольких часов бездействия (пока устройство не работает и имеет интернет-соединение).
Мне интересно, если кто-то еще испытал это, и если да, если вы нашли обходной путь.
Спасибо заранее!
пройти
Цели > Возможности > Режимы фона
Включить фоновый режим
В этом нет никакой работы. Вы можете попробовать PushKit
(уведомления iOS VOIP push), которые более надежны, но только iOS8 или постоянный сокет VOIP, который доступен с iOS7 (гораздо сложнее).
Apple не гарантирует немедленную доставку для фоновых/выборочных push-уведомлений (содержащих: content-available=1
).
Эти уведомления были разработаны, чтобы приложение a chance
обновляло его содержимое в промежутках между прогонами, а не "immediate
" и не надежно.
iOS будет решать, когда отправлять эти уведомления на основе недокументированных, связанных с энергетикой условий.
Другими словами - ваше приложение будет уведомлено, только когда iOS решает, он не влияет на батарею. Из моих наблюдений это зависит от многих вещей, таких как:
Я даже заметил разницу между приложением, запущенным в отладочном сеансе (по Xcode, подключенным кабелем) - уведомления всегда были доставлены, и когда я начал приложение из Springboard/в режиме выпуска (разные энергетические условия), то это начало плохо себя вести.
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
Попробуйте это в вашем info.plist, это сработало для меня.
Это пробудит ваше приложение для получения уведомлений в фоновом режиме.