Cordova iOS 位置信息
Posted
技术标签:
【中文标题】Cordova iOS 位置信息【英文标题】:Cordova iOS location message 【发布时间】:2016-11-25 18:47:23 【问题描述】:我使用插件cordova-plugin-geolocation。我唯一的问题是允许定位的消息提示如下所示:
/var/container/bundle/application/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/my_project/www/index.html 想使用您的位置。
有没有更性感的东西,比如
my_project 想使用您的位置
干杯。
为非信徒添加了一些代码
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady()
navigator.geolocation.getCurrentPosition(onLocationSuccess, onLocationError, maximumAge:3000, timeout:2000, enableHighAccuracy:true);
function onLocationSuccess()
function onLocationError()
【问题讨论】:
地理定位插件应该会自动为您解决这个问题。确保在您的第一个 GPS 请求之前等待deviceready
- 否则您将获得浏览器的实现而不是插件的实现。
我希望设备上已经准备好
看看一些代码会有所帮助。
为非信徒添加的代码
您使用的是什么版本的插件?此外,如果您记录或警告 navigator.geolocation.getCurrentPosition 的内容,您会得到什么?如果你看到“[native code]”或类似的东西,那么有些东西不允许插件初始化。
【参考方案1】:
cordova-plugin-geolocation: "4.0.0" 的解决方案已更改。这是您需要在config.xml
中添加的内容:
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
<string>need location access to find things nearby</string>
</edit-config>
欲了解更多信息:https://github.com/apache/cordova-plugin-geolocation
【讨论】:
这正是我所需要的。 我很高兴它帮助了@MikeC 我有4.0.2,所以解决办法是让它4.0.0?问题仍然存在 @GoncharDenys 值得一试。我不希望它在 4.0.0 中工作,然后在 4.0.2 中再次更改【参考方案2】:来自docs:
ios 怪癖
从 iOS 10 开始,必须在 info.plist 中添加 NSLocationWhenInUseUsageDescription 条目。
NSLocationWhenInUseUsageDescription 描述了应用的原因 访问用户的位置。当系统提示用户 允许访问,此字符串显示为对话框的一部分。到 添加此条目,您可以传递变量 GEOLOCATION_USAGE_DESCRIPTION 关于插件安装。
示例:cordova 插件添加 cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="您的使用信息"
如果你不传递变量,插件将添加一个空字符串作为 价值。
要解决您的问题,请尝试:
卸载插件:
cordova plugin remove cordova-plugin-geolocation
重新安装:
cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="my_project would like to use your location"
【讨论】:
@Eric 这是你的答案。我使用了插件并且没有设置 info.plist,这导致了和你一样的问题。如果您不知道如何将详细信息添加到 info.plist 中,请添加另一个问题或搜索它。但这是完美的,可以回答你的赏金。 GEOLOCATION_USAGE_DESCRIPTION 用于“隐私 - 位置使用说明”,“隐私 - 位置始终使用说明”和“隐私 - 位置使用时说明”的变量名称是什么? 谢谢布鲁诺! :)【参考方案3】:显示 index.html 的路径而不是应用名称的原因可能有 3 个:
-
您没有安装插件(或未正确安装)
您没有等待设备就绪事件调用插件
您尚未在 index.html 中链接 cordova.js 文件
正如您所说您已安装插件并在设备就绪事件中使用它,那么您一定是您忘记在 index.html 中链接cordova.js 或插件未正确安装。 检查您是否链接了cordova.js,如果有,请删除插件并重新添加,删除并重新添加iOS平台可能也会有所帮助
【讨论】:
【参考方案4】:cordova-plugin-geolocation的version 3.0.0似乎忽略了安装参数
--variable GEOLOCATION_USAGE_DESCRIPTION=""
就像布鲁诺佩雷斯上面所说的那样。
安装 2.4.3 版本对我来说效果很好。
【讨论】:
【参考方案5】:如果您的目标是 iOS 8 及更高版本(我认为,无需再针对旧版本...),有两个键可用于配置:
NSLocationAlwaysUsageDescription
此键可让您描述您的应用始终访问用户位置信息的原因。当您的应用在前台或后台运行时以可能不明显的方式使用位置服务时,请包含此键。例如,社交应用程序在使用位置信息来跟踪用户的位置并显示附近的其他用户时,可能会包含此键。在这种情况下,应用程序正在跟踪用户位置的事实可能并不明显。当请求使用位置服务的权限时,系统会将这个键的值包含在向用户显示的警报面板中。
NSLocationWhenInUseUsageDescription
此键可让您描述您的应用在前台运行时访问用户位置信息的原因,否则在使用时访问用户位置信息的原因。当您的应用使用位置服务直接跟踪用户的当前位置时,请包含此键。此密钥不支持使用位置服务监控区域或使用重大位置更改服务监控用户的位置。当请求使用位置服务的权限时,系统会将这个键的值包含在向用户显示的警报面板中。
所以在您的 iOS 项目 info.plist
文件中,您可以添加以下内容:
<key>NSLocationAlwaysUsageDescription</key>
<string>my_project requires constant access to your location, even when the screen is off.</string>
仅在使用应用时访问位置
<key>NSLocationWhenInUseUsageDescription</key>
<string>my_project requires access to your location only when being used.</string>
【讨论】:
我已经在平台/iOS 的 exportOptions.plist(我只能找到我能找到的 plist 文件)中添加了键和字符串,但它并没有改变任何东西......以上是关于Cordova iOS 位置信息的主要内容,如果未能解决你的问题,请参考以下文章
位置栏未出现在 InAppBrowser for iOS、Cordova 中
Cordova:在 iOS 中存储录制的音频文件的正确位置是啥?
cordova-ionic 应用程序在后台进行地理定位 - android 和 ios