3

我正在 phonegap 中开发一个 IOS 应用程序,我想在加载时获得用户对位置服务的许可。问题是在我恢复应用程序(按主页并再次打开应用程序)或等待几分钟之前,请求许可的警报不会出现,这是不可接受的。

我正在使用这样的deviceready事件:

document.addEventListener("deviceready", deviceReady, false);
function deviceReady() {
navigator.geolocation.getCurrentPosition(onLocationSuccess,
                                         onLocationError
                                         );
}

如果我不等待 deviceready,则警报显示正常,但我会收到双重提示,并显示如下消息:

/var/mobile/Applications/XXXX-XXXX-XXXX-XXXXXXXXXXX/AppName.app/www/index.html would like to use your current location

有什么想法可以让这个工作吗?

4

4 回答 4

2

我与这个问题斗争了几天,终于找到了解决方案。似乎它不是插件也不是 corvoda 版本。尝试将此Content-Security-Policy条目添加到index.html内的 head 部分:

<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline'; img-src 'self'

数据:; script-src * 'unsafe-inline' 'unsafe-eval'">

重要的部分是

default-src * gap://ready file:;

gap:仅在 iOS 上需要(使用 UIWebView 时),对于 JS->native 通信需要。

我希望它有所帮助。

于 2017-01-09T08:19:07.210 回答
0

虽然您已经解决了这个问题,但以下内容将在未来对其他人有所帮助。

为了在iOS上显示权限对话框,您必须在config.xml中进行以下配置。

<gap:config-file platform="ios" parent="NSLocationAlwaysUsageDescription" overwrite="false">
    <array>
      <string>NSLocationAlwaysUsageDescription</string>
    </array>
</gap:config-file>

我使用它并且效果很好。

于 2014-12-03T12:46:29.493 回答
0

这个解决方案对我来说是完美的:

<gap:config-file platform="ios" parent="NSLocationAlwaysUsageDescription" overwrite="false">
    <array>
      <string>NSLocationAlwaysUsageDescription</string>
    </array>
</gap:config-file>
于 2017-12-12T02:27:12.470 回答
0

对于iOS上的权限对话框,请在config.xml中使用此代码

<gap:config-file platform="ios" parent="NSLocationAlwaysUsageDescription" overwrite="false">
<array>
  <string>NSLocationAlwaysUsageDescription</string>
</array>

@AAhad 当用户关闭对话框或警报时您的问题,您可以检查该选项是否可用,如果您需要激活 GPS,您可以根据您的请求与新警报的用户交谈。

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


function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}

// onSuccess Geolocation
//
function onSuccess(position) {
  //Code for your GPS
}

// onError Callback receives a PositionError object or if your user close de dialog or cancel de permission
//
function onError(error) {
        alert('Error please check your GPS on Settings: '    + error.code    + '\n' +
              'Please Active Your GPS' + error.message + '\n');
    }
于 2017-12-13T05:30:33.920 回答