地理位置API不适用于移动设备

时间:2017-08-10 19:14:15

标签: javascript html5 reactjs geolocation

我在React / Redux上编写我的Web应用程序。我需要借助Geolocation API获取用户位置。在桌面浏览器上一切正常,但在手机上(在小米Redmi Note 3和iPhone 5s上检查)它会抛出错误代码1 - 权限被拒绝。并且它不会请求获取该位置的任何权限。

这是我在我的网站上运行的测试样本:

componentDidMount() {
    if (window.navigator.geolocation) {
        window.navigator.geolocation.getCurrentPosition(position => {
            alert(position.coords.latitude + ' ' + position.coords.longitude);
        }, err => {
            alert('ERROR: ' + err.code);
        });
    } else {
        alert('Geolocation API is not supported!');
    }
}

这个问题的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

遇到同样的问题......解决了:

检查您的手机权限,以便分享您的位置。

在iPhone上: 设置 - >定位服务 - > [您的浏览器]

https://support.apple.com/en-ca/HT203033

加了:

Chrome需要https才能使用地理位置: https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only

答案 1 :(得分:0)

截至 2021 年 ,这仍然不起作用。

Try to access location on mobile during react development

This is the link in that error message
如果您想知道,它谈到“为强大的新功能首选安全来源”,而位置则被视为这些强大功能之一。

要生成上述内容,请按如下方式更新 error 部分:

  if (navigator.geolocation) {

    navigator.geolocation.getCurrentPosition(position => {
        // other
    },
    err => {
        // include the "code" part
        alert(`ERROR(${err.code}): ${err.message}`)
    });
  };
  • 在开发过程中在桌面上...
    它有效,因为如果您阅读上述链接,您会注意到 localhost 被视为安全来源。< /p>

    事实上,即使是@chrisheyn 的 answer above 中共享的 chrome 链接,也有一个“Does this affect local development?”部分并解释了为什么这应该适用于 locahost



解决方案是什么?
react 团队更新您的移动设备在开发过程中选择应用的方式之前,您绝对无法解决此问题。

要使用 HTML5 Geolocation API,您需要通过 HTTPS 运行应用。这意味着将您的应用程序推送到云/主机(以测试此功能),或者您是否可以设法获取此网络网址 http://192.168.0.134:3000 来执行 https 我相信后一种选择非常有用更难,但我很想知道是否有人成功。