Android对接指南

[隐藏]

交互流程图

合作方接入天翼账号免密功能,在免密登录成功后,天翼账号平台返回用户信息及token有效期内,合作方可以通过token获取用户信息。              

1535448303136092054.jpg

安卓SDK文档流程图1013-江映繁2.jpg

注意:

“蓝色流程”由合作方实现对接,流程序号与本文标题序号章节相对应。                   

“绿色流程”由天翼账号实现,合作方可进行了解。

成功对接效果图:

1-06.jpg

1 接入SDK的工作配置

1.1前期准备

接入方在天翼账号开放平台申请企业开发者、应用APPID、及免密登录权限,详见《接入流程》SDK及SDK DEMO下载,详见《天翼账号登录相关资源》


1.2导包                     

AAR包含了so库。以下有两个AAR包。

CtAccount_sdk_v3.8.2.aar:只包含armeabi so库的aar包。

CtAccount_sdk_v3.8.2_all.aar:包含了armeabi,armeabi-v7a,arm64-v8a,x86,x86_64 架构 so库的aar包。

注意:

若需要使用IFAA指纹登录功能,SDK包选择名称中带有 finger 名称的aar包 ,so库选择同上


1.2.1 导入AAR包(Android Studio为例)

Step1:将AAR包导入到libs目录下

1535448345734043169.jpg1535448365756023031.jpg

Step2:在module里的build.gradle配置。这个是添加一个本地仓库,并把libs目录作为仓库的地址。

repositories {

        flatDir {

            dirs 'libs'

        }

    }

如果是多module的工程,并且也依赖了aar包,有提示aar包无法找到的提示, 则可以将libs路径改为相对路径,在module中的build.gradle中配置这个相对路径

repositories {

        flatDir {

            dirs '../app/libs'

        }

    }

Step3:修改dependencies:

dependencies {

        compile(name: ' EAccount_SDK_Android', ext: 'aar')

        //其中name就是libs目录下.aar文件名称,ext,就是.aar的扩展名

    }

在新版本的Android Studio如3.1.2中可以使用

 implementation (name: 'EAccount_SDK_Android', ext: 'aar')

代替 compile 。


1.3配置AndroidManifest.xml     


在文件AndroidManifest.xml的<application>外(可以紧贴此上面)添加以下权限(以demo为准,可复制demo内配置):

<!-- 必选权限 -->

     <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

    <uses-permission android:name="android.permission.GET_TASKS" />

上面表格中的各种权限说明如下表格所示:

权限用途
WRITE_SETTINGS允许读写系统设置项
ACCESS_WIFI_STATE允许程序访问WiFi网络状态信息
ACCESS_NETWORK_STATE检测联网方式,区分用户设备使用的是2G、3G或是WiFi
INTERNET允许应用程序联网,以便向我们的服务器端发送数据
CHANGE_NETWORK_STATE允许程序改变网络连接状态
GET_TASKS允许访问task
 

1.4 混淆配置

-keepattributes *Annotation*

-keepattributes *JavascriptInterface*

-dontwarn cn.com.chinatelecom.account.lib.**

-keepclassmembers class cn.com.chinatelecom.account.lib.**{*;}

-keep class cn.com.chinatelecom.account.**{*;}


1.5 添加应用Logo

接入方可以根据自己产品需要接入自己产品的Logo,如果不接入自己产品的Logo,将使用默认的天翼账号Logo。
接入方添加自己应用的Logo的步骤如下:

1)接入方首先在自己应用目录下面建个assets目录,然后在assets目录下面建ctares目录,再在ctares目录下面建images目录,再在images目录下面建topIcon目录。

2)接入方把自己应用的Logo图标放入步骤1)建的topIcon下面,注意Logo命名必须为topIcon-logo.png。添加完Logo整个目录如下图红色标注所示。

注意事项:ctares目录、images目录、topIcon目录的名称不能随意写也不能写错,必须是固定的;Logo图标名称必须命名为topIcon-logo.png,尺寸大小必须240*240。

1535448408439008794.jpg

1.6配置AuthActivity

请在AndroidManifest.xml文件中的 <application> 内添加AuthActivity的声明,并且根据需要配置meta-data的android:name和android:value,这个配置决定免密登录页面的展示方式和一些处理逻辑;如果不配置将使用默认值(注意每个meta-data的android:name的值是下面固定的字符串,不能随意更改,否则配置将不起效),android:value如何配置请参考如下注释说明:

<!--与免密登录接口相关的activity-->

 <activity

 android:name="cn.com.chinatelecom.account.lib.base.ui.AuthActivity"

 android:screenOrientation="portrait"

 android:launchMode=”singleTask”

 android:theme="@style/CTASDKWhiteWebview">

 <!--下面配置登录方式, 如果不配置,默认是dm:zm-只展示账密登录;dm-只展示短信验证登录; zm|dm-先展示账密登录,后展示短信验证登录;dm|zm-展示短信验证登录,后展示账密登录-->

 <meta-data

 android:name="CTA_AUTH_LOGIN_WAY"

 android:value="zm|dm"/>

 <!--下面配置是否隐藏头部,默认否,true-是,false-否-->

 <meta-data

 android:name="CTA_AUTH_HIDE_TOP"

 android:value="false"/>

 <!--下面配置登录帐号类型,如果不配置,默认是mobile。mobile表示手机号码,email表示邮箱,可以用|分隔,例如: mobile|email 表示:手机号/邮箱或者; email|mobile:邮箱/手机号;mobile:手机号;email:邮箱-->

 <meta-data

 android:name="CTA_AUTH_ACCOUNT_TYPE"

 android:value="mobile"/>

 <!--下面配置是否有第三方登录,如果不配置,默认没有第三方登录。1 weibo 微博登录,2 qq QQ登录,3 weixin 微信登录,用|分隔,例如: weibo|qq|weixin-->

 <meta-data

 android:name="CTA_AUTH_SHOW_THIRD_LOGIN"

 android:value=""/>

 <!--下面配置是否自定义账号入口, 如果不配置,默认否。true-是,false-否,-->

 <meta-data

 android:name="CTA_AUTH_BASIC_APP"

 android:value="false"/>



 </activity>

 

 注:自定义登录方式(即免密登录失败或者用户点击“切换账号”的时候不跳转到账号SDK的帐密或短密页面,并且账号SDK会返回-899405、-8994014)

 true为自定义登录方式,接入方可自行跳转到自己的页面。

 false为跳到账号SDK的免密登录页面。

在styles.xml中添加主题:

<style name="CTASDKWhiteWebview" parent="@android:style/Theme.Black.NoTitleBar">

    <item name="android:windowBackground">@color/CTASDKBackgroundColor</item>

    <item name="android:windowIsTranslucent">false</item>

    <item name="android:windowNoTitle">true</item>

</style>

注意:更新SDK后,请确保windowIsTranslucent属性为false

在colors.xml中添加颜色值:

<color name=" CTASDKBackgroundColor">#F9F9F9</color>

1.7 配置MiniAuthActivity (可选,若无需求请跳过)

下面配置的是迷你弹框的登录界面,如无需要可直接跳过。

请在AndroidManifest.xml文件中的 <application> 内添加AuthActivity的声明,并且根据需要配置meta-data的android:name和android:value,这个配置决定免密登录页面的展示方式和一些处理逻辑;如果不配置将使用默认值(注意每个meta-data的android:name的值是下面固定的字符串,不能随意更改,否则配置将不起效),android:value如何配置请参考如下注释说明:

<!--与免密登录接口相关的mini activity-->

        <activity

            android:name="cn.com.chinatelecom.account.lib.mini.ui.MiniAuthActivity"

            android:exported="false"

            android:theme="@style/mini_activity"

            android:configChanges="orientation|keyboardHidden|screenSize"

            android:launchMode=”singleTask”

            android:windowSoftInputMode="stateHidden"

            >

            <!--下面配置登录方式:zm-只展示账密登录;dm-只展示短信验证登录; zm|dm-先展示账密登录,后展示短信验证登录;dm|zm-展示短信验证登录,后展示账密登录-->

            <meta-data

                android:name="CTA_AUTH_LOGIN_WAY"

                android:value="zm|dm" />

            <!--下面配置是否隐藏头部,默认否,true-是,false-否-->

            <meta-data

                android:name="CTA_AUTH_HIDE_TOP"

                android:value="false" />

            <!--下面配置登录帐号类型,mobile表示手机号码,email表示邮箱,可以用|分隔,例如: mobile|email 表示:手机号/邮箱或者; email|mobile:邮箱/手机号;mobile:手机号;email:邮箱-->

            <meta-data

                android:name="CTA_AUTH_ACCOUNT_TYPE"

                android:value="mobile " />

            <!--下面配置为免密登录页面的“切换账号”四个字自定义点击事件,true-是,false-否,默认否-->

            <meta-data

                android:name="CTA_AUTH_BASIC_APP"

                android:value="false" />

        </activity>





        <activity android:name="cn.com.chinatelecom.account.lib.mini.ui.MiniWebViewActivity"

            android:launchMode="singleTask"

            android:screenOrientation="portrait"

            android:exported="false">

        </activity>


在styles.xml中添加主题:

<style name="mini_activity" >

    <!-- 无标题 -->

    <item name="android:windowNoTitle">true</item>

<!-- 设置dialog的背景 -->

    <item name="android:windowBackground">@android:color/transparent</item>

    <!-- 设置Dialog的windowFrame框为无 -->

    <item name="android:windowFrame">@null</item>

    <!-- 设置无标题 -->

    <item name="windowNoTitle">true</item>

    <!-- 是否半透明 -->

    <item name="android:windowIsTranslucent">true</item>

    <!--设置窗口内容不覆盖-->

    <item name="android:windowContentOverlay">@null</item>

    <item name="android:backgroundDimEnabled">true</item>

    <item name="android:windowCloseOnTouchOutside">false</item>

</style>




2 对接指引

2.1 在应用启动时初始化

接入方必须要在应用启动的时候,调用初始化接口。如果应用中有类继承了Application,则在此类里面的onCreate()中调用下面表格中的语句;如没有继承Application的类,则在应用打开的第一个Activity的onCreate()方法里调用下面表格中语句;注意:此初始化方法在整个工程里只需要初始化一次即可,重复初始化不会报错。

注意:请妥善保存appKeyappSecret 


CtAuth.getInstance().init(context,appID,appSecret) //参数分别为:应用上下文, 平台下发给应用的app密钥

2.2 免密登录接口

接口定义:

接口名称openAuthActivity
接口描述进行免密登录

请求参数:

名称说明数据类型可空
context传入当前调用的context(请传activity)ContextN
authResultListener返回结果通过AuthResultListener类回调AuthResultListenerN

返回结果通过AuthResultListener类回调,AuthResultListener类主要有三个回调方法,具体定义如下所示:

public interface AuthResultListener {

        void onSuccess(AuthResultModel entity); //登录成功返回结果

        void onFail(AuthResultModel entity);   //登录失败回调结果

        void onCustomDeal(int result,String msg);                   //自定义账号回调结果

    }

onCustomDeal结果返回码result说明:

错误码说明
-899405网关认证失败
-8994014登录页面用户点了其他登录方式
-8994015其他登录方式-无法确认


返回结果AuthResultModel说明如下:

名称说明数据类型
result0:成功 其他:见附录3.1 如: 7001-用户选择用微信登录 7002-用户选择用QQ登录int
msg结果码信息描述, result不为0的时候,该字段有值String
accessToken【该返回参数用于综合平台增强验证功能,及调用API凭证】用户授权凭证信息String
atExpiresInaccessToken的有效期,以秒为单位Long
refreshToken应用刷新令牌,accessToken过期后可通过刷新令牌换取新accessTokenString
rfExpiresInrefreshToken过期时间,以返回的时间的准,单位为秒Long
timeStamp时间戳long
openId应用用户唯一标识String
loginModeloginMode 登录方式:0:免密 1:短信 2:帐密 3:设备校验(使用帐密登录时,如果设备不是用户受信设备,需要用短信登录进行二次校验)String
userRiskRating账号风险等级,1:正常2:低危3:中危4:高危String
ipRiskRatingIP风险等级,1:正常2:低危3:中危4:高危String

接入方需要重点关注:

1) accesstoken是调用天翼账号平台其他API的凭证;

2) loginMode是登录方式,记录了登录结果是由免密登录页面的哪种登录方式 所产生的。

 

完成了SDK的免密登录页面的配置和初始化之后,通过代码调用免密登录方法,调起免密登录界面,用户完成登录后返回的登录结果,即完成整个免密登录对接。其中免密登录结果为异步回调的方式。
调用“免密登录接口”示例代码如下:

CtAuthctAuth = CtAuth.getInstance();

    ctAuth.openAuthActivity(mContext,   new AuthResultListener() {

        @Override

        public void onSuccess(AuthResultModel   entity) {}

        @Override

        public void onFail(AuthResultModel   entity) { }

        @Override

        public void onCustomDeal(int result,String msg) {}

    });


2.3 免密登录接口(迷你弹框)

此接口为迷你弹框版本,此接口与前面的免密登录接口的区别为多了两个请求参数分别为isShowQa和isShowOtherLogin,以及登录的界面样式为小弹框,其他返回结果和AuthResultListener类都是一样的定义。

接口定义:


接口名称openMiniActivity
接口描述进行免密登录


请求参数:

名称说明数据类型可空
context传入当前调用的context(请传activity)ContextN
params配置参数Map<String,String>N
authResultListener返回结果通过AuthResultListener类回调
AuthResultListenerN

params的参数设置如下:

isShowQa是否显示帮助按钮,默认为不显示,请传“false” 或者“true”StringN
isShowOtherLogin是否显示“切换账号”按钮,默认为显示,请传“false”或者“true”StringN




2.4 调用SDK的免密登录接口

完成了SDK的免密登录页面的配置和初始化之后,通过代码调用免密登录方法,调起免密登录界面,用户完成登录后返回的登录结果,即完成整个免密登录对接。其中免密登录结果为异步回调的方式。
调用“免密登录接口”示例代码如下:

CtAuthctAuth = CtAuth.getInstance();

    ctAuth.openAuthActivity(mContext,   new AuthResultListener() {

        @Override

        public void onSuccess(AuthResultModel   entity) {}

        @Override

        public void onFail(AuthResultModel   entity) { }

        @Override

        public void onCustomDeal(int result,String msg) {}

    });

调用“免密登录接口(支持多账号)”示例代码如下:

ctAuth.openAuthActivity(mContext,   hascat, accessTokenList, new AuthResultListener() {

        @Override

        public void onSuccess(AuthResultModel   entity) {}



        @Override

        public void onFail(AuthResultModel   entity) {}



        @Override

        public void onCustomDeal(int result,String msg) {}

    });

调用免密登录接口方法之后的界面示例如下:

1535448431474055723.jpg

     

2.5 本地资源包安全校验

注意ctares目录下除logo外的其他文件不可修改,不可覆盖,否则将不能使用免密登录。修改后使用登录功能将会接收到-7999001的错误返回码。


3 免密登录之后的流程

3.1 获取用户信息

通过获取用户信息接口,在用户登录后可以获取用户昵称、手机号码、头像等信息,需要对接获取用户信息能力,具体可到以下文档了解:

《获取用户信息》


3.2 刷新accessToken

accessToken是调用账号登录的调用凭证,accessToken有效期为1个月,在有效期内避免accessToken过期后,可以在用户打开应用时使用刷新accessToken接口进行刷新,具体可到以下文档了解:

《刷新accessToken》


4 附录 及常见问题

登录错误返回码定义,可到以下文档了解:《登录返回码说明》

常见问题可见:《常见问题》




5 附录 变更记录

  20201026  V3.8.2版本

  

     1)、对sdk进行了安全加固,使登录流程更加安全;

     2)、新增两步认证:数字安全码、手势安全码功能

     3)、修改了部分类的包路径,请对应修改。