wx.getLocation 遇到的坑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wx.getLocation 遇到的坑相关的知识,希望对你有一定的参考价值。
参考技术A 最近在做微信小程序,获取定位时,遇到了一些问题思路如下图:
当手机未开启GPS 定位,小程序同意了地理位置授权, 安卓机型没问题,但是在ios 机型上遇到了问题
ios 授权了地理位置,wx.getLocation 走fail , wx.getSetting也是走fail ,就很神奇
打印一下
发现IOS 和安卓的回调不一样(真的坑)
安卓
ios
errCode 安卓有 ios 没有
仔细看了下文档,好像没有fail 回调说明,真坑
无奈只能通过判断字符串判断
小程序地理位置授权逻辑(包括二次授权)
首次授权直接调用wx.getLocation();方法,如果用户点击允许 则在success回调里返回地理位置信息,并且在不清除授权数据的情况下,以后再次调用wx.getLocation();方法 不会出弹窗 直接走success
如果用户在首次弹窗是选择 拒绝 则在fail回调中返回 {errMsg:"getLocation:fail auth deny"},并且在不清除授权数据的情况下,以后再次调用wx.getLocation();方法 不会出弹窗 直接走fail
所以正确授权逻辑 应该是:
1、进入页面先通过wx.getSetting();判断用户是否授权以及授权成功与否
a>如果没有地理位置的相关字段表示没有授权 -- 调起首次授权
b>如果返回scope.userLocation: true,表示授权成功 则直接在success拿地理位置信息
c>如果返回scope.userLocation: false,表示拒绝授权
则需要用户点击按钮 手动去设置允许获取地位置 返回主页面时
aa>允许 则返回 scope.userLocation: true,再次调用 wx.getLocation();方法 走success 返回地理位置信息
bb>拒绝 则返回scope.userLocation: false,
2、
产品流程:
首次进入页面 调起wx.getLocation();弹窗授权
允许? 直接拿地理位置信息
拒绝? 出一个按钮二次授权 方便用户手动设置
3、打开地图和选择地理位置
二、打开小程序设置(wx.openSetting())的调用方式(2018-09-12日调整)
1、使用button组件触发
代码:<button open-type="openSetting" bindopensetting="callback">打开设置</button>
2、有用户的点击行为触发wx.openSetting();接口调用;
代码:<button bindtap="openSetting">打开设置</button> openSetting(){wx.openSetting()}
其中:方法2已在最新开发者工具中支持(基础库切到2.2.4以上)
以上是关于wx.getLocation 遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章