源起
今天是周五了,工作大多是总结和回归。没有很重的开发任务,自己也开始研究下项目中用到的各种SDK。先吐槽一下,我这个项目是从外包接手,里面用到的三方SDK真的是让我心累。
分享使用的mob share SDK。
推送用的极光 JPush。
统计用的是友盟的U-App。
真的是让人醉了。我认为只要集成了友盟 这几个都可以解决,当然其他的SDK也可以做到。可能是外包是在原项目基础开发的吧。为了快速。就造成这样了。最近我在整理项目,想着要不要将SDK统一了。但是考虑到有和后台交互的地方。迟迟也没动手。
今天在看极光推送的时候发现了一个新的掉用SDK。
没错就是这个认证。一开始我还以为是运营商认证。结果其实不然,是认证登录。获取本机号码 直接一键登录。这个功能在早期的时候,我认为是获取手机钥匙串信息获取到的SIM卡信息。后来也没多深入研究,如今看到这个SDK存在。想着研究看下。毕竟第一次看这个SDK就 开始写文章,难免有些疏漏,忘大家能够指出我的问题 和我的疑点。(在看的时候 还是有疑点的,因为这个SDK是付费的 也没法深究)。
进入正题->极光的SDK初识
关于认证的配置 这里我就不介绍了,去极光的文档处,点击认证查看关于认证的配置信息即可。
下面讲一下我理解的SDK 和我有的疑惑。
SDK接口说明
1. JVERIFICATIONService,包含SDK所有接口
2.JVAuthConfig类,应用配置信息类
3.VAuthEntity类,认证实体类
4.JVUIConfig类,登录界面UI配置基类
5.JVMobileUIConfig类,JVUIConfig的子类,移动登录界面UI配置类
6.JVUnicomUIConfig类,JVUIConfig的子类,联通登录界面UI配置类
7.JVTelecomUIConfig类,JVUIConfig的子类,电信登录界面UI配置类
SDK初始化
文档在介绍这个环节的时候,将历史版本都一一列举出来了。当我们使用的时候可以直接pod最新的 然后使用最新的版本 集成步骤就可以。
开始支持的版本 1.0.0
接口定义
+ setupWithConfig:(JVAuthConfig * )config;
接口说明:
初始化接口
参数说明
config 配置类
调用示例:
// 如需使用 IDFA 功能请添加此代码并在初始化配置类中设置 advertisingId
NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
JVAuthConfig *config = [[JVAuthConfig alloc] init];
config.appKey = @"a0e6ace8d5b3e0247e3f58db";
config.advertisingId = idfaStr;
[JVERIFICATIONService setupWithConfig:config];
SDK获取初始化状态
开始支持的版本 2.3.2
+ (BOOL)isSetupClient
接口说明:
初始化是否完成
返回值说明
YES 初始化完成
NO 初始化未完成
调用示例:
BOOL isSetupClient = [JVERIFICATIONService isSetupClient];
if (isSetupClient) {
//初始化完成,可以进行后续操作
}
SDK设置debug模式
开始支持的版本 1.0.0
接口定义
+ (void)setDebug:(BOOL)enable;
接口说明:
开启debug模式
参数说明
enable 是否开启debug模式
SDK判断网络环境是否支持
开始支持的版本 1.1.2
接口定义
+ (BOOL)checkVerifyEnable;
接口说明:
判断当前网络环境是否可以发起认证
返回值说明
YES 可以认证
NO 不可以认证
调用示例:
if(![JVERIFICATIONService checkVerifyEnable]) {
NSLog(@"当前网络环境不支持认证!");
return;
}
//继续获取token操作
...
SDK获取号码认证token(新)
开始支持的版本 2.2.0
+ (void)getToken:(NSTimeInterval)timeout completion:(void (^)(NSDictionary * result))completion;
接口说明:
获取手机号校验token
参数说明
completion 参数是字典 返回token 、错误码等相关信息,token有效期1分钟, 一次认证后失效
result 字典 获取到token时key有operator、code、token字段,获取不到token是key为code和content字段
timeout 超时时间(毫秒),有效取值范围(0,10000],若小于等于0则取默认值5000.大于10000则取10000.为保证获取token的成功率,建议设置为3000-5000ms.
调用示例:
[JVERIFICATIONService getToken:(NSTimeInterval)timeout completion:^(NSDictionary *result) {
NSLog(@"getToken result:%@", result)
//TODO:获取token后相关操作
}];
SDK获取号码认证token(旧)
开始支持的版本 1.0.0
接口定义
+ (void)getToken:(void (^)(NSDictionary * result))completion;
接口说明:
获取号码认证token,此接口已废弃,建议使用新接口
参数说明
completion 参数是字典 返回token、错误码等相关信息,token一次认证后失效
result 字典 获取到token时key有operator、code、token字段,获取不到token时key为code和content字段
调用示例:
[JVERIFICATIONService getToken:^(NSDictionary *result) {
NSLog(@"getToken result:%@", result)
//TODO:获取token后相关操作
}];
说明:开发者可以通过SDK获取token接口的回调信息来选择验证方式,若成功获取到token则可以继续使用极光认证进行号码验证;若获取token失败,需要换用短信验证码等方式继续完成验证。
SDK发起号码认证
开始支持的版本 1.0.0
+ (void)verifyNumber:(JVAuthEntity * )entity result:(void (^)(NSDictionary * result))completion;
接口说明:
发起号码认证,验证手机号码和本机SIM卡号码是否一致
参数说明:
completion 认证结果
result 字典 key为code和content两个字段
entity 认证实体类
调用示例:
JVAuthEntity *entity = [[JVAuthEntity alloc] init];
entity.number = @"phone number";
entity.token = @"your token";
[JVERIFICATIONService verifyNumber:entity result:^(NSDictionary *result) {
NSLog(@"verify result:%@", result);
}];
说明:开发者调用该接口,需要在管理控制台找到该应用,并在[认证设置]-[其他设置]中开启[SDK发起认证],建议从开发者服务端发起号码认证。
SDK登录预取号
开始支持的版本 2.2.0
+ (void)preLogin:(NSTimeInterval)timeout completion:(void (^)(NSDictionary result))completion*
接口说明:
验证当前运营商网络是否可以进行一键登录操作,该方法会缓存取号信息,提高一键登录效率。建议发起一键登录前先调用此方法。
参数说明:
completion 预取号结果
result 字典 key为code和message两个字段
timeout 超时时间(毫秒),有效取值范围(0,10000],若小于等于0则取默认值5000.大于10000则取10000.为保证获取token的成功率,建议设置为3000-5000ms.
调用示例:
[JVERIFICATIONService preLogin:5000 completion:^(NSDictionary *result) {
NSLog(@"登录预取号 result:%@", result);
}];
SDK请求授权一键登录(新)
开始支持的版本 2.3.0
+ (void)getAuthorizationWithController:(UIViewController )vc hide:(BOOL)hide completion:(void (^)(NSDictionary result))completion
接口说明:
授权一键登录
参数说明:
completion 登录结果
result 字典 获取到token时key有operator、code、loginToken字段,获取不到token是key为code和content字段
vc 当前控制器
hide 完成后是否自动隐藏授权页,默认YES。若此字段设置为NO,请在收到一键登录回调后调用SDK提供的关闭授权页面方法。
调用示例:
[JVERIFICATIONService getAuthorizationWithController:self hide:YES completion:^(NSDictionary *result) {
NSLog(@"一键登录 result:%@", result);
}];
SDK请求授权一键登录(旧)
开始支持的版本 2.0.0
接口定义
+ (void)getAuthorizationWithController:(UIViewController )vc completion:(void (^)(NSDictionary *result))completion*
接口说明:
授权一键登录
参数说明:
completion 登录结果
result 字典 获取到loginToken时key有operator、code、loginToken字段,获取不到loginToken时key为code和content字段
vc 当前控制器
调用示例:
[JVERIFICATIONService getAuthorizationWithController:self completion:^(NSDictionary *result) {
NSLog(@"一键登录 result:%@", result);
}];
SDK关闭授权页面
开始支持的版本 2.3.0
+ (void)dismissLoginController;
接口说明:
关闭授权页
调用示例:
[JVERIFICATIONService dismissLoginController];
SDK自定义授权页面UI样式
开始支持的版本 2.0.0
接口定义
+ (void)customUIWithConfig:(JVUIConfig )UIConfig;*
接口说明:
自定义授权页面UI样式
参数说明:
UIConfig JVUIConfig的子类
调用示例:
/*移动*/
JVMobileUIConfig *mobileUIConfig = [[JVMobileUIConfig alloc] init];
mobileUIConfig.logoImg = [UIImage imageNamed:@"logo"];
[JVERIFICATIONService customUIWithConfig:mobileUIConfig];
/*联通*/
JVUnicomUIConfig *unicomUIConfig = [[JVUnicomUIConfig alloc] init];
unicomUIConfig.logoImg = [UIImage imageNamed:@"logo"];
[JVERIFICATIONService customUIWithConfig:unicomUIConfig];
/*电信*/
JVTelecomUIConfig *telecomUIConfig = [[JVTelecomUIConfig alloc] init];
telecomUIConfig.logoImg = [UIImage imageNamed:@"logo"];
[JVERIFICATIONService customUIWithConfig:telecomUIConfig];
SDK授权页面添加自定义控件
开始支持的版本 2.1.0
接口定义
+ (void)customUIWithConfig:(JVUIConfig )UIConfig customViews:(void(^)(UIView *customAreaView))customViewsBlk;*
接口说明:
自定义授权页面UI样式,并添加自定义控件
参数说明:
UIConfig JVUIConfig的子类
customViewsBlk 添加自定义视图的block
调用示例:
/*移动*/
JVMobileUIConfig *mobileUIConfig = [[JVMobileUIConfig alloc] init];
mobileUIConfig.logoImg = [UIImage imageNamed:@"cmccLogo"];
[JVERIFICATIONService customUIWithConfig:mobileUIConfig customViews:^(UIView *customAreaView) {
//添加一个自定义label
UILabel *lable = [[UILabel alloc] init];
lable.text = @"这是一个自定义label";
[lable sizeToFit];
lable.center = customAreaView.center;
[customAreaView addSubview:lable];
}];
/*联通*/
JVUnicomUIConfig *unicomUIConfig = [[JVUnicomUIConfig alloc] init];
unicomUIConfig.logoImg = [UIImage imageNamed:@"cuccLogo"];
[JVERIFICATIONService customUIWithConfig:unicomUIConfig customViews:^(UIView *customAreaView) {
//添加自定义控件
}];
/*电信*/
JVTelecomUIConfig *telecomUIConfig = [[JVTelecomUIConfig alloc] init];
telecomUIConfig.logoImg = [UIImage imageNamed:@"ctccLogo"];
telecomUIConfig.navColor = [UIColor redColor];
telecomUIConfig.appPrivacyOne = @[@"自定义协议1",@"https://www.jiguang.cn/push"];
telecomUIConfig.appPrivacyTwo = @[@"自定义协议2",@"https://www.jiguang.cn/media/news/143"];
[JVERIFICATIONService customUIWithConfig:telecomUIConfig customViews:^(UIView *customAreaView) {
//添加自定义控件
}];
JVAuthConfig类
应用配置信息类。以下是属性说明:
JVAuthEntity类
认证实体类。包含认证的手机号和token。以下是属性说明:
JVUIConfig类
登录界面UI配置基类。以下是属性说明:
JVMobileUIConfig类
移动登录界面UI配置类,JVUIConfig的子类。
JVUnicomUIConfig类
联通登录界面UI配置类,JVUIConfig的子类。
JVTelecomUIConfig类
电信登录界面UI配置类,JVUIConfig的子类。
错误码列表
后续
这里我看文档居然有写 要传手机号,这里比较纳闷,明明是一键登录,为啥要输入手机号,以上也只是我对于极光认证文档的一些个人总结,大部分还是原文档信息,如果最近有接触这个业务的同学可以讲下 具体的操作步骤。我看文档也没Demo。主要是收费的。不好操作。
这篇到此就结束了 ,希望能有人看到并解惑我的疑问吧。