iOS对接指南
交互流程图
合作方接入天翼账号免密功能,在免密登录成功后,天翼账号平台返回用户信息及token有效期内,合作方可以通过token获取用户信息。
注意:
“蓝色流程”由合作方实现对接,流程序号与本文标题序号章节相对应。
“绿色流程”由天翼账号实现,合作方可进行了解。
成功对接效果图:
1 接入SDK的工作配置
1.1 前期准备
接入方在天翼账号开放平台申请企业开发者、应用APPID、及免密登录权限,详见《接入流程》
SDK及SDK DEMO下载,详见《天翼账号登录相关资源》
1.2 导包
(1)将EAccountSDK文件夹(包括EAccountSDKArchive.framework)复制到自己的文件夹目录下;
(2)在工程中添加EAccountSDK文件(在工程名上点击右键弹出菜单后选择“Add Files to ‘xxxxxx’” 其中‘xxxxxx’为你的工程名字,如图1所示)
(3)弹出的窗口选择EAccountSDKArchive.framework文件,在选项“Copy items into destination group’s folder(if needed)”打钩,务必记得添加目标项目“Add to targets”选择你的目标工程,最后点击”Add”
(4)查询工程是否添加了EAccountSDKArchive.framework文件,(点击工程项目,点击目标TARGETS,选择Build Phases,展开Link Binary With Libraries,查看是否存在EAccountSDKArchive.framework文件,具体操作看图2。)如果工程没有添加EAccountSDKArchive.framework文件则需要手动添加(点击”+”按钮,如图3弹出选择框,选择“Add Other ...”按钮,在弹出的选择文件中,选择EAccountSDKArchive.framework,点击“Open”按钮)。
(5)增加动态库
libz.1.2.8.tbd libsqlite3.0.tbd libc++.1.tbd
(6)在项目的info.plist文件中添加Privacy - Camera Usage Description字段,值设置为NSCameraUsageDescription(iOS10适配)
1.3 静态库编译配置在工程中引入静态库后,需要在编译时添加-force_load编译选项,避免静态库中加载不完全造成程序崩溃。(具体方法:点击TARGETS,点击“Build Settings”,搜索框内搜索Other Linker Flags,在“Other Linker Flags”选项后添加” -force_load”,添加-force_load和EAccountSDK.framework/EAccountSDKArchive 文件所在的路径,请根据自己文件的实际路径进行设置,如图4)
1.4 添加相机和相册权限及FaceID权限
如下图:
Privacy - Photo Library Usage Description Privacy - Camera Usage Description Privacy - Face ID Usage Description
1.5 添加资源包
将HTMLResource.bundle添加到工程。
注意,这里要选择Create folder references
查看build phases的copy bundle resources里边有没有HTMLResources.bundle文件,如果没有,点击加号按钮,添加对应的资源包
添加后的效果图。
接入方可以根据自己产品需要接入自己产品的Logo,如果不接入自己产品的Logo,将使用默认的天翼账号Logo。接入方添加自己应用的Logo的方法如下: 在添加好资源包的基础上,替换资源包里边默认的logo图(/images/topIcon/topIcon-logo.png文件);
注意:目录结构和名称不能变,logo文件的名称必须为:topIcon-logo.png和topIcon-default.png; 图片尺寸都是240 * 240。
如下图:
1.7 关于bundleID的设定
(1)请确保工程的bundleID与申请appKey时所填的bundleID一致。
(2)如果需要使用企业证书重签名的bundleID进行测试,请添加+(void) settestBundleId,发布到App Stroe上的时候请确保没有该方法。
2 对接指引
2.1 在应用启动时初始化
接口调用说明:要使天翼账号SDK运行,需在调用任何其他方法前,先调用初始化方法;(如下图所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中初始化SDK)。
注意:请确保工程设置的bundleID与申请appKey时所填的bundleID一致。
请求参数:
参数名 | 参数说明 | 数据类型 | 可空 |
---|---|---|---|
appKey | 分配给第第三方应用的appKey | String | N |
appSecrect | 分配给第三方应用的appsecrect | String | N |
appName | 分配给第三方应用的名称 | String | N |
2.2 免密登录接口
接口定义:
接口名称 | login |
接口描述 | 进行免密登录 |
接口调用说明:在用户点击登录按钮后,调用免密登录接口,调用方法如下:
请求参数:
参数名 | 参数说明 | 数据类型 | 可空 |
---|---|---|---|
configModel | 登录参数配置模型,模型里边的属性见登录配置模型属性列表表。请先使用LoginConfigMode的初始化方法(initDefaultConfig)初始化,如果需要更改相应的属性,再更改。 | LoginConfigModel | N |
controller | 当前界面控制器,传空与不传空,动画效果不一样,传空时,SDK会新建一个window加载页面,动画为淡入。不是空的时候,会使用这个viewController来prezent出页面,动画为从底部弹出。 | UIViewController | Y |
success | 登录成功的回调代码块 | block | N |
failue | 登录失败的回调,失败有两种情况,根据error.code来判断。 | block | N |
登录配置模型属性列表:
字段名字 | 字段含义 | 字段类型 | 可空 |
---|---|---|---|
showThirdLogin | 第三方登录的配置,有qq、微博、微信和翼健康 4个,要哪个登录方式,就传对应的拼音,如@"qq" 或者@"qq|weixin" 或者@"qq|weixin|weibo|eHealthy"等 | String | N |
loginWay | 登录方式,zm、dm、zm|dm、dm|zm等4种方式,zm代表账号密码登录,dm,代表短信验证码登录,zm|dm代表两种都有,并且优先账号密码登录, dm|zm代表两种都有,优先短信登录 | String | N |
accountType | 账号类型,有mobile,email两种,两种都要的话,传@"mobile|email",否则传@"mobile" 或者@"email" | String | N |
loginList | 已经登录上的账号的accessToken组成的数组,不需要多账号功能的,可以传一个空的数组 | NSArray | Y |
hasat | 登录页面的登录账号是否默认加上@189.cn,yes表示有后缀,no表示没有后缀 | BOOL | N |
hideTop | 是否隐藏头部导航栏 | BOOL | N |
baseApp | 自定义账号入口方式=免密登录失败的时候/点击“切换账号”按钮时,不跳转到账号SDK的账密或短密页面,并且账号SDK会返回-899404、-8994014、-8994021。 yes,为自定义页面,接入方可自行跳转到自己的页面。 no,为跳到账号SDK的标准登录页面。(默认) | BOOL | N |
basicLoginTxt | 自定义账号入口方式的自定义文本(6到8个字符) | String | N |
loginMode | Token过期登录账号原来的登陆类型 0 免密,1 短密,2 账密 | NSString | Y |
modifyAccount | 账号可否被修改,true/false, 必填 | BOOL | Y |
tokenAccount | Token过期登录账号,例如:18988886666或者别名账号 | NSString | Y |
tokenOpenId | token过期账号对应的openId | NSString | Y |
showQA | 迷你登录弹框里边是否显示帮助按钮 | BOOL | Y |
showOtherLogin | 迷你登录弹框里边是否显示切换账号按钮 | BOOL | Y |
autoLoginOnly | 是否只使用天翼账号的免密登录功能(不使用账号密码登录和短信验证码登录),如果传YES,并且SDK检测到不能免密登录的时候,SDK会直接返回,不在打开天翼账号的登录页面。 | BOOL | Y |
biometryDelayTime | 经过biometryDelayTime毫秒后,弹出生物识别框,单位为毫秒,默认200毫秒 | NSInteger | 200 |
isBiometryEnabled | 是否开启增强免密认证(生物、手势、数字均属于两步认证,该项优先级高) | BOOL | N |
isGesCodeEnabled | 是否开启手势安全码(优先级中) | BOOL | N |
isDisplayGesCodeTrail | 验证手势安全码时,是否显示轨迹 | BOOL | N |
isNumCodeEnabled | 是否开启数字安全码(优先级低) | BOOL | N |
响应参数:
参数名 | 参数说明 | 数据类型 |
---|---|---|
result | 0表示成功,7001表示微信登录,7002表示QQ登录,7003表示微博登录,-1,表示登录失败,其他代码请查考登录回调的code | int |
openId | 用户在该应用下统一标识,可以唯一标识一个用户 | String |
accessToken | 登录成功,返回访问令牌,通过访问令牌可访问登录的数据 | String |
atExpiresIn | accessToken过期时间,以返回的时间的准,单位为秒,注意过期时提醒用户重新授权 | Long |
rfExpiresIn | refreshToken过期时间,以返回的时间的准,单位为秒 | Long |
loginMode | 用户登录类型 0: 免密登录 1: 短信登录 2: 账号密码登录 3: 二次校验(使用账号密码登录时,如果设备不是用户授信设备,需要用短信登录进行二次校验) | String |
refreshToken | 应用刷新令牌,accessToken过期后可通过刷新令牌换取新accessToken | String |
timeStamp | 时间戳 | String |
msg | 返回信息 | String |
userRiskRating | 账号风险等级(1-4,数值越高,风险越大) | int |
ipRiskRating | IP风险等级(1-4,数值越高,风险越大) | int |
登录回调的code
错误码 | 解释 |
---|---|
0 | 操作成功 |
-899405 | 网关认证失败 |
-8994014 | 免密登录页面,用户点击了其他登录方式 |
-8994021 | 预取号失败 |
-8994011 | 内部错误 |
-899406 | 网络错误 |
-899404 | 用户取消登录 |
-899401 | 网络不可达 |
7003 | 微博登录 |
7002 | QQ登录 |
7001 | 微信登录 |
2.3 免密登录接口(迷你弹框)
接口定义:
接口名称 | MINILogin |
接口描述 | 进行免密登录 |
在用户点击登录按钮时,调用弹框登录接口,SDK会在当前控制器上弹出登录框,调用方法如下图:
请求参数:
参数名 | 参数说明 | 数据类型 | 可空 |
---|---|---|---|
configModel | 登录参数配置模型,模型里边的属性见3.3的登录配置模型属性列表。。 | LoginConfigModel | N |
controller | 当前界面控制器,传空与不传空,动画效果不一样,传空时,SDK会新建一个window加载页面,动画为淡入。不是空的时候,会使用这个viewController来prezent出页面,动画为从底部弹出。 | UIViewController | Y |
success | 登录成功的回调代码块 | block | N |
failue | 登录失败的回调,失败有两种情况,根据error.code来判断。 | block | N |
响应参数:
参数名 | 参数说明 | 数据类型 |
---|---|---|
result | 0表示成功,7001表示微信登录,7002表示QQ登录,7003表示微博登录,-1,表示登录失败,其他代码请查考登录回调的code | int |
openId | 用户在该应用下统一标识,可以唯一标识一个用户 | String |
accessToken | 登录成功,返回访问令牌,通过访问令牌可访问登录的数据 | String |
atExpiresIn | accessToken过期时间,以返回的时间的准,单位为秒,注意过期时提醒用户重新授权 | Long |
rfExpiresIn | refreshToken过期时间,以返回的时间的准,单位为秒 | Long |
loginMode | 用户登录类型 0: 免密登录 1: 短信登录 2: 账号密码登录 3: 二次校验(使用账号密码登录时,如果设备不是用户授信设备,需要用短信登录进行二次校验) | String |
refreshToken | 应用刷新令牌,accessToken过期后可通过刷新令牌换取新accessToken | String |
timeStamp | 时间戳 | String |
msg | 返回信息 | String |
userRiskRating | 账号风险等级(1-4,数值越高,风险越大) | int |
ipRiskRating | IP风险等级(1-4,数值越高,风险越大) | int |
登录回调的code
错误码 | 解释 |
---|---|
0 | 操作成功 |
-899401 | 网络不可达 |
-899404 | 用户取消登录 |
-899405 | 网关认证失败 |
-899406 | 网络错误 |
-8994011 | 内部错误 |
-8994014 | 免密登录页面,用户点击了其他登录方式 |
-8994021 | 网关取号失败 |
7003 | 微博登录 |
7002 | QQ登录 |
7001 | 微信登录 |
3 免密登录后的流程
3.1 获取用户信息
通过获取用户信息接口,在用户登录后可以获取用户昵称、手机号码、头像等信息,需要对接获取用户信息接口,具体可到以下文档了解:
3.2 刷新accessToken
accessToken是调用账号登录的调用凭证,accessToken有效期为1个月,在有效期内避免accessToken过期后,可以在用户打开应用时使用刷新accessToken接口进行刷新,具体可到以下文档了解:
4 附录及常见问题
4.1 登录错误返回码定义,可到以下文档了解:
4.2 天翼账号SDK版本支持说明
天翼账号SDK支持IOS9及以上版本。
4.3 天翼账号SDK使用的第三方库说明
天翼账号SDK使用第三方类库包含SSZipArchive、UIWebView+TS_JavaScriptContext。