# 授权

部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 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 用户信息(小程序已回收,请使用头像昵称填写,小游戏可继续调用)

# 授权有效期

一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。

# 最佳实践

在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。

# 注意事项

  1. 需要授权 scope.userLocationscope.userLocationBackgroundscope.userFuzzyLocation 时必须配置地理位置用途说明
  2. 授权弹窗会展示小程序在小程序用户隐私保护指引中填写的说明,请谨慎填写。

# 后台定位

开发者首先需要在后台运行的能力中声明后台定位

安卓 8.0.0 , iOS 8.0.0 起,若开发者可支持通过 wx.authorize({scope: 'scope.userLocationBackground'}) 唤起后台使用地理位置授权窗口。

低于以上版本,scope.userLocationBackground 不会弹窗提醒用户。需要用户在设置页中,主动将“位置信息”选项设置为“使用小程序期间和离开小程序后”。开发者可以通过调用wx.openSetting,打开设置页。

background-location