iOS对接指南
交互流程
为了确保用户在登录过程中将手机号码信息授权给合作方使用的知情权,天翼账号登录认证需要合作方满足如下要求:
(1)合作方在调用登录认证方法前,必须显示出登录页面,登录页面需明确告知用户操作会将用户本机号码信息授权给应用;(天翼账号服务与隐私协议url地址:https://e.189.cn/sdk/agreement/detail.do?hidetop=true)
(2)合作方需展示“天翼账号”品牌露出,不得通过任何技术手段,将登录页面的隐私栏、品牌露出内容隐藏、覆盖;
若有出现未按要求设计登录页面的行为或有非正常调用行为,为了保护用户的隐私安全,我方有权将合作方应用的登录功能下线,由此产生的一切影响由合作方自己承担。
如下是天翼账号标准页面的设计规范,供合作方参考;
为满足以上要求,接入资料中未包含相应的导入包,需合作方将如下信息在开放平台上进行配置,我方即可提供导入包:
(1)一个APPID对应一个应用,故需要提供如下信息,用于校验该APPID对应的应用请求:
Android端:APPID、包名packagename、包签名(签名证书的MD5值)
iOS端:APPID、bundleID(可配置测试和正式的bundleID)
已对接过的合作方请留意错误码的改动,以防影响正常使用逻辑。
接入前请先确认:
A. 已申请AppID、AppSecret。
B. 已提交登录界面的类名,并获得定制的.framework包。
若无,请按1.2的指引申请
(1).Xcode—>File —> Add Files to "Your Project”,在弹出Panel选中 EAccountHYSDK.framework和EAccountOpenPageResource.bundle两个文件,然后点击Add。(注:选中“Copy items if needed”)。导入包和bundle文件后Xcode工程文件列表参考如下:
(1) .添加依赖库,在项目设置target -> 选项卡Build Phases->Link Binary with Libraries下添加libc++.1.tbd、libz.1.2.8.tbd和network.framework,如下:
在info.plist文件中添加App Transport Security Settings项,并在其中添加Allow Arbitrary Loads子项,同时将该子项的值设置为YES,如下:
(1) 在Hearder Search Paths中设置EAccountHYSDK.framework文件的路径,并将右边的值设置为recursive,如下:
(2) 在Other Linker Flags中添加“-ObjC”、“-lstdc++”和“-force_load”加上EAccountHYSDK.framework/EAccountHYSDK所在的路径,如下:
在APP调试阶段,若需要排查SDK问题,可以设置调试模式。输出SDK部分 Log。
[EAccountOpenPageSDK printConsoleEnable:YES];
(注意:上线前请确认没有调用该方法或置为false)
【接口说明】
在使用天翼账号SDK接口之前,必须先调用初始化方法(提前1s以上最佳),建议在AppDelegate的didFinishLaunchingWithOption函数中调用。不建议初始化与预登录接口同时调用。
【调用示例】
[EAccountOpenPageSDK initWithAppId:kAppId appSecret:kAppSecret];
【请求参数】
参数名 |
类型 |
必填 |
说明 |
appId |
NSString |
是 |
合作方在账号平台领取的appId |
appSecrect |
NSString |
是 |
合作方在账号平台领取的appSecrect |
【响应参数】
无
【接口说明】
在调用该接口前,建议先做本地预判断处理,符合条件再调用预登录接口。预登录接口可获取脱敏手机号、accessCode、gwAuth等信息,其中脱敏手机号可用于登录界面的展示,accessCode默认有效期为60分钟。SDK提供两个预判断方法:
1、判断蜂窝网络是否开启
[EAccountOpenPageSDK isCellularDataEnable];
返回:
YES:表示已开启蜂窝数据网络(支持预登录)
NO:表示未开启蜂窝数据网络(不支持预登录)
2、判断当前运营商类型
[EAccountOpenPageSDK getOperatorType];
返回:
"CT":电信 , "CM":移动 , "CU":联通 ,"UN":未知
【调用示例】
EAccountPreLoginConfigModel *model = [[EAccountPreLoginConfigModel alloc] initWithDefaultConfig];
[EAccountOpenPageSDK requestPRELogin:model completion:^(NSDictionary * _Nonnull resultDic){
//成功
NSLog(@"resultDic----->>>>%@",resultDic);
} failure:^(NSError * _Nonnull error) {
//失败
NSLog(@"error---->>>%@",error);
}];
【请求参数】
参数名 |
类型 |
必填 |
说明 |
model |
EAccountPreLoginConfigModel |
是 |
接口超时时间配置,详细请看该类头文件 |
completion |
block |
是 |
成功的回调 |
failure |
block |
是 |
失败的回调 |
【响应参数】
返回结果resultDic为NSDictnory,格式说明:
参数名 |
类型 |
字段含义 |
说明 |
result |
int |
结果码 |
返回参数结果码,0表示成功, 详细参考错误码定义(6.1) |
msg |
String |
结果说明 |
结果码对应详细说明 |
operatorType |
String |
运营商标识 |
CT电信,CU联通,CM移动,UN其他 |
expiredTime |
int |
预登录结果失效时间 |
预登录结果失效时间 |
accessCode |
String |
授权码 |
天翼账号授权码,用于获取信息接口传参,默认时效性60分钟 |
reqId |
String |
请求Id |
用于在账号平台排查问题 |
【接口说明】
1.使用该接口前,必须先完成调用初始化和预登录接口。在预登录成功后,才调用该接口打开登录界面,用户点击一键登录按钮,将立即返回登录结果(无网络请求)。
2.如果无动态配置页面的需求,传入默认的config即可。
注意:打开登录界面后,需确保登录界面的ViewController在屏幕的最顶部,由用户点击授权一键登录)
【调用示例】
EAccountOpenPageConfig *config = [[EAccountOpenPageConfig alloc] init];
[EAccountOpenPageSDK openAtuhVC:config controller:self clickHandler:^(NSString * _Nonnull senderTag) {
//合作方按钮的点击回调
} completion:^(NSDictionary * _Nonnull resultDic) {
//成功
NSLog(@"----resultDic-%@-----",resultDic);
} failure:^(NSError * _Nonnull error) {
//失败
NSLog(@"----error22222-%@-----",error);
}];
【请求参数】
参数名 |
类型 |
必填 |
说明 |
config |
EAccountOpenPageConfig |
是 |
EAccountOpenPageConfig为控件属性动态配置类,对登录界面和协议界面的属性进行动态更改,详细说明见Demo |
controller |
UIViewController |
是 |
传入当前的VC |
clickHandler |
block |
是 |
合作方按钮的点击回调 |
completion |
block |
是 |
成功的回调 |
failure |
block |
是 |
失败的回调 |
【响应参数】
返回结果resultDic为NSDictnory,格式说明:
参数名 |
类型 |
必填 |
说明 |
result |
int |
结果码 |
返回参数结果码,0表示成功, 详细参考错误码定义(6.1) |
msg |
String |
结果说明 |
结果码对应详细说明 |
accessCode |
String |
授权码 |
天翼账号授权码,用于获取信息接口传参,默认时效性60分钟 |
authCode |
String |
校验码 |
天翼账号校验码,用于获取信息接口传参 |
operatorType |
String |
运营商标识 |
CT电信,CU联通,CM移动,UN其他 |
expiredTime |
int |
失效时间 |
预登录结果失效时间戳 |
reqId |
String |
请求Id |
用于在账号平台排查问题 |
【接口说明】
1.使用该接口前,必须先完成调用初始化和预登录接口。在预登录成功后,才调用该接口打开登录界面,用户点击一键登录按钮,将立即返回登录结果(无网络请求)。
2.如果无动态配置页面的需求,传入默认的config即可。
注意:打开登录界面后,需确保登录界面的ViewController在屏幕的最顶部,由用户点击授权一键登录)
【调用示例】
EAccountOpenPageConfig *config = [[EAccountOpenPageConfig alloc] init];
[EAccountOpenPageSDK openMiniAtuhVC:config controller:self clickHandler:^(NSString * _Nonnull senderTag) {
//合作方按钮的点击回调
} completion:^(NSDictionary * _Nonnull resultDic) {
//成功
NSLog(@"----resultDic-%@-----",resultDic);
} failure:^(NSError * _Nonnull error) {
//失败
NSLog(@"----error22222-%@-----",error);
}];
【请求参数】
参数名 |
类型 |
必填 |
说明 |
config |
EAccountOpenPageConfig |
是 |
EAccountOpenPageConfig为控件属性动态配置类,对登录界面和协议界面的属性进行动态更改,详细说明见Demo |
controller |
UIViewController |
是 |
传入当前的VC |
clickHandler |
block |
是 |
合作方按钮的点击回调 |
completion |
block |
是 |
成功的回调 |
failure |
block |
是 |
失败的回调 |
【响应参数】
返回结果resultDic为NSDictnory,格式说明:
参数名 |
类型 |
必填 |
说明 |
result |
int |
结果码 |
返回参数结果码,0表示成功, 详细参考错误码定义(6.1) |
msg |
String |
结果说明 |
结果码对应详细说明 |
accessCode |
String |
授权码 |
天翼账号授权码,用于获取信息接口传参,默认时效性60分钟 |
authCode |
String |
校验码 |
天翼账号校验码,用于获取信息接口传参 |
operatorType |
String |
运营商标识 |
CT电信,CU联通,CM移动,UN其他 |
expiredTime |
int |
失效时间 |
预登录结果失效时间戳 |
reqId |
String |
请求Id |
用于在账号平台排查问题 |
【接口说明】
当返回登录结果后,合作方APP可以调用该接口关闭登录界面。
【调用示例】
[EAccountOpenPageSDK closeOpenAuthVC];
【请求参数】
无
【响应参数】
无
通过设置JS桥接对象,实现APP内嵌浏览器支持H5页面进行预登录。具体设置说明如下:
App内嵌浏览器wkWebView将SDK的EAccountHYJSEventHandler类的对象添加为ScriptMessageHandler,将静态变量EAccountHYJSEventName(值为@"EAccountJsBridge")作为名字,最后将当前wkWebView传给EAccountHYJSEventHandler对象。
【参数说明】
变量名 |
类型 |
必填 |
说明 |
eHYjsEventHandler |
EAccountHYJSEventHandler
|
是 |
ScriptMessageHandler |
EAccountHYJSEventName |
NSString |
是 |
静态变量EAccountHYJSEventName(值为@"EAccountJsBridge") |
【调用示例】
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
EAccountHYJSEventHandler *eHYjsEventHandler = [EAccountHYJSEventHandler new];
[userContentController addScriptMessageHandler:eHYjsEventHandler name:EAccountHYJSEventName];
//二选一,如果都设置,则delegate生效
eHYjsEventHandler.wkWebView = _wkWebView;
//eHYjsEventHandler.delegate = self;
【应用场景】
当WiFi和蜂窝网络共存需要使用蜂窝网络发送请求的情况下使用。(注意:EAHttpSocket工具仅供参考,请求报文和响应报文请根据实际情况处理)
【接入说明】
(1) XcodeFile —> Add Files to "Your Project”,在弹出Panel选中 EAHttpSocket文件夹->Add。(注:选中“Copy items if needed”、“Create groups”);
(2) 导入EAHttpSocketRequest.h头文件;
【代码使用示例】
// 1.判断是否有蜂窝网络
if ([EAccountOpenPageSDK isCellularDataEnable]) {
dispatch_async(dispatch_queue_create(0, 0), ^{
if (![self.tool isConnected]) {
// 2.创建请求对象
EAURLRequest * request = [[EAURLRequest alloc] init];
request.URL = [NSURL URLWithString:@"https://api.apiopen.top/api/getHaoKanVideo"]; //请求路径
request.parameters = @{@"page":@"0",@"size":@"10"}; //请求参数
request.HTTPMethod = @"GET"; //请求类型
request.headerFields = [NSMutableDictionary dictionaryWithDictionary:@{@"accept":@"*/*",@"Content-Type":@"application/json, application/x-www-form-urlencoded"}]; //设置请求头
request.timeoutInterval = 5; //请求超时时间
// 3.发送请求并处理请求结果
[self.tool requestWithURLRequest:request responseBlock:^(NSDictionary * _Nullable resultDic, NSData * _Nullable resultData, NSURLResponse * _Nullable response, NSError * _Nullable error, NSString * _Nullable reqId) {
NSLog(@"%@----%@",[EAParasUtil stringFromDic:resultDic],error.localizedDescription);
}];
}
});
}else{
[EAccountDemoUtil showAlert:@"提示:" message:@"请打开移动网络!!!" viewController:self];
}