用户首次拒绝获取位置后,再次获取位置的方法分享
背景
在开发小程序推荐附近门店时,遇到用户在第一次进入小程序的时候,就会拒绝获取位置,导致后面一直没有办法推荐。小程序提供了相关的API,可以重新获取位置,但过程中遇到了一些坑,以为进行分享。
解决方法
不多说,以下代码供参考:
常见问题:openSetting:fail can only be invoked by user TAP gesture 这是因为重新获取位置 ,必须由用户点击事件触发 。
/**
* 事件:地理位置授权
*/
checkAuthorize() {
const self = this;
// 检查授权
uni.authorize({
scope: 'userLocation',
success() {
console.log('checkAuthorize success');
// 重新获取位置
self.getLocation(function() {
// 获取位置后,做自己的逻辑处理
});
},
fail() {
console.log('checkAuthorize fail');
// 检查授权失败,请求重新打开位置
uni.getSetting({
success: function(res) {
var statu = res.authSetting;
if (!statu['scope.userLocation']) {
// 如果没有授权 - 则提示需要打开位置 此处增加一个modal提示,是
// 因为小程序获取位置 ,必须是由用户点击事件触发。可使用wx.showModal
self.$util.confirm({
title: '提示',
content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用',
success() {
// 打开授权面板
uni.openSetting({
success(data) {
console.log('openSetting success', data);
if (data.authSetting['scope.userLocation']) {
// 重新获取位置
self.getLocation(function() {
// 写自己的逻辑
});
}
},
fail(res) {
console.log('openSetting fail', res);
}
});
}
});
}
},
fail:function(err){
console.log('getSetting fail',err);
}
});
}
});
}