iPhone上的位置许可警报与PhoneGap

Posted

技术标签:

【中文标题】iPhone上的位置许可警报与PhoneGap【英文标题】:Location permission alert on iPhone with PhoneGap 【发布时间】:2009-11-04 12:49:42 【问题描述】:

如何更改警报上的字符串:

(应用名称/无论它是什么)想使用您当前的位置

当然,我只想更改 appname 部分。因为当你使用PhoneGap框架的时候,字符串非常很难看,像这样:

/var/mobile/Applications/157EB70D-4AA7-826E-690F0CBE0F/appname.app/www/index.html

有人有想法吗?

【问题讨论】:

【参考方案1】:

您需要在设备准备就绪后进行地理定位。例如,下面的 Jquery 代码将在没有那个讨厌的警报的情况下进行地理定位:

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

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


function onSuccess(position) 
  // your callback here 


function onError(error)  
  // your callback here

【讨论】:

优秀的答案,解决了我的问题。为什么正确答案不在顶部? 是的!我同意,这应该被标记为正确答案。谢谢,皮乌斯;这解决了我的问题。 我已添加此代码。但对我来说,结果是 2 个警报将出现在第一次从模拟器上的 xcode 运行时。然后在第二次运行时,只出现第二次警报。在第 3 次运行时,警报不再出现。这有点奇怪。 这个解决方案对我不起作用,第二个警报仍然出现。这些解决方案都没有帮助我! 等待设备对我也很有效。但是,它仅适用于设备。如果您将 Cordova 与 Ionic 一起使用,并使用这种方法,则位置服务将无法在浏览器中运行。我添加了一个开关来检查应用程序是否在浏览器中运行。如果是这样,我会立即运行导航器代码。如果我在设备上,我会等待设备准备就绪。【参考方案2】:

在 phonegap 3.0 上,需要遵循 Pius Uzamere 的回答并安装插件。

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

否则您将获得双重许可请求。

【讨论】:

如果使用PhoneGap Build,不要忘记将该插件添加到您的config.xml文件中: 运行 cordova plugin add cordova-plugin-geolocation 时,它将从 GitHub 上的 apache/cordova-plugin-geolocation 存储库安装 - 这是 apache.org repo 的镜像【参考方案3】:

我只是按照文档并解决了它。 打开终端并 cd 到您的项目并输入以下命令。 $cordova 插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

在你的 config.xml 中添加这个

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>

它将解决这个问题。 :)

来源:http://docs.phonegap.com/en/3.0.0/cordova_geolocation_geolocation.md.html#The%20Command-line%0AInterface

【讨论】:

这对我有用,我重新安装了插件:cordova plugin rm org.apache.cordova.geolocation 然后cordova plugin add cordova-plugin-geolocation 添加了之前缺少的&lt;feature name="Geolocation"&gt; 行。【参考方案4】:

虽然这个问题比较老了,但是我发现了类似的问题here和here。

为了解决我的问题,我必须将NSLocationWhenInUseUsageDescription 添加到 .plist 文件中。但是,我想由于我的地理定位插件已经过时,我必须先更新它。然后我不得不删除/添加 Cordova iOS 平台。最后,我在 .plist 文件中添加了NSLocationWhenInUseUsageDescription

首先,移除/添加地理定位插件:

cordova plugin rm org.apache.cordova.geolocation
cordova plugin add org.apache.cordova.geolocation

二、移除/添加iOS平台:

cordova platform rm ios
cordova platform add ios

最后,将NSLocationWhenInUseUsageDescription 添加到.plist。打开/platforms/ios/project/project-Info.plist并添加以下内容:

<key>NSLocationWhenInUseUsageDescription</key>
<string>[App Name] would like to access your location when running and displayed.</string>

有关NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescriptionNSLocationUsageDescription 的详细信息,请参阅此iOS Developer Library link。

【讨论】:

【参考方案5】:

终于解决了这个问题。

在 index.html 中向上移动你的 cordova.js

作为要包含的第一个 js 文件(尤其要确保它在 maps include js 之上)。这将确保提示只显示一次。

不需要其他 codejs 或 ondeviceready。

【讨论】:

我认为这可以解决任何 phonegap/cordova 项目中的很多问题,但不一定是导致此问题的原因 解决了我的问题——这很烦人。谢谢!【参考方案6】:

寻找我建立的解决方案后,只需在添加插件位置时添加一个变量,就像这一行一样

cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="your usage message"

【讨论】:

【参考方案7】:

以上答案都不适合我。我的位置请求已经在 deviceready 上触发。将以下内容添加到 config.xml 解决了该问题:

<gap:plugin name="org.apache.cordova.core.geolocation" />

【讨论】:

如果您使用的是 PhoneGap 构建,您需要按照您的描述将该插件添加到您的 config.xml 中。我需要这样做并确保我的电话在 onDeviceReady 内 你把那句话放在哪里了? config.xml? “将以下内容添加到 config.xml 解决了问题”:)【参考方案8】:

为了解决这个问题,我必须运行cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git,它将(自动)添加到 config.xml 中:

<feature name="Geolocation">
     <param name="ios-package" value="CDVLocation" />
</feature>

为了让事情顺利进行,我还必须将这些行放入 config.xml:

<plugins>
        <plugin name="Device" value="CDVDevice" />
        <plugin name="Logger" value="CDVLogger" />
        <plugin name="Compass" value="CDVLocation" />
        <plugin name="NetworkStatus" value="CDVConnection" />
        <plugin name="Debug Console" value="CDVDebugConsole" />
        <plugin name="Geolocation" value="CDVLocation" />
        <plugin name="SplashScreen" value="CDVSplashScreen" />
        <plugin name="Battery" value="CDVBattery" />
        <plugin name="Globalization" value="CDVGlobalization" />
    </plugins>

希望对您有所帮助。

【讨论】:

【参考方案9】:

确保在设备准备就绪后调用了我的geolocation 请求,确保正确安装和配置了地理定位插件后,我仍然收到难看的弹出窗口。

我通过将我的cordova.js 文件和cordova_plugins.js 文件移动并引用到我的应用程序的根目录(它们最初位于子文件夹中)来解决它,因此cordova.js 的路径是:

<script src="cordova.js"></script>  

我觉得这应该包含在文档中(也许是,但我没有设法找到它)

【讨论】:

【参考方案10】: 只需在访问此位置的 html 文件中包含“cordova.js”文件即可解决此问题。不需要任何花哨的东西。

【讨论】:

在我的情况下,第一次打开应用时丑陋的消息并没有消失。【参考方案11】:

我在这里聚会迟到了,但会回答这个问题以供参考。 答案是使用Phonegap 中包含的phonegap.js 中的地理定位功能。您可以在 Phonegap 网站http://www.phonegap.com 上找到此类说明。

如果您使用navigator.geolocation,则您使用的是默认的 Safari 地理定位系统。这是因为 PhoneGap 通过在 Safari 实例中有效地运行您的页面来工作。如果您将 phonegap.js 包含到您的网站中,您可以使用 PhoneGap 的 Objective-C 代码公开的单独地理定位方法,该方法将呈现在其他应用程序中看到的行为,其中它向 [您的应用程序名称] 请求许可。

【讨论】:

你能指出在 phonegap.com 中写这篇文章的确切位置吗? @Tim Rogers 看来,你错了(至少在你回答后三年)。 PhoneGap 覆盖了这个对象和这些方法,当你调用navigator.geolocation 时,你实际上是在调用PhoneGap API。 Here 是指向正确文档的链接。然后,PhoneGap 决定它是否可以用户设备提供的地理定位机制,还是应该回退到它自己的(“这个 API 基于 W3C 地理定位 API 规范,并且只在尚未提供实现的设备上执行”)跨度> 【参考方案12】:

1) 修改PhoneGapLib项目中的Location.m。替换所有引用 navigator.geolocation 与 navigator_geo

2) 将 phonegap.js 复制到 phonegap2.js 并放入应用程序的根目录。我现在有了 了解到每次我构建我的应用程序并将其加载到设备上时 或模拟器,phonegap.js 文件正在重新生成。好的。那么我 需要修改它,所以让我们只使用另一个并处理 以后升级的麻烦。

3) 修改创建构造函数的行(在 phonegap2.js 中) 626 上的 navigator.geolocation 为 ... if (typeof navigator._geo == "未定义") navigator._geo = new Geolocation();

4) 现在,只要您想使用 PHONEGAP GPS 的东西,就可以在您的 HTML 中, 您可以使用 navigator._geo.getCurrentPosition 或类似方法引用它 5) 享受 ONE, and CLEAN, 位置警报权限 向您的用户展示您使用 PhoneGap 并构建 带有 HTML/JS 的应用程序。

* 请注意并提供帮助! *

如果我运行 watchPosition 函数,我会得到第一个位置 更新各种统计数据。之后,它总是会报告一个 错误。我认为这对于这 30 秒的准确时间来说很糟糕 GPS就这些东西?

http://groups.google.com/group/phonegap/browse_thread/thread/8067c2037816a9ad

【讨论】:

【参考方案13】:

我按照所有说明进行操作,但仍然失败。最后,我玩弄了 PhoneGap 演示并找到了最终解决方案

    将所有 js 文件和 html 文件移动到同一个文件夹(甚至不包括子文件夹)。恭喜!问题解决了,没有权限提示了:)

    顺便说一句,您最好使用“setTimeout(function()utility.getGeoData();,1000);”我发现“document.addEventListener("deviceready", utility.getGeoData(), false);"不适合我。

希望在您找不到上述解决方案时有所帮助:)

祝你好运!

【讨论】:

“document.addEventListener("deviceready",utility.getGeoData(),false)” 不起作用,因为您正在执行getGeoData,这使得它的返回值成为addEventListener的第二个参数而不是函数.卸下它的支架,它应该可以工作。广告@m 我发现我也需要设置一个超时。谢谢宾果游戏!【参考方案14】:

由于我已经为同样的问题苦苦挣扎了好几天,终于找到了解决方案,所以我决定与仍然无法解决它的任何人分享。

解决方案很简单:即使我通过 phonegap 命令行界面添加了插件并且插件文件位于 /Plugins 目录中,但 www 目录中的插件目录中缺少地理定位插件。因此,您只需将丢失的文件复制到 /www/plugins 即可。就这么简单。

如果有人需要丢失的文件:http://d.pr/f/xqhq

顺便说一句:我使用的是科尔多瓦 3.2.0。

我希望这也适用于你!

【讨论】:

【参考方案15】:

Phoengap/Cordova 版本 3.5 在这里。

与上面 Manuel 的回答类似,但这次插件没有安装在 platform/ios/[appname]/Plugins 文件夹中。

对我来说,解决方法是在 ../platforms/ios/[appname]/Plugins 文件夹中手动为插件创建一个新文件夹 > 然后将其重命名为 org.apache.cordova.geolocation > 然后复制 .将插件的 h 和 .m 文件放入其中。

您可以在 [root]/plugins/org.apache.cordova.geolocation/src/ios 目录中找到 geoLocation 插件的 .m 和 .h 文件。

【讨论】:

【参考方案16】:

将 Cordova 从 3.6 升级到 4.3 后出现此错误(以及许多其他错误)。

我认为升级过程中有一些失败,对我来说唯一可行的解​​决方案是cordova platform rm ios 然后是cordova platform add ios

/!\你将丢失所有的ios项目设置,你需要重新上传splash和icons。

【讨论】:

【参考方案17】:

就我而言,我正在使用 Cordova/Ionic 并且遇到了同样的问题。那是因为设备准备好之前的代码。我只是在“deviceready”上用 document.addEventListener 包装了代码。例如:

document.addEventListener("deviceready", function () 
  $cordovaGeolocation.getCurrentPosition(options).then(function(position)
      ...your code here...
    );
);

那么附加信息就不会出现了。

【讨论】:

【参考方案18】:

“将所有 js 文件和 html 文件移动到同一个文件夹(甚至不是子文件夹)。恭喜!问题已解决,不再有权限警报:)”就像 Caleb 说的那样对我有用,只移动科尔多瓦。将 js 文件添加到根目录并将插件添加到 config.xml

【讨论】:

【参考方案19】:

您的项目的 Bundle 显示名称是什么?

尝试手动更改默认值 $PRODUCT_NAME 并查看..

使用位置警报的权限仅选择您的捆绑显示名称!

【讨论】:

没关系,我已经手动设置了“捆绑显示名称”和“捆绑名称”属性!我没有手动设置的是“可执行文件”,它是 $EXECUTABLE_NAME。但是如果我改变了我就无法编译,显然..

以上是关于iPhone上的位置许可警报与PhoneGap的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cordova iOS 应用程序中请求位置许可时更改警报文本?

使用Hbuilder开发IOS应用上架审核提示请指定用户在位置许可模式警报中使用位置的预定用途。

如何捕获位置警报响应iphone

Mac 上的 iOS 7 模拟器不适用于自定义位置(也不会请求许可)

如何在没有警报消息(iOS)的情况下在 webview 中获得地理定位许可?

iPhone 5/5C 上的运动与健身