微信小程式之重新調起授權
阿新 • • 發佈:2018-12-31
起源
- 在做小程式時授權問題是少不了的,可有時候總有人會點選拒絕授權,那我們開發拿不到需要的資料是不是很苦惱呢?我在自己正在做的小程式裡使用了一種方法,現在分享出來~~
- 我的這個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
,直到userInfo
和locationInfo
兩個值都為true
就把定時器清除(設定定時器是因為剛開始獲取userInfo
和locationInfo
可能會失敗),當兩者都為真時表示所有授權均已通過,跳轉至首頁。否則,將會一直停留在授權頁。
//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 >>>>>>> 戳我去看原始碼