Android对接指南
交互流程图
合作方接入天翼账号免密功能,在免密登录成功后,天翼账号平台返回用户信息及token有效期内,合作方可以通过token获取用户信息。
注意:
“蓝色流程”由合作方实现对接,流程序号与本文标题序号章节相对应。
“绿色流程”由天翼账号实现,合作方可进行了解。
成功对接效果图:
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目录下
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 |
-keepattributes *Annotation* -keepattributes *JavascriptInterface* -dontwarn cn.com.chinatelecom.account.lib.** -keepclassmembers class cn.com.chinatelecom.account.lib.**{*;} -keep class cn.com.chinatelecom.account.**{*;}
接入方可以根据自己产品需要接入自己产品的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。
请在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>
下面配置的是迷你弹框的登录界面,如无需要可直接跳过。
请在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>
接入方必须要在应用启动的时候,调用初始化接口。如果应用中有类继承了Application,则在此类里面的onCreate()中调用下面表格中的语句;如没有继承Application的类,则在应用打开的第一个Activity的onCreate()方法里调用下面表格中语句;注意:此初始化方法在整个工程里只需要初始化一次即可,重复初始化不会报错。
注意:请妥善保存appKey和appSecret 。
CtAuth.getInstance().init(context,appID,appSecret) //参数分别为:应用上下文, 平台下发给应用的app密钥
接口定义:
接口名称 | openAuthActivity |
接口描述 | 进行免密登录 |
请求参数:
名称 | 说明 | 数据类型 | 可空 |
---|---|---|---|
context | 传入当前调用的context(请传activity) | Context | N |
authResultListener | 返回结果通过AuthResultListener类回调 | AuthResultListener | N |
返回结果通过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说明如下:
名称 | 说明 | 数据类型 |
---|---|---|
result | 0:成功 其他:见附录3.1 如: 7001-用户选择用微信登录 7002-用户选择用QQ登录 | int |
msg | 结果码信息描述, result不为0的时候,该字段有值 | String |
accessToken | 【该返回参数用于综合平台增强验证功能,及调用API凭证】用户授权凭证信息 | String |
atExpiresIn | accessToken的有效期,以秒为单位 | Long |
refreshToken | 应用刷新令牌,accessToken过期后可通过刷新令牌换取新accessToken | String |
rfExpiresIn | refreshToken过期时间,以返回的时间的准,单位为秒 | Long |
timeStamp | 时间戳 | long |
openId | 应用用户唯一标识 | String |
loginMode | loginMode 登录方式:0:免密 1:短信 2:帐密 3:设备校验(使用帐密登录时,如果设备不是用户受信设备,需要用短信登录进行二次校验) | String |
userRiskRating | 账号风险等级,1:正常2:低危3:中危4:高危 | String |
ipRiskRating | IP风险等级,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) {}
});
此接口为迷你弹框版本,此接口与前面的免密登录接口的区别为多了两个请求参数分别为isShowQa和isShowOtherLogin,以及登录的界面样式为小弹框,其他返回结果和AuthResultListener类都是一样的定义。
接口定义:
接口名称 | openMiniActivity |
接口描述 | 进行免密登录 |
请求参数:
名称 | 说明 | 数据类型 | 可空 |
---|---|---|---|
context | 传入当前调用的context(请传activity) | Context | N |
params | 配置参数 | Map<String,String> | N |
authResultListener | 返回结果通过AuthResultListener类回调 | AuthResultListener | N |
params的参数设置如下:
isShowQa | 是否显示帮助按钮,默认为不显示,请传“false” 或者“true” | String | N |
isShowOtherLogin | 是否显示“切换账号”按钮,默认为显示,请传“false”或者“true” | String | N |
完成了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) {} });
调用免密登录接口方法之后的界面示例如下:
注意ctares目录下除logo外的其他文件不可修改,不可覆盖,否则将不能使用免密登录。修改后使用登录功能将会接收到-7999001的错误返回码。
通过获取用户信息接口,在用户登录后可以获取用户昵称、手机号码、头像等信息,需要对接获取用户信息能力,具体可到以下文档了解:
accessToken是调用账号登录的调用凭证,accessToken有效期为1个月,在有效期内避免accessToken过期后,可以在用户打开应用时使用刷新accessToken接口进行刷新,具体可到以下文档了解: