特点
小程序的部分接口需要经过用户授权同意才能调用。这些接口别分成多个 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
引导用户开启权限
建议与注意
- 在小程序加载完成后,可以提前调用
wx.authorize
获取对应权限 wx.authorize({scope: "scope.userInfo"})
,不会弹出授权窗口,要使用<button open-type="getUserInfo"/>
- 需要授权
scope.userLocation
时必须在app.json里配置地理位置用途说明,此说明会在权限弹窗时展示给用户