# 授權
部分接口需要經過用戶授權同意才能調用。我們把這些接口按使用范圍分成多個 scope ,用戶選擇對 scope 來進行授權,當授權給一個 scope 之后,其對應的所有接口都可以直接使用。
此類接口調用時:
- 如果用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊同意后方可調用接口;
- 如果用戶已授權,可以直接調用接口;
- 如果用戶已拒絕授權,則不會出現(xiàn)彈窗,而是直接進入接口 fail 回調。請開發(fā)者兼容用戶拒絕授權的場景。
# 獲取用戶授權設置
開發(fā)者可以使用 wx.getSetting 獲取用戶當前的授權狀態(tài)。
# 打開設置界面
用戶可以在小程序設置界面(「右上角」 - 「關于」 - 「右上角」 - 「設置」)中控制對該小程序的授權狀態(tài)。
開發(fā)者可以調用 wx.openSetting 打開設置界面,引導用戶開啟授權。
# 提前發(fā)起授權請求
開發(fā)者可以使用 wx.authorize 在調用需授權 API 之前,提前向用戶發(fā)起授權請求。
# 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 | 添加到聯(lián)系人 |
| scope.addPhoneCalendar | wx.addPhoneRepeatCalendar, wx.addPhoneCalendar | 添加到日歷 |
| scope.werun | wx.getWeRunData | 微信運動步數(shù) |
| scope.address | wx.chooseAddress | 通訊地址(已取消授權,可以直接調用對應接口) |
| scope.invoiceTitle | wx.chooseInvoiceTitle | 發(fā)票抬頭(已取消授權,可以直接調用對應接口) |
| scope.invoice | wx.chooseInvoice | 獲取發(fā)票(已取消授權,可以直接調用對應接口) |
| scope.userInfo | wx.getUserInfo | 用戶信息(小程序已回收,請使用頭像昵稱填寫,小游戲可繼續(xù)調用) |
# 授權有效期
一旦用戶明確同意或拒絕過授權,其授權關系會記錄在后臺,直到用戶主動刪除小程序。
# 最佳實踐
在真正需要使用授權接口時,才向用戶發(fā)起授權申請,并在授權申請中說明清楚要使用該功能的理由。
# 注意事項
- 需要授權
scope.userLocation、scope.userLocationBackground、scope.userFuzzyLocation時必須配置地理位置用途說明。 - 授權彈窗會展示小程序在小程序用戶隱私保護指引中填寫的說明,請謹慎填寫。
# 后臺定位
開發(fā)者首先需要在后臺運行的能力中聲明后臺定位。
安卓 8.0.0 , iOS 8.0.0 起,若開發(fā)者可支持通過 wx.authorize({scope: 'scope.userLocationBackground'}) 喚起后臺使用地理位置授權窗口。
低于以上版本,scope.userLocationBackground 不會彈窗提醒用戶。需要用戶在設置頁中,主動將“位置信息”選項設置為“使用小程序期間和離開小程序后”。開發(fā)者可以通過調用wx.openSetting,打開設置頁。
