如果存在UIApplicationLaunchOptionsLocationKey,则启动Cordova iOS应用程序

时间:2016-02-25 18:10:29

标签: ios cordova autostart location-services

我有一个记录用户旅行的Cordova应用程序。它在后台工作正常,我想让它自动重启,如果它因某种原因被杀死(用户刷掉它,电话重启等)。

我正在监控一个区域,当用户进入/退出时,应用程序会部分重启。 “部分”在这里意味着应用程序仅在后台运行 - Cordova加载我的应用程序的插件,但它从不加载WebView。

对于这个部分重启,我正在从我的插件的pluginInitialize方法中使用UIApplicationLaunchOptionsLocationKey监听UIApplicationDidFinishLaunchingNotification,并立即启动位置服务以保持运行。

为什么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

我在两种情况下都验证了这个代码(来自cordova-ios的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

为什么自动启动时此加载会失败?

1 个答案:

答案 0 :(得分:2)

我最终使用了Apple支持票;他们的回答基本上是“你不能以这种方式加载网页视图”:

  

如果我理解正确,您希望在获得位置更新时,您的应用会明显启动到前台。   这根本不是它的工作方式。您的应用将在后台启动。如果您看到UIApplicationLaunchOptionsLocationKey,则只会初始化您的应用程序委托和位置管理器的委托类。任何观点都不会被初始化。

     

一旦应用程序在后台启动,预计会以静默方式处理数据几秒钟,然后返回系统。在此阶段无法加载Web视图或任何类型的UI。

     

唯一可能的用户交互是安排本地通知,并向用户发送消息以启动应用。如果用户点按通知,您的应用将完全启动。

     

只有这样您才能加载您的网络视图。