百度地图API geolocation三次不允许定位后再次弹出用
2019-06-13 本文已影响0人
张Piers
问题描述
- 手机端h5页面调用百度地图获取地理位置的API,iOS手机上效果会提示是否允许百度地图访问开启定位服务,如果点击不允许,退出后 ,重复操作三次,即使重新到iPhone的设置里开启允许应用获取定位,进入页面仍然无法获取定位。
原因分析
- 第一反应是’不允许‘这个被浏览器记录,但是由于h5是应用在企业微信中,在iPhone设置中开启了企业微信允许授权定位,但是仍然不起作用,重新启动企业微信也不起作用,调用geolocation也会报错(accuracy为null)
let geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(
function(r) {
//关于状态码
//BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
//BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
//BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
//BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
//BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
//BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
//BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
//BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
//BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
if (this.getStatus() === BMAP_STATUS_SUCCESS) {
//精度为undefined 代表用户拒绝授权地理位置
if (r.accuracy === null) {
console.log('用户不允许定位')
}else{
console.log('用户允许')
}
}
);
- 查阅资料后发现,三次不允许后,iOS系统默认不让该应用程序获取定位,所以不论你在设置里开启都没有用。并且,没有重启这个提示弹窗都API
解决方法
- 将系统设置里都定位设置重制
1、(设置)Settings -> (通用)Genera -> (重置) Reset-> (重置定位于隐私)Reset Location & Privacy.
2、(设置)Settings ->( 隐私)Privacy 开启 Location Services.
MORE
- 如果是将h5页面嵌在app中,可以用js与app进行交互的方式获取定位,在原生app获取定位后传入给h5,这样当整个app的定位权限被用户拒绝与开启的时候,直接到设置中对应的app下就可以恢复了