微信小程序拒绝授权后重新拉起授权窗口

授权

部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope ,用户选择对 scope 来进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。

此类接口调用时:
  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。

获取用户授权设置

开发者可以使用 wx.getSetting 获取用户当前的授权状态。

打开设置界面

用户可以在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。

提前发起授权请求

开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。

授权有效期

一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。

最佳实践

在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。

注意事项

  1. wx.authorize({scope: "scope.userInfo"}),不会弹出授权窗口,请使用 <button open-type="getUserInfo" />
  2. 需要授权 scope.userLocationscope.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('用户点击取消')
            }
        }
    })
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。