Cordova iOS定位信息提示

11
我使用插件cordova-plugin-geolocation。 我唯一的问题是提示允许位置的消息看起来像这样:

/var/container/bundle/application/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/my_project/www/index.html Would Like to Use Your Location.

有没有办法让消息更好看,例如

my_project想使用您的位置

Cheers.

对于不信的人添加了一些代码

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){

    navigator.geolocation.getCurrentPosition(onLocationSuccess, onLocationError, {maximumAge:3000, timeout:2000, enableHighAccuracy:true});

    function onLocationSuccess(){

    }

    function onLocationError(){

    }
 }

1
地理位置插件应该自动为您处理此问题。请确保在第一次GPS请求之前等待“deviceready” - 否则,您将获得浏览器的实现而不是插件的实现。 - Kerri Shotts
能否提供一些代码会有所帮助。 - Kerri Shotts
为了那些不信的人,代码已添加。 - Eric
是的,我得到了[native code]。 - Eric
由于版主已删除我的回答,我将重新作为评论添加。Kerri帮助我解决了这个问题,我试图关闭这个赏金,但他们不让我关闭。我不会关闭/授予它。谢谢版主。 - Eric
显示剩余7条评论
5个回答

15

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


1
这正是我所需要的。 - MikeC
很高兴它对@MikeC有所帮助。 - Stan
我有4.0.2版本,所以解决方法是将其降级为4.0.0版本吗?问题仍然存在。 - Honchar Denys
@GoncharDenys 值得一试。我不会期望它在4.0.0中起作用,然后在4.0.2中再次更改。 - Stan

9

根据文档

iOS 特殊问题

自 iOS 10 开始,必须在 info.plist 中添加 NSLocationWhenInUseUsageDescription 条目。

NSLocationWhenInUseUsageDescription 描述了应用程序访问用户位置的原因。当系统提示用户允许访问时,该字符串将作为对话框的一部分显示出来。要添加此条目,您可以在插件安装时传递变量 GEOLOCATION_USAGE_DESCRIPTION。

例如:cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="your usage message"

如果您不传递变量,则插件将添加一个空字符串作为值。

请尝试以下解决方法:

卸载插件:

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 中,则可以另外提问或搜索。但这个答案很完美,解决了你的赏金问题。 - Andy Donegan
GEOLOCATION_USAGE_DESCRIPTION是用于“隐私-位置使用说明”的变量名称,那么“隐私-始终使用位置说明”和“隐私-在使用时使用位置说明”的变量名称分别是什么? - h3nr1ke
谢谢Bruno!:) - Pierrick Martellière

3
显示index.html路径而非您的应用程序名称有三种可能原因:
  1. 您尚未安装插件(或安装不正确)
  2. 您没有等待设备准备就绪事件来调用插件
  3. 您尚未在index.html中链接cordova.js文件
既然您说已经安装了插件并在设备准备就绪事件上使用它,那么问题可能是您忘记在index.html中链接cordova.js或插件未正确安装。 请检查您是否已链接 cordova.js ,如果已链接,请删除插件并重新添加它,删除并重新添加iOS平台也可能会有帮助。

2
似乎cordova-plugin-geolocation的3.0.0版本忽略了安装参数--variable GEOLOCATION_USAGE_DESCRIPTION="",就像Bruno Peres所说的那样。对我来说,安装2.4.3版本很好用。请注意保留HTML标签。

1
如果您的目标是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>

我已经在 platform/iOS 中的 exportOptions.plist(我能找到的唯一的 plist 文件)中添加了键和字符串,但没有改变任何东西... - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接