用户首次拒绝获取位置后,再次获取位置的方法分享
发布于 3 年前 作者 jie29 882 次浏览 来自 分享

背景

在开发小程序推荐附近门店时,遇到用户在第一次进入小程序的时候,就会拒绝获取位置,导致后面一直没有办法推荐。小程序提供了相关的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);
				}
			});
		}
	});
}
回到顶部