微信小程序-获取用户已授权权限的方法封装及详细使用

项目背景

小程序有地图打卡的功能, 需要判断用户的位置是否在打卡范围内(判断用户位置见下篇博客), 那么就涉及到用户是否授权获取位置的权限, 如果询问权限的时候用户直接点击了允许, 那万事大吉, 在需要位置的地方直接用 wx.getLocation 去获取用户位置就可以了, 但是如果用户点击了拒绝, 就需要用户手动去打开权限, 我们才可以拿到位置, 因此, 我们需要判断用户是否授权了这个权限
在这里插入图片描述

就想着是不是可以封装一个方法, 用来检测用户是否授权了某些权限

方法封装

function getUserPermission(permissionName) {
  return new Promise((resolve, reject) => {
    wx.getSetting({
      success(res) {
        if (res.authSetting[permissionName]) {
          resolve(true);
        } else if (res.authSetting[permissionName] === false) {
          reject(false);
        } else {
          wx.authorize({
            scope: permissionName,
            success() {
              resolve(true);
            },
            fail() {
              reject(false);
            }
          });
        }
      },
      fail() {
        reject(false);
      }
    });
  });
}

该方法用Promise风格封装, 首先会检测用户是否同意授权某项功能, 如果没有, 则询问用户是否同意授权小程序使用某项功能

🧐如何使用

const { getUserPermission } = require('../../utils/utils');

Page({
  checkUserHavePermission() {
    getUserPermission('scope.userLocation').then(() => {
      // 用户已授权获取地理位置
      this.getUserLocation(()=>{
        // 获取位置 进行其他操作
      })
    }).catch(() => {
      // 用户未授权/拒绝获取地理位置
      // 需要提示用户手动打开设置去授权
      this.openSettingPop(); // 打开提示弹窗
    })
  },
})

其中, 如果没有该权限, 会去询问用户进行授权, 但是如果之前用户已经拒绝授权, 那么就需要用户手动授权该权限
具体流程:

  1. 弹窗提示用户去授权
  2. 用户点击去设置, 弹出权限页面
  3. 用户设置完之后退出, 根据用户选择的结果进行相关的操作

其中, 要想打开设置, 需要注意的是, 如果用户没有授权该权限, 我们不能直接打开设置页面让用户设置, 因为微信有规定, 只能引导用户自己去打开设置页面, 也就是说, 必须有一个按钮, 让用户自己去操作, 所以微信提供了一个button组件的 open-type="openSetting" 用来打开权限设置页面

用户设置权限

<van-overlay z-index="6" show="{{ showSettingPop }}">
  <view class="overlay-box show-flex-box-c show-flex-center">
    <view class="confirm-box show-flex-box-c">
      <text class="title">提示</text>
      <text class="des">检测到您没打开获取位置功能权限,是否去设置打开?</text>
      <view class="btn-bar show-flex-box-r">
        <view class="btn" bindtap="closeSettingPop">取消</view>
        <view class="bind-phone-btn" bindtap="closeSettingPop">
          <button
            open-type="openSetting"
            bindtap="openSetting"
          >前往设置</button>
        </view>
      </view>
    </view>
  </view>
</van-overlay>
openSetting(){
    const that = this;
    wx.openSetting({
      success: (res) => {
        if (res.authSetting['scope.userLocation']) {
          // 用户在设置中点击了允许,调用选择位置信息函数
          that.getUserLocation(()=>{
            that.reqStoreList(true);
          })
        } else {
          // 用户在设置中点击了不允许,展示拒绝授权信息
          wx.showToast({
            title: '你拒绝了授权,无法操作内容',
            icon: 'none',
            duration: 3000,
          }) // 你拒绝了授权,无法操作内容'
        }
      },
      fail: (err) => { }
    })
  },

效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
🎉🎉
以上就是整个流程
欢迎大家一起讨论学习😊~

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴能为您服务!我为您编写的Spring Boot后端代码如下:// 获取微信用户权限信息 @RequestMapping(value = "/user/auth", method = RequestMethod.GET) public ResponseEntity<AuthResult> getUserAuthInfo(){ // 获取微信用户信息 AuthResult result = wechatService.getUserAuthInfo(); return new ResponseEntity<>(result, HttpStatus.OK); } ### 回答2: 当编写小程序的后端代码时,可以使用Spring Boot框架来实现微信用户权限获取。 首先,你需要在微信开放平台上注册一个小程序,并在小程序的设置中添加服务器域名。 然后,创建一个Spring Boot项目,并添加相关依赖,如Spring Web、Spring Data JPA等。 接下来,你需要编写一个Controller来处理微信授权请求。在该Controller中,你需要实现以下功能: 1. 创建一个接口用于发起微信授权登录,其中包括小程序的appid、secret、code等参数。 2. 根据传入的code参数,使用微信提供的API获取用户的openid和session_key。 3. 根据openid和session_key,生成一个token并返回给小程序端。 4. 将获取到的openid和session_key保存到数据库中,以便后续的用户登录验证。 下面是一个简单的示例代码,供参考: ```java @RestController @RequestMapping("/wechat") public class WechatController { @Autowired private UserRepository userRepository; @PostMapping("/login") public ResponseData login(@RequestBody LoginRequest request) { String appid = request.getAppid(); String secret = request.getSecret(); String code = request.getCode(); // 调用微信API获取openid和session_key String openid = WechatApiUtils.getOpenid(appid, secret, code); // 生成token String token = TokenUtils.generateToken(openid); // 保存openid和session_key到数据库 userRepository.save(new User(openid, sessionKey)); // 返回token给小程序端 return ResponseData.success(token); } } ``` 在上述代码中,我们使用了一个UserRepository来保存用户的openid和session_key。你需要根据实际需求来创建和使用数据库。 另外,你还需要编写一些工具类来处理微信API的调用、token的生成等操作。例如,WechatApiUtils类可以封装微信API的调用逻辑,TokenUtils类可以实现Token的生成和验证逻辑。 以上只是一个简单的示例,实际的需求可能更为复杂,你可以根据自己的需求进行相应的改进和扩展。希望能对你有所帮助! ### 回答3: 对于获取微信用户权限信息的后端代码,可以使用Spring Boot框架来实现。 第一步,搭建基本的Spring Boot项目结构。创建一个Spring Boot项目,并引入相应的依赖。 第二步,配置微信登录相关的信息。在application.properties(或者application.yml)文件中配置appId、appSecret和redirectUrl等信息。 第三步,创建一个Controller用于处理微信用户权限信息的请求。可以使用@RestController注解来标识该类为Controller。 第四步,编写获取微信用户权限信息的接口。使用@RequestMapping注解来标识接口路径,并实现相应的业务逻辑。 第五步,编写获取微信用户权限信息的具体逻辑。可以使用HttpClient或者RestTemplate等工具发送HTTP请求,并携带相应的参数,获取微信用户权限信息。 第六步,返回获取到的微信用户权限信息。将获取到的信息封装成一个自定义的返回对象,并使用@ResponseBody注解将返回对象转换为JSON格式返回给前端。 最后,启动Spring Boot应用,并使用微信小程序访问相关接口,即可获取微信用户权限信息。 总结:以上是一个简单的实现微信用户权限信息获取的后端代码示例,具体的实现逻辑可能还需要根据实际需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值