Выполнена частая фоновая выборка временного интервала

Я разработал два разных приложения

  1. App1 — с включенным Healthkit.
  2. App2 - ионное приложение

Задача приложения 1: чтение данных из комплекта здоровья, хранящегося на сервере.

Задача App2: получить сохраненные данные с сервера и отобразить.

Я запустил App2 из App1, используя openURLScheme. Таким образом, App1 работает в фоновом режиме, а также должно продолжаться от 3 минут до часа.

Я пробовал следующий сценарий:

bgTask = self.applicationUI!.beginBackgroundTaskWithName("MyTask", expirationHandler: { () -> Void in

        self.applicationUI!.endBackgroundTask(self.bgTask!)

        self.bgTask = UIBackgroundTaskInvalid;
    })

    self.bgTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
        self.monitorInBackground()
    })

Я получаю сообщение об ошибке: permittedBackgroundDuration: 180.000000 причина: finishTask

экстенсивный фоновый процесс в течение следующих 3 минут (после введения IOS 7. до IOS 7 время выполнения процесса составляло 10 минут).

Примечание:

Я надеюсь, что это возможно с помощью тихого уведомления APNS. Но я ожидал лучшего решения, чем APNS.


person Senthilkumar    schedule 11.12.2015    source источник
comment
Я также работаю над таким же приложением, где требуется фоновая выборка, но не нашел решения для поддержания соединения сокета с сервером в фоновом режиме более 10 минут. Это каким-то образом возможно с помощью VOIP, но я не уверен, что Apple это одобрит.   -  person Vijay Sanghavi    schedule 11.12.2015
comment
@VijaySanghavi, не могли бы вы поделиться кодом для достижения (до 10 минут)   -  person Senthilkumar    schedule 11.12.2015
comment
До (iOS 7) у вас было 10 минут. После iOS 7 время выполнения в фоновом режиме составляет 3 минуты. Вы должны использовать другой подход к своему приложению. Длительное выполнение в фоновом режиме с частыми обновлениями сервера приведет к разрядке аккумулятора и пользовательских сотовых данных. Вы можете использовать режим фоновой выборки без push-уведомлений, но ваше выполнение будет выполняться только каждые несколько часов.   -  person Paulw11    schedule 11.12.2015
comment
@ Paulw11 Не могли бы вы перечислить это. Какие существуют различные подходы.   -  person Senthilkumar    schedule 11.12.2015
comment
простите, пожалуйста, моя ошибка @Senthilkumar, это было 3 минуты, а не 10 минут   -  person Vijay Sanghavi    schedule 11.12.2015


Ответы (1)


В документации Apple есть хороший раздел о фоновом выполнении. .

Два способа сделать это: тихое уведомление (как вы предлагаете) и фоновая выборка.

Преимущество использования тихого уведомления заключается в том, что вы можете точно контролировать, когда оно происходит, пока ваш пользователь находится в сети. (Что они, вероятно, должны быть для доступа к серверу в любом случае.) Но, да, это добавляет много сложности.

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

Другие варианты, которые могут работать, включают фоновый звук, обновления местоположения и VoIP, но они могут быть отклонены.

Просто запустить фоновую задачу не получится — она предназначена для завершения задач, а не для их работы в течение длительного времени.

person Stephen Darlington    schedule 11.12.2015