2016-02-25 8 views
0

У меня есть приложение Cordova, которое записывает поездки пользователя. Он отлично работает в фоновом режиме, и я бы хотел, чтобы он был автоматически перезагружен, если он по какой-то причине убит (пользователь удаляет его, перезагружает телефон и т. Д.).Запуск приложения Кордовы iOS, если имеется UIApplicationLaunchOptionsLocationKey

Я контролирую регион, и приложение частично перезагружается, когда пользователь входит/выходит из него. «Частично» означает, что приложение работает только в фоновом режиме - Кордова загружает плагины моего приложения, но никогда не загружает WebView.

Для этого частичного перезапуска я слушаю UIApplicationDidFinishLaunchingNotification с помощью UIApplicationLaunchOptionsLocationKey из моего модуля pluginInitialize моего плагина и служб начального местоположения сразу же, чтобы оставаться в рабочем состоянии.

Почему не загружается WebView? Есть ли что-то, что мне нужно сделать, чтобы запустить следующий этап инициализации при запуске iOS?

EDIT 2016/3/7

Я сделал некоторые исследования и отладки. По-видимому, iOS запускает мое приложение в фоновом режиме; вот что я получаю, когда запускается автоматически таким образом против ручного запуска, от лесозаготовительной линии:

 NSLog(@"Launched in: bg:%d active:%d inactive:%d", state == UIApplicationStateBackground, state == UIApplicationStateActive, state == UIApplicationStateInactive); 

     Launched in: bg:1 active:0 inactive:0 
     Launched in: bg:0 active:0 inactive:1 

Я проверил этот код был быть достигнут в обоих случаях (от v.3.9.2 Cordova КСН (Кордова v.5.4.1) CDVViewController:

 NSURLRequest* appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0]; 
     [self.webView loadRequest:appReq]; 

Я вижу эту отделку нагрузки в ручном случае, но не автозапуск случай, с логарифмической строкой:

 Finished load of: file:///var/mobile/Containers/Bundle/Application/[device id]/[app name].app/www/index.html 

Почему бы эта нагрузка сбой при автозапуске?

ответ

2

В итоге я воспользовался подпиской на поддержку Apple; их ответ в основном «вы не можете загружать веб-представление при запуске таким образом»:

Если я правильно понял, вы ожидаете, что ваше приложение будет явно запускаться на передний план, когда вы получите обновление местоположения. Это не так, как это работает. Ваше приложение будет запущено в фоновом режиме. Если вы увидите UIApplicationLaunchOptionsLocationKey, будет инициализирован только ваш делегат приложения и класс делегата менеджера местоположений. Никакие представления не будут инициализированы вообще.

После того, как приложение будет запущено в фоновом режиме, ожидается, что данные будут обрабатываться на несколько секунд молча, а затем возвращаются в систему. На этом этапе невозможно загрузить веб-представление или какой-либо пользовательский интерфейс.

Единственное взаимодействие с пользователем, которое было бы возможно, - запланировать локальное уведомление с сообщением пользователю о запуске приложения. Если пользователь удаляет уведомление, ваше приложение будет полностью запущено.

Только после этого вы можете загрузить ваш веб-просмотр.

 Смежные вопросы

  • Нет связанных вопросов^_^