在微信小程序中,如果用户在小程序中拒绝过授权,下次再请求时是不会再次弹出授权窗口的.
所以需要先判断授权状态,手动弹出授权提醒
const mapInfo = () => {
return new Promise((resolve, reject) => {
// 先获取用户的所有授权信息
wx.getSetting({
success: (res) => {
// 这里判断的是地理位置权限,如果有这个字段,状态是false,说明拒接过,这种情况是不会再次自动弹出授权窗口的
if (res.authSetting.hasOwnProperty('scope.userLocation') && res.authSetting['scope.userLocation']===false) {
// 弹出提示模态框
wx.showModal({
title: '是否授权地理位置信息',
content: '需要获取您的地理位置信息,请确认授权,否则无法推送本地岗位',
success: function (tip) {
// 点击确认
if (tip.confirm) {
// 打开授权页面,让用户手动打开权限
wx.openSetting({
success: function (data) {
if (data.authSetting["scope.userLocation"]) {
wx.getLocation({
success: function (res) {
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function (addressRes) {
let address = addressRes.result.address_component
resolve(address);
}
})
},
fail: function () {
}
})
} else {
wx.showToast({
title: '授权失败',
icon: 'none',
duration: 2000
})
}
}
})
}
else {
let address = {city:'定位失败'}
resolve(address);
}
},
})
} else {
// 没有授权历史,或者已经授权过
wx.getLocation({
success: function (res) {
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function (addressRes) {
let address = addressRes.result.address_component
resolve(address);
}
})
},
fail: function () {
wx.showModal({
title: '获取地理位置信息失败',
content: '请确认是否打开手机定位功能',
success: function (tip) {
let address = {city:'定位失败'}
resolve(address);
},
})
}
})
}
}
})
})
}