• 小程序授权


    小程序授权

    授权

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

    此类接口调用时:

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

    获取用户授权设置

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

    打开设置界面

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

    开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。

    提前发起授权请求

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

    scope 列表

    scope 对应接口 描述
    scope.userInfo wx.getUserInfo 用户信息
    scope.userLocation wx.getLocation, wx.chooseLocation 地理位置
    scope.userLocationBackground wx.startLocationUpdateBackground 后台定位
    scope.address wx.chooseAddress 通讯地址
    scope.invoiceTitle wx.chooseInvoiceTitle 发票抬头
    scope.invoice wx.chooseInvoice 获取发票
    scope.werun wx.getWeRunData 微信运动步数
    scope.record wx.startRecord 录音功能
    scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 保存到相册
    scope.camera camera 组件 摄像头

    授权有效期

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

    最佳实践

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

    注意事项

    1. wx.authorize({scope: "scope.userInfo"}),不会弹出授权窗口,请使用 <utton open-type="getUserInfo"/>
    2. 需要授权 scope.userLocationscope.userLocationBackground 时必须配置地理位置用途说明


    示例代码 1

    定义一个录音点击按钮

      lu:function(){
        // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
        wx.getSetting({
          success(res) {
            if (!res.authSetting['scope.record']) {
              wx.authorize({
                scope: 'scope.record',
                success() {
                  // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
                  wx.startRecord()
                },fail(){
                  console.log("你没有允许授权")
                }
              })
            }else{
              wx.startRecord({
                
              })
            }
          }
        })
      }
    

    用户信息

    wxml

    <button bindgetuserinfo="user1" open-type="getUserInfo">用户信息</button>
    

    js

      user1: function () {
        // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
        wx.getSetting({
          success(res) {
            if (!res.authSetting['scope.userInfo']) {
              wx.authorize({
                scope: 'scope.userInfo',
                success() {
                }
              })
            }
          }
        })
      }
    })
    

    用户信息

      user1: function () {
        // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
        wx.getSetting({
          success(res) {
            if (res.authSetting['scope.userInfo']) {
    
              wx.getUserInfo({
                success: (res) => {
                  console.log("res", res)
                },
              })
            }
          }
        })
      },
    

    总结

    1 因为部分功能需要用同意后才能使用。
    
    2 wx.getSetting来判断该用户有没有对接口授权,我判断哪个接口,就必须给wx.getSetting传对应的scope值
    - 一个scope值对应这个一个或多个接口
    
    3 如果我们重wx.getSetting中发现scope值是false,标识没有授权,我们可以通过wx.authorize发起授权,对那个接口授权,就给wx.authorize传对应scope值就可以了。如果用用户同意授权,就可以直接使用对应的接口了。
    
    4 但是scope.userInfo没有办法使用wx.authorize自动弹起弹框。必须要用户手动点击按钮唤起授权弹框。
    代码格式:
    	<button open-type="getUserInfo" bindgetuserinfo="user1">用户信息</button>
    	我们可以再响应函数的参数中获取用户信息。e.detail,这个和直接调用wx.getUserInfo获取的内容一样。
    
  • 相关阅读:
    Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1288372549423476738' for key 'PRIMARY'
    环形数组循环
    less命令
    ln命令
    Vue中$refs的理解
    cut命令
    除数博弈
    find命令
    file命令
    最长公共前缀
  • 原文地址:https://www.cnblogs.com/kai-/p/12481857.html
Copyright © 2020-2023  润新知