大家好,我是皇叔,最近開了一個安卓進階漲薪訓練營,可以幫助大家突破技術&職場瓶頸,從而度過難關,進入心儀的公司。
詳情見文章:沒錯!皇叔開了個訓練營
作者:Quincy_Ye鏈接:https://juejin.cn/post/7127836566084386852
業務背景在條件允許的情況下(無 SIM 卡的手機,無法觸發一鍵登錄),通過運行商提供的服務,進行【一鍵登錄】。簡化用戶的登錄操作,提高 App 的登錄註冊率以及使用率。
本方案採用的是阿里雲中【一鍵登錄】方案。
效果圖:

整個流程如圖所

該方案下,不允許使用完全自定義的授權頁。但是可以通過屬性配置,進行一定的修改。可修改的屬性如
下圖所示

通常第一步都是下載官方 Demo 後,進行一番調試,盤點功能列表,是否符合自身需求。
鏈接:https://pan.baidu.com/s/1RX5yGp06X4GYCr4b36Sv3A 提取碼:qbx0
接下來,簡單分析 Demo 項目架構,幫助大家儘快上手這個項目。
首先,我們要知道這個 Demo,是包括【一鍵登錄】和【本機號碼校驗】兩個功能。根據自己的需求分析對應的代碼即可。這次我們只使用到前者,所以後者內容不在這裡講述。
主要看到下列三個模塊:

Config - 就是上面預告知識中說到的配置項,主要是授權頁的一些配置項
OneKeyLoginActivity - 登錄頁面
MessageActivity - 模擬【其他登錄方式】頁面
那具體的實現,就可以直接看對應模塊的內容即可。
可以在原 Demo,進行調試。
2.接入思路分析基於判斷是否支持【一鍵登錄】的時機 提供兩種接入思路

判斷的方式可以通過
mPhoneNumberAuthHelper.checkEnvAvailable(PhoneNumberAuthHelper.SERVICE_TYPE_LOGIN)是否支持【一鍵登錄】。該流程未經檢驗,大家可以執行驗證。

Demo 也是第二種方式。這種方式需要用到一個殼 Activity 。但這個殼主要的作用是初始化SDK,以及做邏輯判斷和處理(即並無實際內容展示)。
這裡引發一個思考:
既然用不到 Activity 的內容,那能不能換種方式呢呢?對於單例,我思考後,一開始覺得是沒問題的,但是等寫完後,發現我寫成了一個 OneKeyLoginHelper 的單例,發現相應邏輯處理需要傳入 activity 或者 fragment 的引用。那麼我們知道單例中是不能持有這樣的引用的(這裡可以考慮使用弱引用),這會導致內容泄漏。不知道是否還有其他的方法?
3.代碼接入流程//STEP1.初始化監聽器(這裡根據業務自己做處理)//STEP2.初始化SDK實例//STEP3.設置SDK秘鑰//STEP4.喚起一鍵登錄頁4.避坑接着,講一下接入過程中,遇到的一些問題。幫大家避免無效勞動,可以有更多的時間學(hua )習(shui)。
問題描述: 因為選擇了第二種思路,那麼會有個殼 Activity 的問題。這個殼,我們不處理的話,是不透明的,這樣當我們進到這個殼的時候,再跳轉到別的頁面就會有個空白頁。
解決方案: 將殼的主題改為透明色,經過實驗,下述代碼可以實現。(殼Activity 需要繼承 AppCompatActivity)
<stylename="Theme.Transparent"parent="@style/Theme.AppCompat.DayNight.NoActionBar"><itemname="android:windowBackground">@android:color/transparent</item><itemname="android:windowNoTitle">true</item><itemname="android:windowIsFloating">true</item><itemname="android:windowIsTranslucent">true</item><itemname="android:windowContentOverlay">@null</item><itemname="android:backgroundDimEnabled">false</item></style>問題描述: 發現從【授權頁】跳到【其他方式登錄】的時候,授權頁會逐漸變透明,會看到下一層頁面的內容。如動圖中,粉紅色的箭頭所示。

解決方案: 可以直接忽略,這個是 SDK 本身的問題。因為阿里那邊給的回覆是:(是否有最新解決方案,會及時更新,或者可以以你們當時諮詢的為準)

歡迎各位評論區留言交流。



微信改了推送機制,真愛請星標本公號👇