咱們先來看一下目前的一些登陸方式。html
使用帳號加密碼是最傳統的登陸方式,能夠說是簡單粗暴的,通常也不會出現什麼問題。安全
但這種方式要求用戶要記住本身的帳號和密碼,也就是有一個記憶成本。用戶爲了下降記憶成本,極可能會在不一樣平臺使用同一套帳號密碼。從安全角度考慮,一旦某個平臺的帳號密碼泄露了,會連累到該用戶使用的其餘平臺。服務器
另外,因爲帳號和我的身份無關,意味着同一個用戶能夠註冊多個不一樣的帳號,也就是可能會有惡意註冊的狀況發生。網絡
爲解決這兩個問題,理想的狀況就是使用一個和用戶身份強關聯的東西來做爲帳號。但用什麼呢?總不能拿身份證作帳號吧。ide
這個問題一直沒有一個好的回答,直到手機卡強制實名制。優化
從手機卡實名制開始,手機號已經成爲咱們的另外一個身份證實。加密
使用手機號加驗證碼的登陸方式目前已經成爲主流,和輸入帳號密碼相比,它能夠更好的驗證用戶身份,能夠防止惡意註冊,用戶不用再去記本身的帳號密碼,增長了安全性。如今用戶也習慣並接受了這種登陸方式。3d
如今不少產品還把登陸和註冊的流程進行告終合,若是登陸時服務器發現手機號還未註冊,會直接用這個手機號註冊好再進行登陸,註冊過程對用戶是無感的,極大簡化了註冊流程。cdn
這種登陸方式須要進行一系列的操做:輸入手機號、等待驗證碼短信、輸入驗證碼、點擊登陸。這整個流程走完可能須要 20 秒以上,操做也比較繁瑣。而且它是依賴短信網絡的,由於若是收不到短信,也就登陸不了了。這些問題可能形成一部分用戶在註冊階段就流失了。htm
從安全角度考慮,還存在驗證碼泄漏的風險。若是有人知道了你的手機號,而且竊取到了驗證碼,那他也能登陸你的帳號了。
但回過頭來想一下,爲何咱們須要驗證碼?驗證碼的做用就是肯定這個手機號是你的,那除了使用短信,是否還有別的方式對手機號進行認證?
若是能獲取到當前使用的手機號,就能對用戶輸入的號碼進行驗證了。但出於安全考慮,客戶端是沒法直接獲取到手機號的,運營商則能夠經過 sim 卡數據查詢到。
如今運營商已經開放了相關的能力,如今咱們能夠在用戶輸入手機號後,經過調用運營商的接口,判斷用戶輸入的手機號是否和本地號碼一致。這樣一來,用戶就省去了等待驗證碼短信、輸入驗證碼的過程,也不受短信網絡的限制,簡化了登陸流程。
但再進一步想,若是運營商能夠把當前的號碼直接返回給咱們,而不僅是用於驗證,那用戶連手機號都不須要填了。
因而,就有了今天的主角一鍵登陸。
獲取到當前手機使用的手機卡號,直接使用這個號碼進行登陸,這就是一鍵登陸。
這種登陸方式的好處是顯而易見的。它能夠更方便、快捷地完成註冊、登陸流程,將本來可能須要 20 秒的流程,縮短到了 2 秒左右,很大程度上下降了登陸環節的用戶流失。
一鍵登陸能不能作,取決於運營商是否開放相關服務,這也是爲何過去沒有一鍵登陸,直到最近三大運營商都有了本身的開放平臺:
要使用一鍵登陸,須要接入運營商的 SDK,三大運營商使用了同一套受權流程:
主要步驟以下:
調用 SDK 的初始化方法,傳入項目在平臺上的 AppKey 和 AppSecret。
調用 SDK 喚起受權接口。SDK 會先向運營商發起獲取手機號掩碼的請求,請求成功後跳轉到受權頁。受權頁會顯示手機號掩碼以及運營商協議給用戶確認。
用戶贊成相關協議,點擊受權頁面的登陸按鈕,SDK 會請求本次取號的 token,請求成功後將 token 返回給客戶端。
將獲取到的 token 發送到咱們本身的服務器,由服務器攜帶 token 調用運營商一鍵登陸的接口,調用成功就返回手機號碼了。服務器用手機號進行登陸或註冊操做,返回操做結果給客戶端,完成一鍵登陸。
這裏須要把受權頁拎出來說一下,它通常長這樣:
受權頁是 SDK 裏定義的頁面,以安卓爲例,接入 SDK 後咱們須要在 AndroidManifest 裏註冊好這個頁面。咱們不能也不該該跳過受權頁面,未經用戶容許就獲取用戶手機號。
因爲受權頁是第三方的頁面,咱們沒法自由修改頁面樣式,但 SDK 裏提供了足夠豐富的接口給咱們自定義樣式。
前面說到,在受權頁顯示以前須要先請求到手機號掩碼,用於在受權頁展現。爲了增長受權頁的跳轉速度,減小用戶等待的時間,一般 SDK 會提供一個預取號的接口給咱們,這個接口取的就是手機號掩碼。咱們能夠在打開 APP 的時候就調用這個接口,在已經取得掩碼的狀況下,用戶點擊跳轉受權頁面就不須要再等待了。算是對用戶體驗的一個小優化。
在認證過程當中,會把網絡切換爲移動蜂窩網絡,目前支持的制式有中國移動 2G/3G/4G、中國聯通 3G/4G、中國電信 4G。固然最好是使用 4G,使用 2G、3G 會下降認證的成功率。
在沒有插電話卡,或者關閉移動蜂窩網絡的狀況下,是沒法完成認證的。因此就算接入了一鍵登陸,咱們也要兼容傳統的登陸方式,容許用戶在認證失敗的狀況下,手動輸入手機號登陸。
三家運營商都擁有本身的 SDK,但各自的 SDK 不必定支持別家的認證。這致使目前許多接入了一鍵登陸的產品,只支持某一個運營商。
若是要兼容三大運營商,就須要分別接入三個 SDK。如今咱們也有更簡單的方法,就是接入一個整合了三大運營商認證能力的第三方 SDK,目前主要有如下幾家:
原理和使用方法基本都是同樣的,具體你們能夠查看它們的文檔。
講一下咱們比較關心的價格問題,我瞭解了運營商和上面提到那幾家的計價,認證一次的價格集中在 4 到 6 分錢不等,其中最便宜的是 mob 的秒驗。但價格可能會變化,這裏就不具體討論了。
通常是成功置換到手機號算一次計費,調用預取號接口和認證失敗,都是不計費的。
總的來講,一鍵登陸和發送驗證短信的價格差很少。發送短信是發送一條就計費一次,但用戶存在須要屢次獲取驗證碼才能登陸成功的狀況。而一鍵登陸能置換到手機號,基本就意味着登陸成功了。因此從次數上考慮,接入一鍵登陸應該還能稍微省一點。
目前,一鍵登陸處於剛起步的階段,運營商的認證服務還須要改進,對於用戶也還有一個被接受的過程。
但毫無疑問,一鍵登陸將會成爲將來的主流登錄方式之一。