# 授权

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

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

## 获取用户授权设置
开发者可以使用 [wx.getSetting](/miniprogram/dev/api/open-api/setting/wx.getSetting.md) 获取用户当前的授权状态。

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

开发者可以调用 [wx.openSetting](/miniprogram/dev/api/open-api/setting/wx.openSetting.md) 打开设置界面，引导用户开启授权。

## 提前发起授权请求
开发者可以使用 [wx.authorize](/miniprogram/dev/api/open-api/authorize/wx.authorize.md) 在调用需授权 API 之前，提前向用户发起授权请求。

## scope 列表

| scope                        | 对应接口                                                                                                                         | 描述                                                                                 |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| scope.userLocation           | [wx.getLocation](/miniprogram/dev/api/location/wx.getLocation.md)、[wx.startLocationUpdate](/miniprogram/dev/api/location/wx.startLocationUpdate.md)、[MapContext.moveToLocation](/miniprogram/dev/api/media/map/MapContext.moveToLocation.md)                     | 精确地理位置                                                                             |
| scope.userFuzzyLocation      | [wx.getFuzzyLocation](/miniprogram/dev/api/location/wx.getFuzzyLocation.md)                                                                                     | 模糊地理位置                                                                             |
| scope.userLocationBackground | [wx.startLocationUpdateBackground](/miniprogram/dev/api/location/wx.startLocationUpdateBackground.md)                                                           | 后台定位                                                                             |
| scope.record                 | [live-pusher](/miniprogram/dev/component/live-pusher.md) 组件、[wx.startRecord](/miniprogram/dev/api/media/recorder/wx.startRecord.md)、[wx.joinVoIPChat](/miniprogram/dev/api/media/voip/wx.joinVoIPChat.md)、[RecorderManager.start](/miniprogram/dev/api/media/recorder/RecorderManager.start.md)       | 麦克风                                                                               |
| scope.camera                 | [camera](/miniprogram/dev/component/camera.md) 组件、[live-pusher](/miniprogram/dev/component/live-pusher.md) 组件、[wx.createVKSession](/miniprogram/dev/api/ai/visionkit/wx.createVKSession.md)                                                               | 摄像头                                                                               |
| scope.bluetooth              | [wx.openBluetoothAdapter](/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.md)、[wx.createBLEPeripheralServer](/miniprogram/dev/api/device/bluetooth-peripheral/wx.createBLEPeripheralServer.md)             | 蓝牙                                                                                 |
| scope.writePhotosAlbum       | [wx.saveImageToPhotosAlbum](/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.md)、[wx.saveVideoToPhotosAlbum](/miniprogram/dev/api/media/video/wx.saveVideoToPhotosAlbum.md)               | 添加到相册                                                                           |
| scope.addPhoneContact        | [wx.addPhoneContact](/miniprogram/dev/api/device/contact/wx.addPhoneContact.md)                                                                                    | 添加到联系人                                                                         |
| scope.addPhoneCalendar       | [wx.addPhoneRepeatCalendar](/miniprogram/dev/api/device/calendar/wx.addPhoneRepeatCalendar.md)、[wx.addPhoneCalendar](/miniprogram/dev/api/device/calendar/wx.addPhoneCalendar.md)                           | 添加到日历                                                                           |
| scope.werun                  | [wx.getWeRunData](/miniprogram/dev/api/open-api/werun/wx.getWeRunData.md)                                                                                             | 微信运动步数                                                                         |
| scope.address                | [wx.chooseAddress](/miniprogram/dev/api/open-api/address/wx.chooseAddress.md)                                                                                           | 通讯地址（已取消授权，可以直接调用对应接口）                                         |
| scope.invoiceTitle           | [wx.chooseInvoiceTitle](/miniprogram/dev/api/open-api/invoice/wx.chooseInvoiceTitle.md)                                                                                 | 发票抬头（已取消授权，可以直接调用对应接口）                                         |
| scope.invoice                | [wx.chooseInvoice](/miniprogram/dev/api/open-api/invoice/wx.chooseInvoice.md)                                                                                           | 获取发票（已取消授权，可以直接调用对应接口）                                         |
| scope.userInfo               | [wx.getUserInfo](/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.md)                                                                                               | 用户信息（小程序已回收，请使用[头像昵称填写](userProfile)，小游戏可继续调用）     |

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

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

## 注意事项
1. 需要授权 `scope.userLocation`、`scope.userLocationBackground`、`scope.userFuzzyLocation` 时必须[配置地理位置用途说明](/minigame/dev/reference/configuration/app.md#permission)。
2. 授权弹窗会展示小程序在[小程序用户隐私保护指引](/miniprogram/dev/framework/user-privacy/index)中填写的说明，请谨慎填写。

## 后台定位

开发者首先需要在后台运行的能力中声明[后台定位](/minigame/dev/reference/configuration/app.md#requiredBackgroundModes)。

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

低于以上版本，`scope.userLocationBackground` 不会弹窗提醒用户。需要用户在设置页中，主动将「位置信息」选项设置为「使用小程序期间和离开小程序后」。开发者可以通过调用 [wx.openSetting](/miniprogram/dev/api/open-api/setting/wx.openSetting.md)，打开设置页。

![background-location](https://res8.wxqcloud.qq.com.cn/wxdoc/8b0d8743-4299-429c-8ea0-44e0831a48eb.png)
