小程序獲取用戶信息的api改了茫多,所以總結(jié)一下新的小程序獲取用戶信息的實(shí)現(xiàn)方式。
官方建議
最近更新于2018-10-25
step 1 只能使用button實(shí)現(xiàn) 彈框
<button open-type="getUserInfo" bindgetuserinfo='getU'>123</button>
點(diǎn)擊這個(gè)button才會(huì)跳出那個(gè)授權(quán)的框 :
如果用戶點(diǎn)了拒絕忽刽,那么下一次點(diǎn)擊還會(huì)跳出授權(quán)的彈窗天揖。如果用戶已經(jīng)同意些阅,那么再次點(diǎn)擊不會(huì)跳出彈框。但是依然會(huì)返回e.detail
step 2 handler
getU:function(e){
console.log(e,'eee')
console.log(e.detail.errMsg)
var status=e.detail.errMsg;//判斷拒絕還是同意的一個(gè)狀態(tài)
if(status=='getUserInfo:fail auth deny'){//此時(shí)用戶點(diǎn)擊了拒絕
}
if(status=='getUserInfo:ok'){//此時(shí)用戶點(diǎn)擊了同意授權(quán)
}
},
用戶點(diǎn)擊拒絕的處理方式可以有三種:
- 方式1:just 彈框提醒
if (status == 'getUserInfo:fail auth deny') {//此時(shí)用戶點(diǎn)擊了拒絕
wx.showToast({
title: '登陸失敗,請(qǐng)重新登陸',
icon:"none"
})
}
方式2:再跳出一個(gè)彈窗雪营,并且上邊增加一個(gè)getuserInfo的button然后來(lái)再次讓用戶點(diǎn)擊谴餐。
優(yōu)點(diǎn)是:用戶可以一氣呵成的操作,不至于走回頭路。
缺點(diǎn):寫代碼會(huì)更多一些器紧。方式3:通過(guò)
getSetting
與openSetting
讓用戶手動(dòng)去開掌腰。
step 3 用戶信息展示
- 方式一
<open-data type='userNickName'></open-data>
<open-data type='userAvatarUrl'></open-data>
以這樣的方式進(jìn)行信息的展示士飒,只要已經(jīng)授權(quán)了,任意位置都可以展示缓苛。寫樣式的時(shí)候只需要在外邊套一個(gè)view就可以來(lái)控制open-data
的樣式了。
- 方式二
bindgetuserinfo='getU'
在這個(gè)事件處理函數(shù)里邊會(huì)返回用戶的信息亦镶。
用戶點(diǎn)擊拒絕時(shí):
用戶點(diǎn)擊同意時(shí):
getU:function(e){
console.log(e,'eee')
console.log(e.detail.errMsg)
var status=e.detail.errMsg;//判斷拒絕還是同意的一個(gè)狀態(tài)
if(status=='getUserInfo:fail auth deny'){//此時(shí)用戶點(diǎn)擊了拒絕
}
if(status=='getUserInfo:ok'){//此時(shí)用戶點(diǎn)擊了同意授權(quán)
}
},
此時(shí)e.detail.rawData
內(nèi)含有我們需要展示的數(shù)據(jù)。現(xiàn)在已經(jīng)不需要了蜂绎,open-data
能直接展示坛吁。
此時(shí)e.detail
里的數(shù)據(jù)是需要傳給后臺(tái)去解密的數(shù)據(jù)玫膀,注冊(cè)用戶不需要用戶的那些信息嗎解阅?不需要,后臺(tái)可以自己去微信服務(wù)器拿。需要給后臺(tái)的數(shù)據(jù)只有e.detail.encryptedData
, e.detail.iv
琼梆,code
等。
登陸態(tài)維護(hù)
判斷用戶的登陸是否過(guò)期刽脖,過(guò)期后重新登陸,沒(méi)有過(guò)期那么就不需要再登陸曲管。
//檢查登陸態(tài)
wx.checkSession({
success() {
console.log("此時(shí)登陸態(tài)有效却邓,可以解析encryptedData")
},
fail() {
console.log("此時(shí)登陸態(tài)失效,需要重新登陸")
login.login(0)
}
})
用戶在使用的過(guò)程中會(huì)更換用戶頭像和用戶昵稱
為了在數(shù)據(jù)庫(kù)實(shí)時(shí)保存最新的昵稱和頭像,所以需要經(jīng)常性的登陸檬某。
每次都顯示最新的頭像現(xiàn)在已經(jīng)可以通過(guò)open-data
標(biāo)簽實(shí)現(xiàn)了漓踢。
所以,設(shè)定每隔一段時(shí)間去重新登陸做葵。
登陸的時(shí)候:wx.setStorageSync('timeStamp', new Date().getTime())
寫一個(gè)公共的方法來(lái)計(jì)算每隔3天:(想隔幾天就隔幾天
)
/**
* fun:計(jì)算時(shí)間差=當(dāng)前時(shí)間距離過(guò)去儲(chǔ)存的某個(gè)時(shí)間戳的天數(shù)
* param: timestamp 過(guò)去某個(gè)時(shí)間的時(shí)間戳
*/
function GetDayNum(timestamp) {
let time = new Date().getTime();
let timeDiff = time - timestamp;
let dayNum = timeDiff / (1000 * 60 * 60 * 24)
return dayNum;
}
module.exports = {
GetDayNum: GetDayNum,
}
然后在頁(yè)面的onload中就可以寫上:
//用戶已經(jīng)登陸并且三天之內(nèi)登陸的之众,會(huì)主動(dòng)跳轉(zhuǎn),否則就得重新登陸了
if (wx.getStorageSync("userId") && time.GetDayNum(wx.getStorageSync("timeStamp")) < 3){
wx.switchTab({
url: '/pages/weekCourse/weekCourse'
})
}
userId這個(gè)緩存是用來(lái)確定用戶是否登陸過(guò)的依许, 其實(shí)想叫什么名字都可以棺禾,只要能讓后臺(tái)確定是唯一的這個(gè)用戶就好。
至此峭跳,獲取用戶信息升級(jí)完成膘婶。
本文遵守知識(shí)共享協(xié)議:署名-非商業(yè)性使用-相同方式共享 (BY-NC-SA)及簡(jiǎn)書協(xié)議