在小程序开发的时候,我们总会遇到很多权限问题,比如摄像头权限,位置权限,用户信息权限等,如果不加以判断,很难给用户一个好的体验。
有一天,小明来参观一个拍照微信小程序。 他很感兴趣,看着精美的页面,忍不住点击了拍照按钮。 然而,他太兴奋了,以至于点击了错误的授权选项。 他选择了“拒绝❌”选项。 接下来无论点击多少次,拍照功能都无法打开。 年事已高、不懂手机权限设置的小明陷入了痛苦之中。
所以,正确的处理权限是个比较重要的事情。
文章目录
- 1:获取用户的授权设置
- 2:打开小程序的授权设置
- 3:主动拉起授权页
- 4:权限表
1:获取用户的授权设置
使用 wx.getSetting 可以获取用户已经同意的授权和拒绝的授权。
wx.getSetting({success: res => {if (scope) {resolve(res.authSetting[scope])} else {resolve(res.authSetting)}},fail: err => {reject(err)}
})
2:打开小程序的授权设置
在得知用户拒绝某个权限后,我们就可以调用 openSetting 帮助用户跳转到权限设置页面,免去了查找的麻烦。
再回调中我们可以做一些判断,判断用户是否正确的打开了相应权限。
wx.openSetting({success: res => {if (res.authSetting['scope.camera']) {// 正确的打开了摄像头权限// ......} else {// 未打开摄像头权限// ......}},fail: err => {// 出错}
})
3:主动拉起授权页
除此之外,其实还有一种情况,就是用户即没有同意也没有拒绝,这时候就需要主动拉起授权页了。
使用authorize可以实现这个功能。
wx.authorize({scope: 'scope.camera',success() {// 用户已经同意小程序使用摄像头// ......},fail() {// 用户拒绝授权}
})
这里还有个问题需要注意,就是我们怎么判断用户是既没有同意授权也没有拒绝授权的状态
当我们使用 wx.getSetting 获取用户授权权限扽时候会有个对象,比如:
{scope.address: true,scope.camera: undefined, // 用户既没有同意也没有拒绝scope.invoice: true,scope.invoiceTitle: true,scope.userInfo: true,
}
当其中某个值不是true也不是false,即为undefined的时候就可以判断用户处于未拒绝和未同意的状态。
4:权限表
具体权限表你可以访问 微信小程序权限表 进行查阅。