无法在iOS背景下获取GPS(启用后台模式插件)

时间:2016-04-01 07:24:07

标签: ios cordova ionic-framework gps background-process

大家好,你们可以把我从项目的悬崖上救出来。

背景

我有一个基于地图模板的离子项目。它的作用是跟踪用户的步行路线并将其绘制到谷歌地图。

在运行后台的 iOS设备上出现问题。我无法正确获取GPS数据。 仅供参考:安装并设置了BackgroundMode插件。

  

场景1:使用cordova-plugin-geolocation插件

     

它不起作用。关闭屏幕时没有收集GPS数据。

  

场景2:使用带有navigator.geolocation.getCurrentPosition的简单JS

     

有效。已收集GPS数据但不正确。数据在某种程度上与以前的数据重复(!!)。我打开时会恢复正常   该应用程序再次。

任何想法都会有所帮助。

使用的插件:
cordova-plugin-background-mode 0.6.5
cordova-plugin-customurlscheme 4.1.5
cordova-plugin-device 1.1.1
cordova-plugin-geolocation 2.1.0
cordova-plugin-splashscreen 3.2.1
cordova-plugin-statusbar 2.1.2
cordova-plugin-whitelist 1.2.1
ionic-plugin-keyboard 2.0.1

编辑:
目标平台?
Ionic需要iOS 7+和Android 4.1+。

测试设备iOS版本?
iPhone 5上的iOS 9.2(13C75)

您是否在前台测试过您的应用程序?
是的,我愿意。为了澄清,这里有更详细的测试:

我有两个测试功能:一个用于gps收集的数组和一个用于背景模式检查的计数器。两者都在间隔设置下运行。

(在iOS上)
前景:
柜台工作,数量增加。
GPS工作,数据被添加到阵列。

背景:
柜台工作,数量增加。
GPS不起作用,数据未被收集(使用ngCordova地理定位插件)或奇怪地与JS navigator.geolocation重复

1 个答案:

答案 0 :(得分:4)

您是否为ios应用启用了后台定位模式?在进行构建之前,请检查您的.plist文件,确保您的应用具有"后台模式"已启用和"位置服务"在"背景模式"下检查/列出。

enter image description here

同时确保您的.plist文件包含NSLocationAlwaysUsageDescription,如果没有该文件,设备将不会要求Always使用位置和位置的权限,只能基于NSLocationWhenInUseDescription提供。

<强>更新
您还需要一个步骤,以确保应用程序正确询问“始终”#39;在后台权限中运行。

如何:
  - 在xcode项目中搜索 CDVLocation.m 文件,然后查找包含NSLocationAlwaysUsageDescription的代码块   - 重新排序if else条件,将NSLocationAlwaysUsageDescription条件移至第一行

Make sure app asking for always background running permission

(可选)
如果您通过离子cli进行构建,请运行ionic prepare ios,然后在xcode中打开您的项目并确认上述设置,因为它们通常会被cordova插件覆盖,除非您专门为{{设置了脚本1}}和其他事件。