大家好,你们可以把我从项目的悬崖上救出来。
背景
我有一个基于地图模板的离子项目。它的作用是跟踪用户的步行路线并将其绘制到谷歌地图。
在运行后台的 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重复
答案 0 :(得分:4)
您是否为ios应用启用了后台定位模式?在进行构建之前,请检查您的.plist文件,确保您的应用具有"后台模式"已启用和"位置服务"在"背景模式"下检查/列出。
同时确保您的.plist文件包含NSLocationAlwaysUsageDescription
,如果没有该文件,设备将不会要求Always
使用位置和位置的权限,只能基于NSLocationWhenInUseDescription
提供。
<强>更新强>
您还需要一个步骤,以确保应用程序正确询问“始终”#39;在后台权限中运行。
如何:
- 在xcode项目中搜索 CDVLocation.m 文件,然后查找包含NSLocationAlwaysUsageDescription
的代码块
- 重新排序if else条件,将NSLocationAlwaysUsageDescription
条件移至第一行
(可选)
如果您通过离子cli进行构建,请运行ionic prepare ios
,然后在xcode中打开您的项目并确认上述设置,因为它们通常会被cordova插件覆盖,除非您专门为{{设置了脚本1}}和其他事件。