您好,登錄后才能下訂單哦!
聊聊小程序的登錄邏輯
一直聊的都是客戶運營方面的話題,畢竟斗金客戶運營系統小程序產品是依靠技術實現的,今天來聊聊大家都能感知到的小程序登錄問題吧,大家可能都碰到過很多小程序剛打開就要求授權獲取信息之類的煩人彈框,如果點拒絕后續有些功能沒法用,用戶覺得產品好想再同意又找不到地方,這樣做其實用戶體驗非常差。
微信小程序官方也發現了這個問題,其實與他們最初接口設計不太合理也有一定關系,所以 18年4月份官方對獲取用戶信息的 wx.getUserInfo 接口 進行了調整。雖然這方面文章網上也有不少,但在實際中,仍有很多產品把這塊沒實現好。要么彈出授權框,要么安全性上處理的不好,或多或少存在一些問題。今天借此機會分享一下斗金客戶運營系統小程序在開發中的一些心得體會或收獲吧。
如何設計好小程序登錄流程呢?有關產品設計方面的問題及關于用戶體系產品架構方面的問題不做過多展開討論。只討論小程序的登錄,且只討論沒有自己的用戶體系,不存在綁定賬號等操作,完全借助微信用戶體系的設計和開發邏輯。文中涉及的一些專有名詞大家可以參考微信官方文檔尋求解釋。
我們做登錄流程設計的原則是,在保證良好用戶體驗的情況下做好安全性設計工作。
首先在小程序啟動時,不要彈出任何需要授權的彈框,有些文章說在啟動 onLanuch時可以通過wx.login靜默獲取用戶openid在數據庫建立用戶信息,我個人覺得這也是不可取的,這樣做的話很多僅僅只是打開小程序而非目標用戶的人也會被數據庫記錄,數據庫冗余的垃圾數據就非常多。用戶打開小程序后不做任何干擾,讓他正常查看使用,只是在用戶做敏感操作比如支付、查看余額、查看我的訂單、查看我的拼團、查看我的優惠券、領優惠券、參加拼團等需要登錄操作時才進行登錄。首先判斷localStorage是否存在自定義登錄態,如果存在則wx.checkSession檢查微信服務器上的登錄態,如果有效則為真正的已登錄允許繼續做敏感操作;如果localStorage存在登錄態,但是wx.checkSession過期,則重新調用wx.login獲取session_key和openid(只更新session_key即可),然后返回給小程序自定義登錄態并更新本地localStorage,在用戶無感知的情況下進行了更新登錄態;如果localStorage不存在自定義登錄態,則提示用戶需要登錄并跳轉到個人中心頁面,等用戶點擊個人中心的“授權登錄”按鈕時進行下一步操作。
用戶點擊 “授權登錄”時(提前先先靜默調用wx.login接口獲取session_key和openid)獲取用戶微信綁定的手機號,如果數據庫表中同一條記錄存在該手機號和openid,則直接更新session_key并返回登錄態到本地localStorage即可;如果數據庫表中不存在該手機號和openid,則插入一條記錄(相當于注冊)并返回登錄態到本地localStorage;如果數據庫表中同一條記錄只存在手機號或只存在openid,則提示用戶登錄失敗需要聯系管理員處理。登錄以后用戶如果獲取過頭像、昵稱等信息則進行展示,如果是初次登錄或沒有獲取過頭像昵稱,則用戶點擊默認頭像或昵稱時調用 wx.getUserInfo 接口獲取用戶頭像昵稱等信息進行插入數據庫表并展示。
最佳實踐,由于用戶可能會更改自己的微信頭像和昵稱,應該定時比如用戶點擊個人中心 Tab時使用wx.getSetting獲取用戶的授權情況,如果用戶已經授權,直接調用 wx.getUserInfo接口獲取用戶的最新信息進行更新和展示。
上圖是微信小程序官方的一張登錄流程圖,在圖中官方建議開發者用隨機數作為自定義登錄態。這樣必須和 session_key建立關聯關系,這里的隨機數非常像SessionID。對于使用token機制的開發者其實也是可以的,通過用戶ID來進行用戶身份識別,不用隨機數減少了頻繁更新數據庫表中自定義登錄態的操作。
如有不明白或不清晰的地方歡迎交流,如果有錯誤,還請指正。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。