# 授权
部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope
,用户选择对 scope
来进行授权,当授权给一个 scope
之后,其对应的所有接口都可以直接使用。
此类接口调用时:
- 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
- 如果用户已授权,可以直接调用接口;
- 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
# 获取用户授权设置
开发者可以使用 wx.getSetting 获取用户当前的授权状态。
# 打开设置界面
用户可以在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。
# 提前发起授权请求
开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。
# scope 列表
scope | 对应接口 | 描述 |
---|---|---|
scope.userLocation | wx.getLocation, wx.startLocationUpdate, MapContext.moveToLocation | 精确地理位置 |
scope.userFuzzyLocation | wx.getFuzzyLocation | 模糊地理位置 |
scope.userLocationBackground | wx.startLocationUpdateBackground | 后台定位 |
scope.record | live-pusher组件, wx.startRecord, wx.joinVoIPChat, RecorderManager.start | 麦克风 |
scope.camera | camera组件, live-pusher组件, wx.createVKSession | 摄像头 |
scope.bluetooth | wx.openBluetoothAdapter, wx.createBLEPeripheralServer | 蓝牙 |
scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 添加到相册 |
scope.addPhoneContact | wx.addPhoneContact | 添加到联系人 |
scope.addPhoneCalendar | wx.addPhoneRepeatCalendar, wx.addPhoneCalendar | 添加到日历 |
scope.werun | wx.getWeRunData | 微信运动步数 |
scope.address | wx.chooseAddress | 通讯地址(已取消授权,可以直接调用对应接口) |
scope.invoiceTitle | wx.chooseInvoiceTitle | 发票抬头(已取消授权,可以直接调用对应接口) |
scope.invoice | wx.chooseInvoice | 获取发票(已取消授权,可以直接调用对应接口) |
scope.userInfo | wx.getUserInfo | 用户信息(小程序已回收,请使用头像昵称填写,小游戏可继续调用) |
# 授权有效期
一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。
# 最佳实践
在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。
# 注意事项
- 需要授权
scope.userLocation
、scope.userLocationBackground
、scope.userFuzzyLocation
时必须配置地理位置用途说明。 - 授权弹窗会展示小程序在小程序用户隐私保护指引中填写的说明,请谨慎填写。
# 后台定位
开发者首先需要在后台运行的能力中声明后台定位。
安卓 8.0.0 , iOS 8.0.0 起,若开发者可支持通过 wx.authorize({scope: 'scope.userLocationBackground'})
唤起后台使用地理位置授权窗口。
低于以上版本,scope.userLocationBackground 不会弹窗提醒用户。需要用户在设置页中,主动将“位置信息”选项设置为“使用小程序期间和离开小程序后”。开发者可以通过调用wx.openSetting,打开设置页。