【Android】一键登录 - 三大运营商

5,185 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 1 天,点击查看活动详情

业务背景:

在条件允许的情况下(无 SIM 卡的手机,无法触发一键登录),通过运行商提供的服务,进行【一键登录】。简化用户的登录操作,提高 App 的登录注册率以及使用率。

本方案采用的是阿里云中【一键登录】方案。

效果图:

前提知识:

  • 整个流程如图所

16bab88121f0982a_tplv-t2oaga2asx-zoom-in-crop-mark_3024_0_0_0.jpg (图源自网络[掘金大佬-NanBox],侵删)

  • 该方案下,不允许使用完全自定义的授权页。但是可以通过属性配置,进行一定的修改。可修改的属性如下图所示 b7cc48c7a5c54a319e6fb020c45affd4_tplv-k3u1fbpfcp-zoom-1.jpg

Android 接入流程:

1.浅析 Demo

通常第一步都是下载官方 Demo 后,进行一番调试,盘点功能列表,是否符合自身需求。

链接:pan.baidu.com/s/1RX5yGp06… 提取码:qbx0

接下来,简单分析 Demo 项目架构,帮助大家尽快上手这个项目。

首先,我们要知道这个 Demo,是包括【一键登录】和【本机号码校验】两个功能。根据自己的需求分析对应的代码即可。这次我们只使用到前者,所以后者内容不在这里讲述。

1660791712248.png

主要看到下列三个模块:

  • Config - 就是上面预告知识中说到的配置项,主要是授权页的一些配置项

  • OneKeyLoginActivity - 登录页面

  • MessageActivity - 模拟【其他登录方式】页面

那具体的实现,就可以直接看对应模块的内容即可。可以在原 Demo,进行调试。

2.接入思路分析

基于判断是否支持【一键登录】的时机 提供两种接入思路

第一种:启动登录功能前判断

保守型启动.jpg

判断的方式可以通过

mPhoneNumberAuthHelper.checkEnvAvailable(PhoneNumberAuthHelper.SERVICE_TYPE_LOGIN)

是否支持【一键登录】。该流程未经检验,大家可以执行验证。

第二种:直接唤起【一键登录】,失败后再唤起【其他登录方式】

试错型启动.jpg

Demo 也是第二种方式。这种方式需要用到一个壳 Activity 。但这个壳主要的作用是初始化SDK,以及做逻辑判断和处理(即并无实际内容展示)。

这里引发一个思考:

既然用不到 Activity 的内容,那能不能换种方式呢呢?对于单例,我思考后,一开始觉得是没问题的,但是等写完后,发现我写成了一个 OneKeyLoginHelper 的单例,发现相应逻辑处理需要传入 activity 或者 fragment 的引用。那么我们知道单例中是不能持有这样的引用的(这里可以考虑使用弱引用),这会导致内容泄漏。不知道是否还有其他的方法?

3.代码接入流程

//STEP 1.初始化监听器(这里根据业务自己做处理)

//STEP 2.初始化SDK实例

//STEP 3.设置SDK秘钥

//STEP 4.唤起一键登录页

4.避坑

接着,讲一下接入过程中,遇到的一些问题。帮大家避免无效劳动,可以有更多的时间学(hua )习(shui)。

问题描述: 因为选择了第二种思路,那么会有个壳 Activity 的问题。这个壳,我们不处理的话,是不透明的,这样当我们进到这个壳的时候,再跳转到别的页面就会有个空白页。

解决方案: 将壳的主题改为透明色,经过实验,下述代码可以实现。(壳Activity 需要继承 AppCompatActivity)

<style name="Theme.Transparent" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

问题描述: 发现从【授权页】跳到【其他方式登录】的时候,授权页会逐渐变透明,会看到下一层页面的内容。如动图中,粉红色的箭头所示。

解决方案: 可以直接忽略,这个是 SDK 本身的问题。因为阿里那边给的回复是:(是否有最新解决方案,会及时更新,或者可以以你们当时咨询的为准)

98bce7009a554374880a7ea1955de95c_tplv-k3u1fbpfcp-zoom-1 (1).jpg


欢迎各位评论区留言交流。