gpt4 book ai didi

ios - Cordova/Phonegap 在 iOS 超时时构建地理定位

转载 作者:行者123 更新时间:2023-11-29 12:08:05 25 4
gpt4 key购买 nike

我一直遇到同样的问题,并且在过去的 2 周内尝试了很多在网上找到的解决方案,但都没有成功,感谢您的帮助:)

我正在使用 Cordova 为 IOS 和 Android 编写一个简单的应用程序,并使用 Phonegap build 构建它。问题是我无法获得“navigator.geolocation.getCurrentPosition”(或 navigator.geolocation.watchPosition)调用以返回除 iOS 超时错误之外的任何内容。 (在 Android 上完美运行)

此外,定位服务对话框永远不会出现(请求用户允许应用使用 GPS)

为了增加这种奇怪的行为,似乎我必须在加载应用程序后触摸屏幕才能启动地理定位调用,在大多数情况下,应用程序只是坐在那里,在触摸屏幕之前什么都不做。

在装有 iOS 9 的 iPhone 5 上测试

我尝试过的事情:

  1. 更改超时设置(最长 30 秒)
  2. 设置 enableHighAccuracy 真/假
  3. 使用或不使用地理定位插件运行代码
  4. 将 NSLocationWhenInUseUsageDescription/NSLocationAlwaysUsageDescription 设置(或两者)手动添加到 plist 文件
  5. 为地理定位插件安装不同的插件版本
  6. 更改内容安全策略元标记
  7. 尝试添加或删除 <plugin>来自根 config.xml 的声明

当前安装的插件($cordova 插件列表):

cordova-plugin-dialogs 1.2.0 "Notification"
cordova-plugin-geolocation 1.0.1 "Geolocation"
cordova-plugin-whitelist 1.2.0 "Whitelist"
cordova.plugins.diagnostic 2.3.5 "Diagnostic"

根 config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="info.test" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>App name</name>
<description>
App Name
</description>
<author email="test@test.com" href="http://test.com">
App Team
</author>
<content src="index.html" />
<plugin name="cordova-plugin-whitelist" spec="1" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
</widget>

index.js

var geo = {
getGeo: function() {
navigator.geolocation.getCurrentPosition(
geo.onSuccess,
geo.onError,
{maximumAge:0, timeout: 5000, enableHighAccuracy: false});

},
onSuccess: function(position) {
alert('GOT location');

alert(position.coords.latitude + ' --- ' + position.coords.longitude);
},
onError: function(error) {
alert('error getting geo!');
}
};

var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicitly call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');

listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');

console.log('Received Event: ' + id);
geo.getGeo();
}
};

app.initialize();

iOS Plist 文件:

    <key>NSLocationAlwaysUsageDescription</key>
<string>This app requires constant access to your location in order to track your position, even when the screen is off.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string/>

Index.html:

<html>
<head>
<!--
Customize this policy to fit your own app's needs. For more guidance, see:
https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy
Some notes:
* gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
* https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
* Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
* Enable inline JS: add 'unsafe-inline' to default-src
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>Hello World</title>
</head>
<body>
<div class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>

在正确方向上的任何帮助表示赞赏!

最佳答案

@达迪奥
哦。就是这样。我应该对此更加教条。这应该可以解决问题。

不建议使用 Phonegap CLI 来制作您的 Phonegap Build 构建项目。 Phonegap 构建需要 index.htmlconfig.xml两者都位于根目录中。 Phonegap CLI 需要使用的所有额外文件,Phonegap Build 永远不会创建或不需要。

那么,我将向您展示我的一个工作演示。请注意,所有文件都在一 (1) 个目录中。

注意编译器版本是如何设置的:

<preference name="phonegap-version" value="cli-5.2.0" />

注意,如果您更改 cli-5.2.03.7.0 , 似乎没有任何变化。

基本上对于 Phonegap Build,您需要 index.htmlconfig.xml - 就是这样。然后出于安全原因(从 Cordova Tools 5.0.0 开始),建议创建一个 css文件和一个 javascript文件。不过,我将向您展示如何解决这个问题。

这是我的完整演示应用列表。

您的解决方案

这是我的工作代码,用 3.5.0 和 cli-5.1.1 和 cli5.2.0 测试

在您的修复 中,请注意版本是如何设置为: <preference name="phonegap-version" value="3.5.0" />

好的,我相信所有这些都会对您有用。因此,您的文档在这里: https://build.phonegap.com/docs

添加插件有一些特殊的规则,但我会在你的程序运行时给你那些。

如何使用 Phonegap Build 添加插件

  1. 为了最直接的 future ,从这个列表中获取您的*核心*插件: http://cordova.apache.org/docs/en/5.4.0/cordova/plugins/pluginapis.html

  2. 从此来源获取您的第 3 方插件: http://cordova.apache.org/plugins/

  3. 使用 Phonegap Build 时,有时插件会得到修复(或更新),这会破坏 Phonegap Build。这是因为“修复”需要最新版本的编译器,而 Phonegap Build 总是至少落后一个版本。

有两种处理方式3;见 4 和 5。

  1. 我创建了 this Worksheet .您可能想要复制一份或仅将其用作引用。我使用这个工作表来创建我的演示,我知道这个列表很好。我现在正在研究 cli-5.2.0。 (应该在周一左右完成。)但是,我没有测试所有的第 3 方插件;有 800 多个插件。

  2. 如果您在插件上设置版本号失败,您将获得最新版本。如果构建失败,则设置版本。如果构建仍然失败,请尝试之前的两个或三个版本以找到一个可用的版本。注意,这些较旧的插件可能存在错误,导致您无法使用它们。因此,请尝试更早的版本。

最后,如果您认为自己遇到了错误,那么这里是 a page with links to the Bug respository for each plugin .最后更新在左上角。祝你好运。

关于ios - Cordova/Phonegap 在 iOS 超时时构建地理定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com