Будет ли iOS запускать мое приложение в фоновом режиме, если оно было принудительно завершено пользователем?

ios ios7 push-notification apple-push-notifications

118476 просмотра

7 ответа

12620 Репутация автора

Я запускаю фоновую загрузку, используя content-availableфлаг в push-уведомлении. У меня есть fetchи remote-notification UIBackgroundModesвключен.

Вот реализация, которую я использую в своем AppDelegate.m:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

Когда приложение работает в фоновом режиме, оно работает нормально. (Уведомление получено, и приложение запустило локальное уведомление «похоже, я получил уведомление», как и приведенный выше код).

Однако, когда приложение не запущено и получено push-уведомление с content-availableфлагом, приложение не запускается и didRecieveRemoteNotificationметод делегата никогда не вызывается.

Видео WWDC Что нового с многозадачностью (# 204 от WWDC 2013) показывает это:введите описание изображения здесь

В нем говорится, что приложение «запускается в фоновом режиме» при получении push-уведомления с content-availableфлагом.

Почему мое приложение не запускается в фоновом режиме?

Итак, настоящий вопрос:

Будет ли iOS выполнять фоновые задачи после принудительного выхода из приложения?

Автор: Santa Claus Источник Размещён: 28.09.2013 03:53

Ответы (7)


70 плюса

11858 Репутация автора

Вы можете изменить параметры запуска своей цели в «Управлять схемой» на Wait for <app>.app to be launched manually, что позволяет отлаживать ее, устанавливая точку останова application: didReceiveRemoteNotification: fetchCompletionHandler:и отправляя push-уведомление для запуска фонового запуска.

Я не уверен, что это решит проблему, но пока может помочь с отладкой.

Скриншот

Автор: runmad Размещён: 28.09.2013 04:40

213 плюса

12620 Репутация автора

Решение

UPDATE2:

Вы можете достичь этого, используя новую платформу PushKit, представленную в iOS 8. Хотя PushKit используется для VoIP. Таким образом, ваше использование должно быть связано с VoIP, в противном случае существует риск отклонения приложения. (См. Этот ответ ).


UDPDATE1:

Документация была уточнена для iOS8 . Документацию можно прочитать здесь . Вот соответствующий отрывок:

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


Хотя это не было ясно из видео WWDC, быстрый поиск на форумах разработчиков показал это:

https://devforums.apple.com/message/873265#873265 (требуется вход в систему)

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

Этот пост был написан сотрудником Apple, поэтому я думаю, что могу доверять этой информации.

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

Автор: Santa Claus Размещён: 05.10.2013 08:38

4 плюса

409 Репутация автора

Я пробовал разные варианты этого в течение нескольких дней, и я думал, что в течение одного дня он перезапускал приложение в фоновом режиме, даже когда пользователь проводил пальцем, чтобы убить, но нет, я не могу повторить это поведение.

К сожалению, поведение совсем другое, чем раньше. На iOS 6, если вы убьете приложение из-за движущихся значков, оно все равно будет повторно активировано при срабатывании SLC. Теперь, если вы убиваете, проводя, это не произойдет.

Это другое поведение, и пользователь, который продолжал бы получать полезную информацию из нашего приложения, если бы он убил его на iOS 6, теперь не будет.

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

Автор: snarshad Размещён: 18.10.2013 11:03

15 плюса

1640 Репутация автора

На самом деле, если вам нужно протестировать фоновую выборку, вам нужно включить один вариант в схеме:

включение bg fetch

Другой способ, как вы можете проверить это: симулировать bg fetch

Вот полная информация об этой новой функции: http://www.objc.io/issue-5/multitasking.html

Автор: Danil Размещён: 01.04.2014 04:42

37 плюса

689 Репутация автора

Ответ ДА, но не следует использовать «Фоновая выборка» или «Удаленное уведомление». PushKit - это ответ, который вы желаете.

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

Ссылка PushKit от Apple:

Платформа PushKit предоставляет классы для ваших приложений iOS, чтобы получать нажатия от удаленных серверов. Толчки могут быть одного из двух типов: стандартные и VoIP. Стандартные нажатия могут доставлять уведомления так же, как в предыдущих версиях iOS. Push-сигналы VoIP предоставляют дополнительную функциональность в дополнение к стандартному push-запросу, который необходим приложениям VoIP для выполнения обработки push-уведомлений перед отображением уведомления пользователю.

Чтобы развернуть эту новую функцию, обратитесь к этому руководству: https://zeropush.com/guide/guide-to-pushkit-and-voip - я протестировал его на своем устройстве, и он работает как положено.

Автор: superZhen Размещён: 24.03.2015 11:26

3 плюса

203 Репутация автора

Это может помочь вам

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

Источник: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Автор: Stanislav S. Размещён: 05.04.2018 10:04

2 плюса

445 Репутация автора

For **iOS13**

For background PUSHES in iOS13 you must set below parameters
apns-priority = 5
apns-push-type = background
Required for WatchOS
Highly recommended for Other platforms 

Фоновые толчки Ссылка на видео: https://developer.apple.com/videos/play/wwdc2019/707/

Автор: CrazyPro007 Размещён: 20.08.2019 04:41
Вопросы из категории :
32x32