微信小程序授权处理
微信小程序授权处理
1.授权
部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope ,用户选择对 scope 来进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。
2.获取用户授权设置
开发者可以使用 wx.getSetting 获取用户当前的授权状态。
3.打开设置界面
用户可以在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。
注意:该授权状态为小程序的授权状态,不是微信系统的授权状态
4.提前发起授权请求
开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。
scope 参数列表可参照:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-%E5%88%97%E8%A1%A8
在app.vue中全局引入
/* 判断小程序是否授权 options = { scope: 'record', //授权类型 content: '请前往设置页打开麦克风', //内容 } */ getSettingRecord(options = { scope: 'record', content: '请前往设置页打开麦克风' }) { var self = this; var scopeStr = ''; if (options.scope.indexOf('scope.') != -1) { scopeStr = options.scope; } else { scopeStr = 'scope.' + options.scope; } // #ifdef MP return new Promise((resolve, reject) => { uni.getSetting({ success: (res) => { self.globalData.settingInfo = res.authSetting; let auth = res.authSetting[scopeStr] console.warn('scope.record=', auth, typeof auth) if (auth === true) { // 用户已经同意授权 resolve(true) } else if (auth === undefined) { // 首次发起授权 uni.authorize({ scope: scopeStr, success() { resolve(true) }, fail(res) {} }) } else if (auth === false) { // 非首次发起授权,用户拒绝过 => 弹出提示对话框 uni.showModal({ title: '授权提示', content: options.content, success: (tipRes) => { if (tipRes.confirm) { wx.openSetting({ success: (settingRes) => { if (settingRes.authSetting[ scopeStr]) { resolve(true) } console.warn('settingRes', settingRes) }, }) } } }) } }, }) }) // #endif },
使用
var opt = { scope: 'camera', content: '收集你选中的照片或视频信息,用于方便在群聊时发送图片或者视频。' } app.getSettingRecord(opt).then((data) => { uni.chooseVideo({ sourceType: ['album', 'camera'], // 来源相册或者拍摄 maxDuration: 60, // 设置最长时间60s camera: 'back', // 后置摄像头 success(res) { console.log(res) } }) })
在 2023年9月15日之后,微信小程序需要添加用户隐私保护授权,才能使用微信接口。如果已用户隐私保护授权且微信接口授权后还是调用失败。别慌!只需去微信小程序后台更新一下用户隐私保护指引就可以了
添加用户隐私授权弹窗:https://www.cnblogs.com/czhowe/p/17848655.html

效果:
注意:当系统中微信的没有授权时,即时小程序授权也无法生效


浙公网安备 33010602011771号