小程序授权

特点

小程序的部分接口需要经过用户授权同意才能调用。这些接口别分成多个 scope ,用户选择对 scope 来进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。
此类接口调用有以下特点:

  • 如果用户未接受或拒绝过此权限(比如在授权弹窗时退出),会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。

scope 列表

scope 对应接口 描述
scope.userInfo wx.getUserInfo 用户信息
scope.userLocation wx.getLocation, wx.chooseLocation 地理位置
scope.address wx.chooseAddress 通讯地址
scope.invoiceTitle wx.chooseInvoiceTitle 发票抬头
scope.invoice wx.chooseInvoice 获取发票
scope.werun wx.getWeRunData 微信运动步数
scope.record wx.startRecord 录音功能
scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 保存到相册
scope.camera 组件 摄像头

授权涉及到的接口

  • wx.openSetting 打开权限控制页面,只能通过点击事件调用
  • wx.getSetting 获取用户的当前授权状态
  • wx.authorize 主动发起授权请求

场景

首次使用到该权限

这种时候会自动唤出授权弹窗,如果

  • 接受:下次再次使用该接口,可以直接调用
  • 拒绝:下次再次使用该接口,不会出现,直接调用失败,只能调用wx.getSetting引导用户开启权限
  • 中断操作:比如退出之类,下次使用该接口还是会唤出授权弹窗

用户手动关闭了该权限

这种情况会直接调用失败,只能调用wx.getSetting引导用户开启权限

建议与注意

  1. 在小程序加载完成后,可以提前调用wx.authorize获取对应权限
  2. wx.authorize({scope: "scope.userInfo"}),不会弹出授权窗口,要使用 <button open-type="getUserInfo"/>
  3. 需要授权 scope.userLocation 时必须在app.json里配置地理位置用途说明,此说明会在权限弹窗时展示给用户

参考

官方文档