微信小程序之受權 wx.authorize

1、 wx.authorize(Object object)

提早向用戶發起受權請求。調用後會馬上彈窗詢問用戶是否贊成受權小程序使用某項功能或獲取用戶的某些數據,但不會實際調用對應接口。若是用戶以前已經贊成受權,則不會出現彈窗,直接返回成功。html

  • 用戶能夠受權的
    scope 包括:
scope 對應接口 描述
scope.userInfo wx.getUserInfo 用戶信息
scope.userLocation wx.getLocation, wx.chooseLocation, wx.openLocation 地理位置
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 組件 攝像頭

注意:上述接口中,wx.authorize({scope: "scope.userInfo"}),沒法彈出受權窗口,使用 button 組件,並將 open-type 指定爲 getUserInfo 類型,獲取用戶基本信息。https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01小程序

2、 wx.authorize 用法

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
  }
})

若是用戶已經受權過 地理位置,上面代碼則會返回:"scope.userInfo": trueapi

  • 向用戶發起受權請求
// 能夠經過 wx.getSetting 先查詢一下用戶是否受權了 "scope.record" 這個 scope

wx.getSetting({
  success(res) {
    if (!res.authSetting['scope.record']) {
      wx.authorize({
        scope: 'scope.record',
        success () {
          // 用戶已經贊成小程序使用錄音功能,後續調用 wx.startRecord 接口不會彈窗詢問
          wx.startRecord()
        }
      })
    }
  }
})

3、 注意

  • 微信中使用 wx.getUserInfo 接口直接彈出受權框的開發方式將逐步再也不支持。
  • 因此在用戶未受權的狀況下,在 onload 函數中使用 wx.getUserInfo 是默認失敗的, 以下:
onLoad: function (options) { 
    // 只有在用戶已經受權後,才能在 onload 函數中獲取到用戶信息
    // 因此,下面經過 wx.getSetting 檢查用戶是否已經受權,
    // 若是沒有受權,則中止執行
    // 若是已經受權,則繼續執行success 
    wx.getSetting({
      success (res){
        if (res.authSetting['scope.userInfo']) {
          // 已經受權,能夠直接調用 getUserInfo 獲取頭像暱稱
          wx.getUserInfo({
            success: function(res) { 
              console.log(res.userInfo)
            }
          })
        }
      }
    })
},
  • 建議使用 button 組件,並將 open-type 指定爲 getUserInfo 類型,經過點擊事件獲取用戶基本信息。微信

  • 代碼以下:ide

wxml:函數

<button open-type="getUserInfo" bindgetuserinfo='getUser'>獲取用戶信息(受權登陸)</button>

js:this

getUser(e) { 
    console.log(e)
    wx.getUserInfo({
        success: (res) => {
            console.log(res)
            this.setData({
                userInfo: res.userInfo
            });
        }
    })
}
相關文章
相關標籤/搜索