评论

两个函数管理小程序中的全局定位信息与授权流程

管理小程序中全局定位信息与授权流程的一种实践

更新用户全局经纬度

/**
 * 更新用户经纬度
 */
export const updateUserLocationInfo = () => {
	const {globalData} = getApp();
	return new Promise((resolve, reject) => {
		wx.getLocation({
			type: 'gcj02',
			success(res) {
				const { longitude, latitude } = res;
				globalData.user_longitude = longitude.toFixed(6);
				globalData.user_latitude = latitude.toFixed(6);
				globalData.locationPermission = true;
				resolve({longitude, latitude});
				console.log('已获取用户位置经纬度', longitude, latitude);
			},
			fail(err) {
				globalData.locationPermission = false;
				globalData.user_longitude = '';
				globalData.user_latitude = '';
				resolve('auth fail!');
				// reject(err)
				// reject('auth fail!')
				console.log('获取用户位置经纬度错误: ', err);
			},
		});
	});
};

无地理权限时,提示用户开启

/**
 * 无地理权限时,提示用户开启
 */
	noPermissionHandle(){
		const self = this;
		wx.showModal({
			title: '提示',
			content: '您未授权位置信息,功能将无法使用',
			showCancel: true,
			confirmText: "授权",
			confirmColor: "#FAD84C",
			success(res){
				if (res.confirm){
					//确认则打开设置页面(自动切到设置页)
					wx.openSetting({
						success: (res) => {
							console.log(res.authSetting);
							if (!res.authSetting['scope.userLocation']) {
								//未设置定位授权
								console.log("未设置定位授权");
								wx.showModal({
									title: '提示',
									content: '您未授权位置,功能将无法使用',  //
									showCancel: false,
									success: function (res) {
										console.log(res)
									},
								})
							} else {
								//第二次才成功授权
								wx.showToast({
									title:'位置授权成功!',
									icon: 'none'
								})
								self.setData({
									location_permission: true,
									error_tip:''
								},()=>{
									self.onLoad(self.data.options)
								})
                // do something
								console.log("设置位置授权成功");
							}
						},
						fail: function () {
							console.log("授权设置位置失败");
						}
					})
				} else if (res.cancel){
					console.log("cancel");
				}
			},
			fail (){
				console.log("open-fail");
			}
		})
	},

使用示例

// 全局无定位信息时,更新用户经纬度
// 生命周期中更新定位
onLoad(){
	if(!globalData.user_latitude){
			await updateUserLocationInfo();//更新全局用户经纬度
			if(!globalData.locationPermission){
				this.noPermissionHandle()
			}else{
				//do something
			}
	}
}
// 点击某个按钮时判断是否有位置信息
tapButton(){
	if(!this.data.location_permission){
    this.noPermissionHandle()
    return
	}
}

如有错误遗漏,请各位批评指正。

最后一次编辑于  2023-11-28  
点赞 0
收藏
评论
登录 后发表内容