wx.getLocation 如果用户曾点击过一次 “确认授权” ,
那么再次调用该接口时将不会出现弹出框(可以直接拿到经纬度)
关于用户体验:
在 onLoad 中判断:
如果用户之前“没有触发过“授权地理位置事件,则发起请求授权-----> 如果同意授权,直接拿到经纬度处理逻辑;
如果不同意,则弹出自定义模态框进行提示,如果用户同意就打开setting页面;如果还不同意,就执行默认事件(用户不授权的逻辑)
wx.getSetting({
success: function(res){
if (typeof (res.authSetting['scope.userLocation']) == "undefined") { // 从未触发过授权的情况
wx.getLocation({ // 用户同意授权地理位置
success: function (res) {
that.setData({
latitude: res.latitude,
longitude: res.longitude
});
that.getShopInfo_nearby(res.latitude, res.longitude);
},
fail: function (err) { // 用户拒绝授权地理位置
wx.showModal({//弹出模态框,询问
title: '是否授权当前位置',
content: '如需正常使用本程序,请按确定并在授权管理中选中“地理位置”,然后点按返回即可正常使用。',
cancelColor: '#f00',
success: function (res) {
if (res.confirm) {//同意授权
wx.openSetting({})
} else if (res.cancel) {//不同意授权,进行普通查询
mac = '08:D8:33:7C:5E:5';
that.getShopInfo(mac);
}
}
})
}
})
}
}
})
在 onShow 中:先检查用户授权状态,如果“曾经触发过“地理位置授权事件,但没有确认授权,就弹出自定义模态框进行询问(同意->setting页面; 不同意-> 走不同意的逻辑);
如果授权过了,则直接使用wx.getLocation 获取经纬度拿到经纬度处理逻辑(此时不会再触发弹框)
wx.getSetting({//检测用户权限
success: (res) => {
if (res.authSetting['scope.userLocation'] == false) { // 地理位置授权 触发过但没有授权
wx.showModal({//弹出模态框,询问
title: '是否授权当前位置',
content: '如需正常使用紫燕到家设备,请按确定并在授权管理中选中“地理位置”,然后点按返回即可正常使用。',
cancelColor: '#f00',
success: function (res) {
if (res.confirm) {//同意授权
wx.openSetting({})
} else if (res.cancel) {//不同意授权,进行普通查询
mac = '08:D8:33:7C:5E:5';
that.getShopInfo(mac);
}
}
})
} else if (res.authSetting['scope.userLocation'] == true){ // 地理位置授权过了
wx.getLocation({
success: function(res) {
that.getShopInfo_nearby(res.latitude, res.longitude);
},
})
}
}
})
1