项目背景:疫情期间,公司做了一个健康自查上报的功能,用于学校统计师生的健康信息和流动信息,这个功能会获取用户的定位信息,
前端的运行环境:小程序内嵌h5.
定位的实现方式:
1.h5原生方法
navigator.geolocation.getCurrentPosition;
手机上需要用户开启定位、APP定位授权
一定要设定一个超时时间,不然会可能会一直在获取而得不到返回,超时的错误码是3
2.微信sdk定位方法
wx.checkJsApi({
jsApiList: ["getLocation"],
success: function (res) {
self.locate(cb);
}, fail: function (err) {
alert(JSON.stringify(err))
}
});
调用微信sdk需要取得授权,那么就至少三步 1)获取授权的信息 2)凭授权信息验证weixinsdk 3)最终才可以调用定位功能获取。当时绑定了一个同事的订阅号,在获取位置信息的时候弹出确认信息,显示的就是订阅号的名字,而这个同事的订阅号名字起飞十分的放飞自我 \(^o^)/~
3.百度或者腾讯地图定位
let geolocation = new qq.maps.Geolocation(key, "eCodeThrough")
geolocation.getLocation(resolve, reject, {timeout: 8000})
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(resolve, reject)
都是相当成熟的解决方案,但在这里不适合,因为会有非业务域名的警告,推测是用iframe处理跨域问题的方式来跟百度的定位服务器拿定位信息,触发了非业务域名警告。
网友评论