【问题标题】:Cordova geolocation plugin getCurrentPosition deprecatedCordova 地理定位插件 getCurrentPosition 已弃用
【发布时间】:2016-02-25 01:55:25
【问题描述】:

我有一个离子应用程序正在尝试完全按照文档中所示使用地理位置。

var posOptions = {timeout: 10000, enableHighAccuracy: true};

$cordovaGeolocation.getCurrentPosition(posOptions)
  .then(function (position) {
    //  do something
  }, function(err) {
    console.log(err);
    // error
  });

但是现在它已经停止工作并且在控制台中给了我这个警告。

getCurrentPosition() 和 watchPosition() 在不安全的来源上被弃用,并且支持将在未来被删除。您应该考虑将应用程序切换到安全源,例如 HTTPS。详情请见https://goo.gl/rStTGz

这似乎是对 w3c 规范的巨大改变,我很惊讶没有很多关于它的文档。谁能告诉我我在这里缺少什么。

该应用程序在手机上运行,​​因此它自然地在本地主机上监听。它通过http而不是https与服务器交谈,但我不明白为什么这会影响获取地理坐标

我正在浏览器上测试该应用程序,并在 ios 设备上作为科尔多瓦应用程序进行测试。

【问题讨论】:

  • 您在浏览器上进行测试吗?非 https 网站上的 google chrome 将弃用地理位置,但这不会影响 Cordova 应用程序
  • 是的,我在浏览器和 ios 应用程序上对其进行了测试
  • 在您的cordova 应用程序中,html 文件是本地安装的还是显示远程网站?该网站使用http还是https?
  • 本地安装。我认为默认情况下离子构建使用http。但它是本地的,所以没关系,不是吗?

标签: cordova http https geolocation ionic


【解决方案1】:

我直接使用 HTML5 地理定位。但是cordova插件只是它的角度包装,正如他们所说的in this Stack Overflow answer

显然浏览器不能再使用来自 http 页面的地理定位了。但是对于 ionic 来说,这只是 livereload 的问题。 There 是使用 http-proxy 描述的一些解决方法,让 livereload 在 https 上工作。

在没有 livereload 的设备上运行应用程序(即“ionic run android”最后没有“-l”)工作正常。

记得在 deviceready 事件之后运行 getCurrentPosition。对我来说,这个适用于其中一个控制器:

            document.addEventListener("deviceready", function () {
            console.info('deviceready fired!');
            window.navigator.geolocation.getCurrentPosition(function(position) {
                console.info('Location from Cordova:');
                console.info("Latitude: " + position.coords.latitude + "; Longitude: " + position.coords.longitude);
            });

【讨论】:

    【解决方案2】:

    在 chrome 浏览器中测试您的应用时,只需将应用 url(通常为 192.xxx.xxx.xxx:3000)更改为 localhost:3000

    您需要确保您的媒体政策支持它,但不会出现安全错误。

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2015-01-11
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多