微信小程序调用需要授权的api的判断流程(wx.p.getLocation为例)

288 阅读1分钟

直接上代码

async getLocationF() {
        // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
        const scope = await wx.p.getSetting()
        // 判断权限
        if (scope.authSetting['scope.userLocation'] == undefined) {
            // **如果用户没有设置过该(地理位置)授权**
            // 直接调用对应的api则会在本页面设置是否授权;如果允许,则会在api调用成功后打印数据
            const location = await wx.p.getLocation()
            console.log(location, '1')
        } else if (scope.authSetting['scope.userLocation']) {
            // **已经授权**
            // 调用对应api成功后直接打印数据
            const location = await wx.p.getLocation()
            console.log(location, '2')
        } else {
            // **不授权**
            // 调起客户端小程序设置界面,设置界面只会出现小程序已经向用户请求过的权限
            const setting = await wx.p.openSetting()
            // 返回用户设置的操作结果,判断这次设置是否授权
            if (setting.authSetting['scope.userLocation']) {
                // 如果授权,则直接调用对应api成功后会打印数据
                const location = await wx.p.getLocation()
                console.log(location, '3')
            } else {
                console.log('请先授权')
            }
        }
    }

图文说明:调用 wx.p.getSetting(),通过返回值判断会用3种情况

情况1:从来没有设置过该授权

  • 调用 wx.p.getSetting()会拉起 QQ图片20220827043326.png
  • 点击允许api调用成功后会拿到相关数据

QQ图片20220827043614.png

情况2:拒绝授权

  • 拒绝授权后,再想直接获取数据是不行的,需要调用wx.p.openSetting()去设置页面设置授权

QQ图片20220827044203.png

  • 允许授权后,调用wx.p.getSetting()成功后会直接打印相关数据

情况3:已经允许授权

  • 则调用wx.p.getSetting()则会在成功后直接获取到相关数据,不需要再次操作授权,所有以下页面不会再有,而是直接拿到数据 QQ图片20220827043326.png

相关api说明

名称简单描述用法参考
wx.getLocation()获取当前的地理位置、速度[ wx.getLocation(Object object)]
wx.getSetting()获取用户的当前设置[wx.getSetting(Object object)]
wx.openSetting()调起客户端小程序设置界面[wx.openSetting(Object object)]