1流纹、獲取用戶信息的授權(quán)
如果小程序中需要在所有業(yè)務(wù)邏輯之前,需要獲取用戶的信息薄霜。那么我們第一件事就是獲取授權(quán)某抓,拿到userinfo纸兔。
上圖是微信開發(fā)者文檔的說(shuō)法,我們獲取用戶信息的授權(quán)時(shí)否副,必須是在button按鈕的基礎(chǔ)上汉矿,也就是說(shuō),用戶信息授權(quán)無(wú)法自動(dòng)彈出授權(quán)框备禀,需要在用戶點(diǎn)擊的基礎(chǔ)上洲拇,才能彈出授權(quán)框。
我的解決方案是曲尸,在首頁(yè)的onshow的生命周期函數(shù)里判斷用戶是否授權(quán)赋续,如果沒有授權(quán),就跳到授權(quán)的頁(yè)面队腐,如果是已經(jīng)授權(quán)過(guò)的就執(zhí)行首頁(yè)的業(yè)務(wù)邏輯蚕捉,進(jìn)行頁(yè)面渲染。那么是怎么判斷用戶是否進(jìn)行過(guò)授權(quán)呢柴淘。我用的方法是迫淹,用本地緩存,當(dāng)用戶第一次進(jìn)入的時(shí)候为严,在首頁(yè)判斷本地緩存里是否有用戶信息敛熬,如果有就進(jìn)行首頁(yè)的邏輯,如果沒有就跳到授權(quán)的頁(yè)面第股。在授權(quán)的頁(yè)面進(jìn)行用戶點(diǎn)擊授權(quán)应民。至于如何授權(quán)獲取用戶信息的,微信提供了一個(gè)button按鈕,里有一個(gè)open-type=‘getUserInfo’的屬性夕吻,可以授權(quán)獲取用戶信息诲锹。它提供了一個(gè)屬性函數(shù)。
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo" class='shouquan_button'>
這個(gè)屬性函數(shù)涉馅,當(dāng)用戶點(diǎn)擊的時(shí)候我們可以拿到回調(diào)里的信息归园。然后在用戶同意授權(quán)的時(shí)候,把用戶的信息存到本地稚矿。同時(shí)返回到首頁(yè)庸诱。
getUserInfo: function (e) {
var obj = {};
if(e.detail.userInfo){
console.log(e.detail.userInfo);
//如果用戶同意授權(quán),把授權(quán)返回的用戶信息存到本地
wx.setStorageSync('userInfo', e.detail.userInfo);
obj.avatarUrl = e.detail.userInfo.avatarUrl;
obj.nickName = e.detail.userInfo.nickName;
obj.gender = e.detail.userInfo.gender;
//登錄
wx.login({
success: res => {
// 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId
if(res.code){
wx.setStorageSync('code', res.code);
obj.code = res.code;
api.Api('userlogin',obj,function(res){
console.log(JSON.stringify(res.data.s));
if(res.data.s){
wx.setStorageSync('loginInfo', res.data.d);
wx.redirectTo({
url: '/pages/index/index',
})
}else{
wx.showToast({
title: res.data.m,
icon: 'none',
})
}
})
}else{
wx.showToast({
title: '登錄失斘畲А桥爽!' + res.data.errMsg,
icon: 'none',
})
}
}
})
}
}
這樣就解決了用戶授權(quán)用戶信息的問(wèn)題。但是還有一個(gè)問(wèn)題被遺忘了昧识,就是在首頁(yè)的onshow里钠四,判斷的邏輯,那么就意味著我在判斷是否授權(quán)的同時(shí)跪楞,頁(yè)面已經(jīng)被渲染了形导,業(yè)務(wù)邏輯一直在跑的過(guò)程环疼。這個(gè)是個(gè)問(wèn)題。
于是朵耕,我在首頁(yè)的最大的view標(biāo)簽里炫隶,加了一個(gè)wx.if="{{shouquan}}" 同時(shí)在pages:data里設(shè)置為false,在onshow里判斷如果存在用戶信息阎曹,就為true伪阶,否則為false。這個(gè)頁(yè)面就不會(huì)提前渲染了处嫌,除非用戶同意了授權(quán)栅贴。
2、普通的授權(quán)
除了獲取用戶信息的授權(quán)以外熏迹,其他的授權(quán)檐薯,比如像:獲取地理位置,錄音注暗,保存到相冊(cè)等等坛缕。都可以使用wx.getSetting()獲取授權(quán)。
wx.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
//如果是沒有獲取過(guò)用戶保存到相冊(cè)的授權(quán)
wx.authorize({
scope: 'scope.writePhotosAlbum',
success() {
//用戶同意授權(quán)捆昏,進(jìn)行的業(yè)務(wù)邏輯
},
fail(errMsg){ wx.showToast({ title: errMsg, })//用戶拒絕授權(quán) }
})
}else{
//如果是獲取過(guò)用戶保存到相冊(cè)的授權(quán)赚楚,進(jìn)行業(yè)務(wù)邏輯
}
}
});