小程序開發過程中,有些功能需要用戶先授權之后,才能正常使用對應授權功能。當用戶取消授權之后,不能能彈出系統申請權限彈窗,希望能讓用戶重新申請權限彈窗
授權實現效果
- 獲取用戶當前授權狀態,看是否已經授權,如果已經授權直接顯示攝像頭
- 如果用戶還沒有授權,則調起授權彈框,用戶允許授權則顯示攝像頭
- 如果用戶不允許,則提示用戶去設置頁面打開攝像頭權限
授權情況
對於用戶授權的情況,存在以下幾種授權結果:
- 如果用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊同意后方可調用接口;
- 如果用戶已授權,可以直接調用接口;
- 如果用戶已拒絕授權,則不會出現彈窗,而是直接進入接口 fail 回調。
對於授權結果3的情況,由於拒絕后,沒有重新授權彈窗,所以需要授權的功能將不能正常使用,我們需要提示用戶重新打開權限設置界面
授權代碼
(以下代碼申請使用錄音和攝像頭權限)
// 打開權限設置頁面 open_permission_setting() { wx.showModal({ title: '申請權限', content: '需要使用麥克風和攝像頭功能,請前往設置打開權限', success(res) { if (res.confirm) { console.log('用戶點擊確定') wx.openSetting({ success(res) { console.log('成功', res) }, fail(err) { console.log('失敗', err) } }) } else if (res.cancel) { console.log('用戶點擊取消') } } }) } // 檢查權限(需要攝像頭和錄音權限) check_has_permission(success?, failure?) { const scope_camera = 'scope.camera' const scope_record = 'scope.record' wx.getSetting({ success(res) { console.log(res) var authMap = res.authSetting; if (authMap[scope_camera] && authMap[scope_record]) { success && success() } else { failure && failure() } } }) } // 請求權限 request_permission() { return Promise.all([ new Promise<void>(function (r, j) { wx.authorize({ scope: 'scope.camera', success() { console.log('相機授權成功'); r() }, fail(e) { console.log('相機授權失敗', e); j() } }) }), new Promise<void>(function (r, j) { wx.authorize({ scope: 'scope.record', success() { console.log('錄音授權成功'); r() }, fail(e) { console.log('錄音授權失敗', e); j() } }) }), ]) }
執行申請權限並執行自己的業務邏輯
this.request_permission().then(() => { this.check_has_permission(() => { console.log('檢查授權成功') // 執行你的業務代碼 }) }, () => { console.log('檢查授權失敗')
this.open_permission_setting()
})
}
scope授權列表
scope | 對應接口 | 描述 |
---|---|---|
scope.userInfo | wx.getUserInfo | 用戶信息 |
scope.userLocation | wx.getLocation, wx.chooseLocation | 地理位置 |
scope.userLocationBackground | wx.startLocationUpdateBackground | 后台定位 |
scope.address | wx.chooseAddress | 通訊地址(已取消授權,可以直接調用對應接口) |
scope.invoiceTitle | wx.chooseInvoiceTitle | 發票抬頭(已取消授權,可以直接調用對應接口) |
scope.invoice | wx.chooseInvoice | 獲取發票(已取消授權,可以直接調用對應接口) |
scope.werun | wx.getWeRunData | 微信運動步數 |
scope.record | wx.startRecord | 錄音功能 |
scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 保存到相冊 |
scope.camera | camera 組件 | 攝像頭 |
授權截圖
點擊拒絕的情況,彈出申請權限modal,點擊確認可打開權限設置界面