# 授权

部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope,用户选择对 scope 进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。

此类接口调用时:

  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。

# 获取用户授权设置

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

# 打开设置界面

用户可以在小程序设置界面(「右上角」-「关于」-「右上角」-「设置」)中控制对该小程序的授权状态。

开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。

# 提前发起授权请求

开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。

# scope 列表

scope 对应接口 描述
scope.userLocation wx.getLocationwx.startLocationUpdateMapContext.moveToLocation 精确地理位置
scope.userFuzzyLocation wx.getFuzzyLocation 模糊地理位置
scope.userLocationBackground wx.startLocationUpdateBackground 后台定位
scope.record live-pusher 组件、wx.startRecordwx.joinVoIPChatRecorderManager.start 麦克风
scope.camera camera 组件、live-pusher 组件、wx.createVKSession 摄像头
scope.bluetooth wx.openBluetoothAdapterwx.createBLEPeripheralServer 蓝牙
scope.writePhotosAlbum wx.saveImageToPhotosAlbumwx.saveVideoToPhotosAlbum 添加到相册
scope.addPhoneContact wx.addPhoneContact 添加到联系人
scope.addPhoneCalendar wx.addPhoneRepeatCalendarwx.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