1. 程式人生 > >微信小程式之重新調起授權

微信小程式之重新調起授權

起源

  • 在做小程式時授權問題是少不了的,可有時候總有人會點選拒絕授權,那我們開發拿不到需要的資料是不是很苦惱呢?我在自己正在做的小程式裡使用了一種方法,現在分享出來~~
  • 我的這個demo是個人資訊+地理位置的雙重授權

思路

  • 要麼授權通過,進入首頁
  • 要麼拒絕授權,停留在有授權入口的頁面
  • 需要設定一個標誌值:authorizeInfo,根據此值得真假來決定是渲染首頁還是渲染顯示重新授權的頁面。

過程

在頁面顯示的時候,獲取使用者資訊與地理位置(當然,這是我所需要的)

// userInfo
    wx.getUserInfo({
      success:res=>{
        this
.setData({userInfo : true}) }, fail:res=>{ this.setData({ userInfo: false }) } }) // locationInfo wx.getLocation({ success: res => { this.setData({ locationInfo: true }) }, fail: res => { this.setData({ locationInfo: false
}) } })

authorizeInfo的設定就要依靠剛剛獲取的這兩個值了,設定定時器不斷執行authorizeInfo,直到userInfolocationInfo兩個值都為true就把定時器清除(設定定時器是因為剛開始獲取userInfolocationInfo可能會失敗),當兩者都為真時表示所有授權均已通過,跳轉至首頁。否則,將會一直停留在授權頁。

//all authorize 
    let timer = setInterval(() => {
      this.authorizeInfo();
      if (this.data.userInfo && this
.data.locationInfo){ clearInterval(timer) } }, 100)
  //authorizeInfo
  authorizeInfo: function(){
    if (this.data.userInfo && this.data.locationInfo) {
      this.setData({ authorizeInfo: true })
      //reLaunch
      wx.reLaunch({
        url: '/pages/index/index'
      })

    } else {
      this.setData({ authorizeInfo: false })
    }
  }

而重新授權這個操作需要呼叫wx.openSetting這個介面,通過返回值判斷,使用者再次呼叫授權操作後是否全部授權,是的話跳轉至首頁,否則停留在授權頁。

//toAuthorize
  toAuthorize:function(){
    //重新調起授權
    wx.openSetting({
      success: (res) => {
        if (res.authSetting["scope.userInfo"] && res.authSetting["scope.userLocation"]) {
          this.setData({ authorizeInfo: true })
          //reLaunch
          wx.reLaunch({
            url: '/pages/index/index'
          })
        }else{
          this.setData({ authorizeInfo: false })
        }
      },
      fail: (res) => {
        console.log("授權失敗")
      }
    })

使用方法

  • 我的這個demo是個人資訊加地理位置的雙重授權
  • pages下的authorize資料夾是可以拿來直接用的 複製貼上到你的pages下就可以了
  • 原始碼請移步GitHub >>>>>>> 戳我去看原始碼

個人連結