用户位置授权

it2022-05-05  215

1.在微信小程序中很多场景都需要用户授权,例如用户相册权限,位置权限...,当需要将海报保存在相册就会用到相册权限(海报参考),在城市定位,店家列表由远及近排序就会用到位置权限,这里主要考虑位置权限使用场景。

2.主体思路,进页面立马弹出微信授权位置弹窗,提示用户授权位置,授权成功则会获取用户地理经纬度坐标,根据经纬度信息请求接口,获取城市名称。如果用户拒绝授权,则拿不到用户位置,展示未知(当然了,在现实开发中一般会有默认城市)。在旁边放一个重新获取按钮,如果用户授权过了就不用弹窗提示了,如果进页面时用户拒绝了,此时弹窗提示用户是否授权,授权则打开授权页面让用户授权,授权成功则会拿到用户的位置。(因为用户的授权页是通过wx.openSetting打开的新页面,如果获取位置的动作放在onload里back回来后不会重新获取,所以建议放onshow里)。

3.代码

3.1wxml

<view class='btn'> <block wx:if="{{city}}"> <view>城市名</view> </block> <block wx:else> 未知 </block> </view> <view class='btn' catchtap='re_get_city'>重新获取</view>

3.2wxss

.btn { border: 1px solid #d6d6d6; padding:5rpx 20rpx; background: #fff; color: #4d4d4d; line-height: 50rpx; font-size: 28rpx; display: inline-block; text-align: center; margin: 10rpx; }

3.3js

Page({ /** * 页面的初始数据 */ data: { city:'' }, /** * 生命周期函数--监听页面加载 */ onShow: function(options) { var that = this; // 放在onshow里,当back回来后会执行该语句;如果放onload不会执行 that.get_city(); }, // 获取用户位置 get_city: function() { var that = this; wx.getLocation({ type: 'wgs84', success: function(res) { // 这里会拿到一些授权信息,参数详见官网 console.log(res); if (res && res.latitude && res.longitude){ // 在这里一般会通过后台接口,通过经纬度比对获取用户当前城市名称 that.setData({ city:'城市名' }) } } }) }, /**重新定位**/ re_get_city: function() { var that = this; // 特别低的版本可能不能使用该方法,做一个兼容 if (!wx.getSetting) return // 看看权限是否获取,有权限,就直接拿值,如果没有权限,打开授权页 wx.getSetting({ success: function(res) { console.log('getSetting...', res) if (res.authSetting["scope.userLocation"] == true) { // 有权限,拿值 that.get_city(); } else { // 无权限,弹窗友好提示 wx.showModal({ title: '位置信息授权', content: '位置授权暂未开启,无法完成定位', confirmText: '开启授权', cancelText: '仍然拒绝', success: function(res) { // 同意,打开授权页 if (res.confirm) { wx.openSetting({ success: (res) => { if (res.authSetting["scope.userLocation"] == true) { // 开关打开成功,获取位置信息 that.get_city(); } else { // 开关关闭,提示无法拿到位置权限 wx.showModal({ title: '提示', content: '无法使用定位权限', confirmText: '太遗憾了', showCancel: false }) } }, fail: function() { console.log('openSetting.failed') } }) } // 不同意,弹窗提示无法拿到位置权限 if (res.cancel) { wx.showToast({ title: '定位失败', icon: 'none', duration: 1000 }) } } }) } } }) }, })

4.说明

4.1推荐地址:https://www.cnblogs.com/liuwei54/p/10911091.html

4.2推荐地址:https://www.jianshu.com/p/e232c3c9af37

4.3 官方 wx.getSetting 的 api 地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html

4.4 官方 wx.openSetting 的 api 地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html

 


最新回复(0)