用戶一鍵登陸,如何實現?瞭解一下!

點擊上方“芋道源碼”,選擇“設爲星標

管她前浪,還是後浪?

能浪的浪,纔是好浪!

每天 8:55 更新文章,每天掉億點點頭髮...

源碼精品專欄

 

來源:juejin.im/post/5d197adff265da1bb31c4fa9

  • 賬號、密碼登陸

    • 缺點

  • 手機號、驗證碼登陸

    • 缺點

  • 本機號碼認證

    • 一鍵登錄


我們先來看一下目前的一些登錄方式:

賬號、密碼登陸

使用賬號加密碼是最傳統的登錄方式,可以說是簡單粗暴的,一般也不會出現什麼問題。

缺點

但這種方式要求用戶要記住自己的賬號和密碼,也就是有一個記憶成本。用戶爲了降低記憶成本,很可能會在不同平臺使用同一套賬號密碼。從安全角度考慮,一旦某個平臺的賬號密碼泄露了,會連累到該用戶使用的其他平臺。

另外,由於賬號和個人身份無關,意味着同一個用戶可以註冊多個不同的賬號,也就是可能會有惡意註冊的情況發生。

爲解決這兩個問題,理想的情況就是使用一個和用戶身份強關聯的東西來作爲賬號。但用什麼呢?總不能拿身份證做賬號吧。

這個問題一直沒有一個好的回答,直到手機卡強制實名制。

手機號、驗證碼登陸

從手機卡實名制開始,手機號已經成爲我們的另一個身份證明。

使用手機號加驗證碼的登錄方式目前已經成爲主流,和輸入賬號密碼相比,它可以更好的驗證用戶身份,可以防止惡意註冊,用戶不用再去記自己的賬號密碼,增加了安全性。現在用戶也習慣並接受了這種登錄方式。

現在很多產品還把登錄和註冊的流程進行了結合,如果登錄時服務器發現手機號還未註冊,會直接用這個手機號註冊好再進行登錄,註冊過程對用戶是無感的,極大簡化了註冊流程。

缺點

這種登錄方式需要進行一系列的操作:輸入手機號、等待驗證碼短信、輸入驗證碼、點擊登錄。這整個流程走完可能需要 20 秒以上,操作也比較繁瑣。並且它是依賴短信網絡的,因爲如果收不到短信,也就登錄不了了。這些問題可能造成一部分用戶在註冊階段就流失了。

從安全角度考慮,還存在驗證碼泄漏的風險。如果有人知道了你的手機號,並且竊取到了驗證碼,那他也能登錄你的賬號了。

但回過頭來想一下,爲什麼我們需要驗證碼?驗證碼的作用就是確定這個手機號是你的,那除了使用短信,是否還有別的方式對手機號進行認證?

本機號碼認證

如果能獲取到當前使用的手機號,就能對用戶輸入的號碼進行驗證了。但出於安全考慮,客戶端是無法直接獲取到手機號的,運營商則可以通過 sim 卡數據查詢到。

現在運營商已經開放了相關的能力,現在我們可以在用戶輸入手機號後,通過調用運營商的接口,判斷用戶輸入的手機號是否和本地號碼一致。這樣一來,用戶就省去了等待驗證碼短信、輸入驗證碼的過程,也不受短信網絡的限制,簡化了登錄流程。

但再進一步想,如果運營商可以把當前的號碼直接返回給我們,而不只是用於驗證,那用戶連手機號都不需要填了。

於是,就有了今天的主角一鍵登錄。

一鍵登錄

獲取到當前手機使用的手機卡號,直接使用這個號碼進行登錄,這就是一鍵登錄。

這種登錄方式的好處是顯而易見的。它可以更方便、快捷地完成註冊、登錄流程,將原本可能需要 20 秒的流程,縮短到了 2 秒左右,很大程度上降低了登錄環節的用戶流失。

一鍵登錄能不能做,取決於運營商是否開放相關服務,這也是爲什麼過去沒有一鍵登錄,直到最近三大運營商都有了自己的開放平臺:

  • 移動 - 互聯網能力開放平臺

  • 電信 - 天翼賬號開放平臺

  • 聯通 - WO+ 開放平臺

要使用一鍵登錄,需要接入運營商的 SDK,三大運營商使用了同一套授權流程:

主要步驟如下:

  1. SDK 初始化

調用 SDK 的初始化方法,傳入項目在平臺上的 AppKey 和 AppSecret。

  1. 喚起授權頁

調用 SDK 喚起授權接口。SDK 會先向運營商發起獲取手機號掩碼的請求,請求成功後跳轉到授權頁。授權頁會顯示手機號掩碼以及運營商協議給用戶確認。

  1. 同意授權並登錄

用戶同意相關協議,點擊授權頁面的登錄按鈕,SDK 會請求本次取號的 token,請求成功後將 token 返回給客戶端。

  1. 取號

將獲取到的 token 發送到我們自己的服務器,由服務器攜帶 token 調用運營商一鍵登錄的接口,調用成功就返回手機號碼了。服務器用手機號進行登錄或註冊操作,返回操作結果給客戶端,完成一鍵登錄。

這裏需要把授權頁拎出來講一下,它一般長這樣:

授權頁是 SDK 裏定義的頁面,以安卓爲例,接入 SDK 後我們需要在 AndroidManifest 裏註冊好這個頁面。我們不能也不應該跳過授權頁面,未經用戶允許就獲取用戶手機號。

由於授權頁是第三方的頁面,我們無法自由修改頁面樣式,但 SDK 裏提供了足夠豐富的接口給我們自定義樣式。

前面說到,在授權頁顯示之前需要先請求到手機號掩碼,用於在授權頁展示。爲了增加授權頁的跳轉速度,減少用戶等待的時間,通常 SDK 會提供一個預取號的接口給我們,這個接口取的就是手機號掩碼。我們可以在打開 APP 的時候就調用這個接口,在已經取得掩碼的情況下,用戶點擊跳轉授權頁面就不需要再等待了。算是對用戶體驗的一個小優化。

在認證過程中,會把網絡切換爲移動蜂窩網絡,目前支持的制式有中國移動 2G/3G/4G、中國聯通 3G/4G、中國電信 4G。當然最好是使用 4G,使用 2G、3G 會降低認證的成功率。

在沒有插電話卡,或者關閉移動蜂窩網絡的情況下,是無法完成認證的。所以就算接入了一鍵登錄,我們也要兼容傳統的登錄方式,允許用戶在認證失敗的情況下,手動輸入手機號登錄。

三家運營商都擁有自己的 SDK,但各自的 SDK 不一定支持別家的認證。這導致目前許多接入了一鍵登錄的產品,只支持某一個運營商。

如果要兼容三大運營商,就需要分別接入三個 SDK。現在我們也有更簡單的方法,就是接入一個整合了三大運營商認證能力的第三方 SDK,目前主要有以下幾家:

  • 阿里 - 號碼認證服務

  • 極光 - 極光認證

  • mob - 秒驗

原理和使用方法基本都是一樣的,具體大家可以查看它們的文檔。

講一下我們比較關心的價格問題,我瞭解了運營商和上面提到那幾家的計價,認證一次的價格集中在 4 到 6 分錢不等,其中最便宜的是 mob 的秒驗。但價格可能會變化,這裏就不具體討論了。

一般是成功置換到手機號算一次計費,調用預取號接口和認證失敗,都是不計費的。

總的來說,一鍵登錄和發送驗證短信的價格差不多。發送短信是發送一條就計費一次,但用戶存在需要多次獲取驗證碼才能登錄成功的情況。而一鍵登錄能置換到手機號,基本就意味着登錄成功了。所以從次數上考慮,接入一鍵登錄應該還能稍微省一點。

目前,一鍵登錄處於剛起步的階段,運營商的認證服務還需要改進,對於用戶也還有一個被接受的過程。

但毫無疑問,一鍵登錄將會成爲未來的主流登陸方式之一。



歡迎加入我的知識星球,一起探討架構,交流源碼。加入方式,長按下方二維碼噢

已在知識星球更新源碼解析如下:

最近更新《芋道 SpringBoot 2.X 入門》系列,已經 20 餘篇,覆蓋了 MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內容。

提供近 3W 行代碼的 SpringBoot 示例,以及超 4W 行代碼的電商微服務項目。

獲取方式:點“在看”,關注公衆號並回復 666 領取,更多內容陸續奉上。

兄弟,一口,點個????

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章