iOS上的Ionic地理位置权限问题

3
我需要对ionic3中的GeoLocation Plugin进行翻译。
我已经添加了所有必要的导入内容,还包括<edit-config>。我可以在plist文件中看到这部分:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Get Position</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Get position</string>

我认为它有效。但实际上并不是这样;它适用于Android,但不适用于iOS。 我调用了这个方法:

this.geolocation.getCurrentPosition().then((resp) => {
    alert("geo " + resp.coords.latitude);
    // resp.coords.latitude
    // resp.coords.longitude
   }).catch((error) => {
     alert(error.code);
     alert(error.message);
   });

我收到了错误代码2和错误信息:"源不具备使用地理位置服务的权限"。

我该怎么办?

2个回答

2

我曾经遇到过这个问题 - 我不得不在XCode中的*.plist文件中手动添加隐私设置(位于资源文件夹下)。

Key 中输入 Privacy - Location When In Use Usage Description,或者至少开始输入它,它会自动完成。 Type 应该是 String,而 Value 应该是您想要弹出给用户的消息,解释为什么需要访问位置数据。


好的,它有效了。再试一次。但是使用setTimeout函数。我的代码可能比GPS准备好更快运行吗? - Torben G
当您尝试获取位置时,是否有类似于以下内容的代码?this.geolocation.getCurrentPosition().then((pos) => { this.latitude = pos.coords.latitude; this.longitude = pos.coords.longitude; console.log('成功获取位置'); }).catch((error) => { console.log('获取位置出错', error); }); - Eli Cohn
是的,我遇到了错误。当我设置超时时间时,它可以正常工作并且数值被显示出来。 - Torben G
也许尝试移除并重新添加平台?https://forum.ionicframework.com/t/geolocation-plugin-not-working-code-based-off-of-docs-example/119288 - Eli Cohn
但现在它可以工作了。我按照你说的添加了隐私密钥,现在它可以工作了 :) iPhone会要求地理位置权限。但如果我不设置超时运行此函数,它就会给我一个错误。但如果我包装一个setTimeout,我就可以得到我的经纬度值了。 - Torben G
你不应该手动编辑Xcode中的设置。当你重新添加平台时,它将被删除。这不是正确的答案。 - Sinan Samet

0

我曾遇到过同样的问题。我使用了Ionic v4与React、Cordova v9和cordova-ios v4.5.5。在我的情况下,出现了问题,因为我没有将Cordova JS脚本注入到webview中。要解决这个问题,我在Cordova的准备前钩子((cordova root)/hooks/before_prepare/inject_cordova.js)中添加了以下Bash脚本:

#!/bin/bash
set -e
sed -E -i "" -e "s_(<head[^>]*>)_\1<script src=\"cordova.js\"></script>_" www/index.html

www/index.html 是相对于 Cordova 项目根目录的应用主 HTML 文件的路径。

当你运行 cordova prepare ios 时,最后一行会在 HTML 文件末尾添加一个 <script src="cordova.js"></script> 标签。因此,Webview 开始加载 Cordova 脚本,包括地理位置插件,应用程序开始请求使用地理位置的权限。


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