2016-02-25 25 views
0

我有一個用於記錄用戶行程的Cordova應用程序。它在後臺工作正常,並且如果它由於某種原因而被終止(用戶將它刷掉,手機重新啓動等),它會自動重新啓動。如果存在UIApplicationLaunchOptionsLocationKey,則啓動Cordova iOS應用程序

我正在監視一個區域,並且當用戶進入/退出時,應用程序部分重新啓動。這裏的「部分」意味着該應用只能在後臺運行 - Cordova會加載我的應用的插件,但它不會加載WebView。

對於此部分重新啓動,我正在偵聽來自我的插件的pluginInitialize方法的UIApplicationDidFinishLaunchingNotification和UIApplicationLaunchOptionsLocationKey,並立即啓動位置服務以保持運行。

爲什麼不加載WebView?有什麼我需要做的,以觸發由iOS啓動下一階段的初始化?

編輯 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 

我證實了這一代碼是在兩種情況下被達到(從科爾多瓦-IOS' v.3.9.2(科爾多瓦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支持票;他們的答案基本上是「你開始時無法加載Web視圖」:

如果我理解正確,那麼當您獲得位置更新時,您希望您的應用程序明顯啓動到前臺。 這不是它是如何工作的。您的應用將會啓動到後臺。如果您看到UIApplicationLaunchOptionsLocationKey,則只會初始化您的應用程序委託和位置管理器的委託類。任何意見都不會被初始化。

一旦在後臺啓動應用程序,就應該靜默地處理數據幾秒鐘,然後退回到系統。在此階段無法加載Web視圖或任何類型的用戶界面。

唯一可能的用戶交互是安排一個本地通知,並向用戶發送消息以啓動應用程序。如果用戶點擊通知,您的應用將完全啓動。

只有那麼你可以加載你的網絡視圖。

相關問題