在涉及到用户位置的小程序里,如果用户拒绝授权,就无法拿到起当前的坐标,也就无法进行下一步的操作。所以,需要检测用户是否拒绝授权,并引导其开启。
方法一
在 wx.getLocation 失败回调里,通过 wx.getSetting 来判断是否授权了地理位置,如果没有,通过 wx.openSetting 来让用户再次手动授权。
方法二
在 wx.getLocation 失败回调里,通过 err msg 来判断是否禁用了授权。然后同样适用 wx.openSetting 来引导再次授权。但是,这里存在一个问题,即不同平台 err msg 不一致,这样做并不严谨。
wx.getSetting
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html
wx.getSetting(Object object)
获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
wx.openSetting
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html
wx.openSetting(Object object)
调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。
success 回调返回用户授权的结果。
注意:2.3.0 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息。所以,需要使用 modal 弹窗来解决此问题。
示例代码
wx.getLocation({
type: 'gcj02',
success: res => {
this.setData({
lat: res.latitude.toString(),
lng: res.longitude.toString(),
})
},
complete: () => {
// 未授权情况
var that = this;
if (!this.data.lng) {
wx.getSetting({
success (res) {
if (!res.authSetting["scope.userLocation"]) {
// 2.3.0 版本开始,用户发生点击行为后,
// 才可以跳转打开设置页,管理授权信息。
wx.showModal({
title: '提示',
content: '请开启位置授权,否则将无法使用XX功能',
confirmText: "去开启",
cancelText: "取消",
success: res => {
if (res.confirm) {
wx.openSetting({
success (res) {
that.onShow();
}
})
}
}
}) // end of wx.showModal
}
}
})
return;
}
// 已授权情况
// TODO
}
});
参考
https://www.jianshu.com/p/80e33d16182f
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式
谈笑风生
哈尼露呀_张三 (来自: 中国 上海 上海 移动) 4年前
大象腿 (来自: 中国 山东 烟台 移动) 4年前