一篇搞明白微信小程序的基本授权功能

2024-04-09 1397阅读
一、介绍

        由于部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope ,

用户选择对 scope 来进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。

此类接口调用时:

  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。
    二、使用
            1.首先就是获取用户授权设置 wx.getSetting

    通过此接口我们能够查看到,当前有哪些功能授权过了,能够直接使用,调用成功输出结果如下:

    一篇搞明白微信小程序的基本授权功能

             2.下一步我们只需要判断结果中 authSetting 是否存在某 scope.功能即可,具体代码如下:

    这里以相机为例:

    wx.getSetting({
            success(res) {
                /* 授权配置不存在摄像头 */
                if (!res.authSetting['scope.camera']) {
                    /* 如果不存在  先进行弹出框授权 */
                    wx.authorize({
                        scope: 'scope.camera',
                        success() {
                            /* 授权成功直接调用相机拍照 */
                            that.chooseMedia()
                        }
                    })
                } else {
                    /* 已经授权完毕可以直接使用喽 */
                    that.chooseMedia()
                }
            }
        })

     授权可以有两种方式:

            1.弹出框授权----用户体验较好,通过弹出框的形式,让用户进行授权,如图所示:

    一篇搞明白微信小程序的基本授权功能

            2.设置页面授权----如果我们用的是第一种方式,用户拒绝授权,将不再进行弹出框,而是需要自行去设置页面进行同意授权,这种方式调用结果也是打开设置页面进行同意授权,现在打开设置页也是三种方式

            (1)  button 按钮的 open-type 属性

    打开设置页

            (2) 引导用户点击行为触发    wx.openSetting 接口的调用,打开设置页面

    wx.openSetting({
      success (res) {
        res.authSetting = {
           "scope.camera": true,
        }
      }
    })

           (3) 用户也可以主动在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态.

    一篇搞明白微信小程序的基本授权功能

    一篇搞明白微信小程序的基本授权功能

    一篇搞明白微信小程序的基本授权功能

            3.最后一步就是授权成功可以使用该功能,进行下一步的业务操作
    三、具体案例:

            主要使用弹出框授权

            1.相机授权,直接上代码:
    ------相机授权------
    /* 点击拍照 */
    photo() {
        const that = this
        /* 打开授权设置 */
        wx.getSetting({
            success(res) {
                /* 授权配置不存在摄像头 */
                if (!res.authSetting['scope.camera']) {
                    /* 如果不存在  先进行弹出框授权 */
                    wx.authorize({
                        scope: 'scope.camera',
                        success() {
                            /* 授权成功直接调用相机拍照/本地图库 */
                            that.chooseMedia()
                        }
                    })
                } else {
                    /* 已经授权完毕可以直接使用喽 */
                    that.chooseMedia()
                }
            }
        })
    },
    /* 调用媒体工具 */
    chooseMedia() {
        const that = this
        wx.chooseMedia({
            mediaType: ['image'], //媒体类型可以是视频或者照片等其他
            sourceType: ['album'], // 指定拍照或相册选择,可选值:camera、album,默认为album   album 指的是图库
            /* maxDuration: 60,  */ // 视频最大时长,单位为秒,默认值为60秒 
            camera: 'back', // 默认使用后置摄像头,可选值:front、back,默认值为back 
            /* sizeType 是否选择压缩图片*/
            success(res) {
                // 选择视频成功,返回选定视频的临时路径和文件名 
                console.log(res)
                const tempFilePath = res.tempFiles[0].tempFilePath
                // 在页面上显示选择的视频 或者 图片
                that.setData({
                    imgUrl: tempFilePath,
                })
            }
        })
    }
             2.录音授权(接口调整---现在使用 wx.getRecorderManager() 获取全局唯一的录音管理能够实现)
    /* 打开麦克风 */
    openRecord() {
        const that = this
        /* 打开授权设置 */
        wx.getSetting({
            success(res) {
                /* 授权配置不存在麦克风权限 */
                if (!res.authSetting['scope.record']) {
                    /* 如果不存在  先进行弹出框授权 */
                    wx.authorize({
                        scope: 'scope.record',
                        success() {
                            /* 授权成功直接调用麦克风 */
                             wx.startRecord({
                                success (res) {
                                    //录音文件的临时路径
                                    const tempFilePath = res.tempFilePath
                                }
                            })
                            //结束录音
                            setTimeout(function () {
                                  wx.stopRecord()
                            }, 10000)
                        }
                    })
                } else {
                    /* 已经授权完毕可以直接使用 */
                    wx.startRecord({
                       success (res) {
                           //录音文件的临时路径
                           const tempFilePath = res.tempFilePath
                       }
                    })
                }
            }
        })
    },
    
            3.地理位置授权已在定位功能中讲解,具体可查看

    [小程序]定位功能实现-CSDN博客

            4.蓝牙授权(一般像共享单车这种需要连接开启蓝牙设备)
    openbluetooth() {
            const that = this
            /* 打开授权设置 */
            wx.getSetting({
                success(res) {
                    /* 授权配置不存在蓝牙权限 */
                    if (!res.authSetting['scope.bluetooth']) {
                        /* 如果不存在  先进行弹出框授权 */
                        wx.authorize({
                            scope: 'scope.bluetooth',
                            success() {
                                /* 授权成功之后可以进行下一步的操作 */
                            }
                        })
                    } else {
                        /* 已经授权完毕可以直接进行下一步 */
                    }
                }
            })
        },

    我们可以在后续的操作中调用以下 api,具体可查看.

    设备 / 蓝牙-通用 / wx.openBluetoothAdapter (qq.com)

    wx.openBluetoothAdapter()  //初始化蓝牙模块
    wx.onBluetoothAdapterStateChange(function listener)  //监听蓝牙适配器状态变化事件
            5.添加到相册
    openWritePhotosAlbum() {
            const that = this
            /* 打开授权设置 */
            wx.getSetting({
                success(res) {
                    /* 授权配置不存在该权限 */
                    if (!res.authSetting['scope.writePhotosAlbum']) {
                        /* 如果不存在  先进行弹出框授权 */
                        wx.authorize({
                            scope: 'scope.writePhotosAlbum',
                            success() {
                                /* 授权成功之后 调用保存相册到本地系统的接口 */
                                that.saveMedia()
                            }
                        })
                    } else {
                        /* 已经授权完毕可以直接进行下一步 */
                        that.saveMedia()  //保存图片到本地系统
                    }        
                }
            })
    }
    saveMedia(){
        //可以是临时文件路径也可以是永久文件路径 (本地路径)
        //保存图片到本地系统
        wx.saveImageToPhotosAlbum({
          filePath: '文件路径',
          success(res) { 
             console.log(res.errMsg) 
          }
        })
        //保存视频到本地系统
        wx.saveVideoToPhotosAlbum({
          filePath: '文件路径',
          success (res) {
            console.log(res.errMsg)
        }
    })
    }
    
            6.添加到联系人
    openaddPhoneContact() {
            const that = this
            /* 打开授权设置 */
            wx.getSetting({
                success(res) {
                    /* 授权配置不存在该权限 */
                    if (!res.authSetting['scope.addPhoneContact']) {
                        /* 如果不存在  先进行弹出框授权 */
                        wx.authorize({
                            scope: 'scope.addPhoneContact',
                            success() {
                                /* 授权成功之后  */
                                //添加手机通讯录联系人。
                                //用户可以选择将该表单以「新增联系人」或「添加到已有联系人」的方    
                                式,写入手机系统通讯录
                                wx.addPhoneContact({
                                    firstName: '名字',  //必填项
                                    success(res){}
                                      
                                })
                            }
                        })
                    } else {
                        /* 已经授权完毕可以直接进行下一步 */
                        //添加手机通讯录联系人。
                        //用户可以选择将该表单以「新增联系人」或「添加到已有联系人」的方式,写入手                
                        机系统通讯录
                        wx.addPhoneContact({
                           firstName: '名字',  //必填项
                           success(res){}       
                        })
                    }        
                }
            })
    }
    
            7.添加到日历(真实场景不常用,方法和 6一样)
            8.微信运动和获取个人信息下一篇讲到
    四、注意事项
            1.授权有效期

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

            2.使用时机

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

          

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]