Phonegap IOS地理位置权限提示框未显示

3

我正在使用PhoneGap开发一款IOS应用程序,并希望在加载时获取用户的位置服务权限。问题是,在我恢复应用程序(按Home并重新打开应用程序)或等待几分钟之前,询问权限的警报不会出现,这是不可接受的。

我正在使用deviceready事件,像这样:

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

如果我不等待设备就绪,警告框就会出现,但我会收到类似以下信息的双重提示消息:/var/mobile/Applications/XXXX-XXXX-XXXX-XXXXXXXXXXX/AppName.app/www/index.html 希望使用您的当前位置。有什么想法可以解决这个问题吗?

你看过文档中给出的完整示例吗:http://docs.phonegap.com/en/2.3.0/cordova_geolocation_geolocation.md.html#Geolocation 这些示例会给你一个如何让它工作的想法,确保在config.xml文件中有 <plugin name="Geolocation" value="CDVLocation" /> - methodMan
@methodMan 是的,地理定位功能正常工作,但是权限提示框“我的应用程序想要使用您的当前位置”似乎有问题,只有在我按下主页按钮退出应用程序后才会出现。顺便说一下,我正在测试我的iPhone 4上的iOS 5.0.1版本。 - omma2289
我刚刚升级到了Cordova 2.3.0版本(之前是2.2),问题似乎已经解决了。现在一切都按照预期正常工作。谢谢。 - omma2289
很高兴听到这个消息。他们可能会在今天发布2.4.0版本,所以更新到那个版本甚至是值得的。我知道它有很多iOS修复。祝你的项目好运。 - methodMan
我在iOS 8的所有提示中都遇到了相同的问题。推送通知和位置信息直到我关闭应用程序才会请求权限... - CodeGems
4个回答

2

我为这个问题奋斗了几天,最终找到了解决方案。看起来不是插件或corvoda版本的问题。尝试在头部区域的index.html中添加此Content-Security-Policy条目:

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

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

重要部分是

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

gap: 仅在使用UIWebView时需要,只在iOS上需要用于JS->本机通信。

希望这有所帮助。


0

这个解决方案非常适合我:

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

通常情况下,如果答案包含代码的意图和解决问题的原因,而不会引入其他问题,那么这些答案会更有帮助。 - Tom Aranda
当然可以,这段代码需要放在config.xml文件中,因为你需要在IOS应用程序和使用cordova-plugin-geolocation的Android应用程序中进行特定配置,这非常适合此类工作。如果需要更多帮助,请告诉我。 - David Morales

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');
    }

0

虽然您已经解决了问题,但以下内容将有助于未来的其他人。

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

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

我使用这个,它运行良好。


问题是他只能在关闭应用程序后才能看到对话框。你的答案与这个问题无关。 - CodeGems

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