微信小程序开发之——动态授权

一 小程序动态授权与否对比

未动态授权动态授权

二 小程序中使用的授权

scope对应接口描述
scope.userInfowx.getUserInfo用户信息
scope.userLocationwx.getLocation, wx.chooseLocation地理位置
scope.userLocationBackgroundwx.startLocationUpdateBackground后台定位
scope.addresswx.chooseAddress通讯地址(已取消授权,可以直接调用对应接口)
scope.invoiceTitlewx.chooseInvoiceTitle发票抬头(已取消授权,可以直接调用对应接口)
scope.invoicewx.chooseInvoice获取发票(已取消授权,可以直接调用对应接口)
scope.werunwx.getWeRunData微信运动步数
scope.recordwx.startRecord录音功能
scope.writePhotosAlbumwx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum保存到相册
scope.cameracamera 组件摄像头

三 系统默认授权的处理

  • 当用户使用了响应的程序(如Camera)时,系统弹出授权弹窗,供用户选择
  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口
  • 如果用户已授权,可以直接调用接口
  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景

四 开发者处理动态授权(拒绝授权)

4.1 获取用户授权设置

开发者可以使用 wx.getSetting 获取用户当前的授权状态。

4.2 根据授权状态进行处理

  • 如果授权通过,可以正常使用程序的功能
  • 如果授权被禁止,引导用户开启授权(开发者可以调用 wx.openSetting 打开设置界面)

五 示例(Camera)

5.1camera.wxml

<camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<view>预览</view>
<image mode="widthFix" src="{{src}}"></image>

5.2 camera.js

// pages/camera/camera.js
Page({
  onReady(){
    wx.getSetting({
      complete(res) {
        if (typeof (res.authSetting['scope.camera']) != 'undefined' && !res.authSetting['scope.camera']) {
          wx.showModal({
            title: '打开相机授权',
            content: '相机权限已关闭,请到设置界面打开',
            success: function (res) {
              if (res.confirm) {
                console.log('确定')
                wx.openSetting({success(res) {wx.navigateBack()}
                })
              } else {
                wx.navigateBack()
                console.log('取消')
              }
            }
          })
        }
      }
    })
  },
  takePhoto() {
    const ctx = wx.createCameraContext()
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        this.setData({
          src: res.tempImagePath
        })
      }
    })
  },
  error(e) {
    console.log(e.detail)
  }
})

六 参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值