【问题标题】:Location permission alert on iPhone with PhoneGapiPhone上的位置许可警报与PhoneGap
【发布时间】:2026-01-25 19:05:02
【问题描述】:

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

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

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

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

有人有想法吗?

【问题讨论】:

    标签: iphone cordova core-location


    【解决方案1】:

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

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

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

    【讨论】:

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

    我在这里聚会迟到了,但会回答这个问题以供参考。 答案是使用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 规范,并且仅在尚未提供实现的设备上执行”)跨度>
    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:

      您需要在设备准备就绪后进行地理定位。例如,下面的 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 一起使用,并使用这种方法,则位置服务将无法在浏览器中运行。我添加了一个开关来检查应用程序是否在浏览器中运行。如果是这样,我会立即运行导航器代码。如果我在设备上,我会等待设备准备就绪。
      【解决方案5】:

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

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

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

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

      祝你好运!

      【讨论】:

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

      在 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 的镜像
      【解决方案7】:

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

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

      【讨论】:

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

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

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

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

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

      我希望这也适用于你!

      【讨论】:

        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

          我只是按照文档并解决了它。 打开终端并 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; 行。
          【解决方案11】:

          终于解决了这个问题。

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

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

          不需要其他 codejs 或 ondeviceready。

          【讨论】:

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

          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 文件。

          【讨论】:

            【解决方案13】:

            为了解决这个问题,我必须运行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>
            

            希望对您有所帮助。

            【讨论】:

              【解决方案14】:

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

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

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

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

              【讨论】:

                【解决方案15】:

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

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

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

                【讨论】:

                  【解决方案16】:

                  虽然这个问题比较老了,但我发现herehere有类似的问题。

                  为了解决我的问题,我必须将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

                  【讨论】:

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

                    【讨论】:

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

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

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

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

                    【讨论】:

                      【解决方案19】:

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

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

                      【讨论】: