授权
部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个
scope
,用户选择对scope
来进行授权,当授权给一个scope
之后,其对应的所有接口都可以直接使用。此类接口调用时:
- 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
- 如果用户已授权,可以直接调用接口;
- 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
获取用户授权设置
开发者可以使用 wx.getSetting 获取用户当前的授权状态。
打开设置界面
用户可以在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。提前发起授权请求
开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。
授权有效期
一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。
最佳实践
在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。
注意事项
wx.authorize({scope: "scope.userInfo"})
,不会弹出授权窗口,请使用<button open-type="getUserInfo" />
- 需要授权
scope.userLocation
、scope.userLocationBackground
时必须配置地理位置用途说明。
示例代码:
// 获取用户的当前设置
wx.getSetting({
success: (res) => {
// 查询是否授权了录音
if (!res.authSetting['scope.record']) {
// 发起授权请求
wx.authorize({
scope: 'scope.record',
success: () => {
// 用户已同意,其他操作
},
fail: () => {
this.openConfirm() //如果拒绝,在这里进行再次获取授权的操作
}
})
} else {
// 用户已授权,其他操作
}
}
})
// 再次获取授权,引导客户手动授权
openConfirm() {
wx.showModal({
content: '检测到您没打开此小程序的录音权限,是否去设置打开?',
confirmText: "确认",
cancelText: "取消",
success: (res) => {
//点击“确认”时打开设置页面
if (res.confirm) {
wx.openSetting({
success: (res) => {}
})
} else {
console.log('用户点击取消')
}
}
})
}