PhoneGap Build 6.3.0 geolocation getCurrentPosition 在IOS上慢

Posted

技术标签:

【中文标题】PhoneGap Build 6.3.0 geolocation getCurrentPosition 在IOS上慢【英文标题】:PhoneGap Build 6.3.0 geolocation getCurrentPosition slow on IOS 【发布时间】:2017-01-19 14:04:25 【问题描述】:

我是在 PhoneGap Build 上开发的新手。在测试一些基本应用功能时,我在 Iphone 6 / ios 10 / PhoneGap Build 6.3.0 上执行简单的地理定位请求时遇到超时问题。

重新安装应用程序后,我启动它并通过 onclick -> geolocation() 启动地理定位。

只有当我将应用程序切换到后台时,我才会收到 IOS 请求以允许位置请求(应该在我第一次执行 onclick -> 地理定位同时让应用程序处于前台时出现)。

有时我会在很长一段时间后得到地理定位结果,有时却没有。我已经在三个 PositionOptions 上尝试了所有可能的组合。

当我询问 Google 地图应用时,它会立即向我显示位置。

知道我做错了什么吗?

谢谢你,金

function do_geolocation()
	alert('do geoloc');
	navigator.geolocation.getCurrentPosition(geo_onSuccess, geo_onError, maximumAge:120000, enableHighAccuracy:false );


onclick=do_geolocation();



function geo_onSuccess(position)

	alert('Latitude: '          + position.coords.latitude          + '\n' +
          'Longitude: '         + position.coords.longitude         + '\n' +
          'Altitude: '          + position.coords.altitude          + '\n' +
          'Accuracy: '          + position.coords.accuracy          + '\n' +
          'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
          'Heading: '           + position.coords.heading           + '\n' +
          'Speed: '             + position.coords.speed             + '\n' +
          'Timestamp: '         + position.timestamp                + '\n');

	var arr = new Array();
	arr['lat'] = position.coords.latitude;
	arr['lng'] = position.coords.longitude;

	var x = new Date();var cb = x.getTime();
	


function geo_onError(position)
	
	 alert('code: '+error.code+'\nmessage: '+error.message+'\n');
	return false;

<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns   = "http://www.w3.org/ns/widgets"
    xmlns:gap   = "http://phonegap.com/ns/1.0"
    id          = "de.vvvvvv.secapp"
    versionCode = "10"
    version     = "1.0.0" >

<!-- versionCode is optional and android only -->

  <name>vvvvvvv</name>

  <description>
      vvvvvvvvvvvv
  </description>

  <author href="http://vvvvvvv.de" email="info@vvvvvv.de">
      Kim
  </author>

<plugin name="cordova-plugin-geolocation" spec="2.4.1" />

<plugin name="cordova-plugin-whitelist" spec="1.3.1" />
<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>


<preference name="orientation" value="portrait" />

<!-- https://makeappicon.com/ios10icon -->
<icon src="res/icons/ios/Icon-App-20x20@2x.png" platform="ios"   />
<icon src="res/icons/ios/Icon-App-20x20@3x.png" platform="ios"   />
...

【问题讨论】:

【参考方案1】:

只有当我将应用程序切换到后台时,我才会收到 IOS 请求以允许位置请求(应该在我第一次执行 onclick -> 地理定位同时让应用程序处于前台时出现)。

仅在应用程序后台激活听起来是 Content-Security-Policy 问题 (here's another example) 的症状。

要解决此问题,请确保您的Content-Security-Policy 元标记包含default-srcgap://readyfile: 条目。例如:

<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'">

有时我会在很长一段时间后得到地理定位结果,有时却没有。我已经在三个 PositionOptions 上尝试了所有可能的组合。

maximumAge 设置为120000 意味着可以使用长达2 分钟的位置(由操作系统缓存)。要强制一个新位置,请将其设置为零:


    enableHighAccuracy: false
    maximumAge: 0,
    timeout: 2000

如果将 enableHighAccuracy 设置为 true,这会使用 GPS 硬件来获得锁定,因此请设置足够的超时时间以允许它锁定足够多的卫星:


    enableHighAccuracy: true
    maximumAge: 0,
    timeout: 30000

有关 PositionOptions 的完整说明,请参阅Mozilla docs

【讨论】:

您好戴夫,非常感谢您的详细建议!我没认出你的快速回答。我已经按照建议更改了 Content-Security-Policy,它现在正在运行。现在将更深入地了解安全策略设置选项。

以上是关于PhoneGap Build 6.3.0 geolocation getCurrentPosition 在IOS上慢的主要内容,如果未能解决你的问题,请参考以下文章

iOS 版本中不会触发 Phonegap 插件回调

Phonegap build 本地发布版本(不含Phonegap Build)

PhoneGap.Build 示例 com.facebook.sdk 错误 2

Urban Airship phonegap 3.5 with Phonegap Build

如何在 build.phonegap.com 中添加插件

phonegap build + phonegap-cli + ionic 图标