iOS 一键登录功能实现

源起

今天是周五了,工作大多是总结和回归。没有很重的开发任务,自己也开始研究下项目中用到的各种SDK。先吐槽一下,我这个项目是从外包接手,里面用到的三方SDK真的是让我心累。
分享使用的mob share SDK。
推送用的极光 JPush。
统计用的是友盟的U-App。

真的是让人醉了。我认为只要集成了友盟 这几个都可以解决,当然其他的SDK也可以做到。可能是外包是在原项目基础开发的吧。为了快速。就造成这样了。最近我在整理项目,想着要不要将SDK统一了。但是考虑到有和后台交互的地方。迟迟也没动手。

今天在看极光推送的时候发现了一个新的掉用SDK。


B1BA71A42F2480CB0CDE60CB50602155.jpg

没错就是这个认证。一开始我还以为是运营商认证。结果其实不然,是认证登录。获取本机号码 直接一键登录。这个功能在早期的时候,我认为是获取手机钥匙串信息获取到的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。以下是属性说明:


665E89E1760D69E855D4D9B4ABC3C148.jpg

JVUIConfig类

登录界面UI配置基类。以下是属性说明:


9CFAD42D-8D3B-42F4-BF82-209187A37400.png
87535B69-4677-4A55-AABC-55DA08B3F1B1.png
cutomeUI_description.png

JVMobileUIConfig类

移动登录界面UI配置类,JVUIConfig的子类。

JVUnicomUIConfig类

联通登录界面UI配置类,JVUIConfig的子类。

JVTelecomUIConfig类

电信登录界面UI配置类,JVUIConfig的子类。

错误码列表

2C18DE8E-3AF5-47EE-A41B-46BD302B9482.png
DC2C6FC7-AA49-4CE5-B648-7A3A786A7709.png

后续

这里我看文档居然有写 要传手机号,这里比较纳闷,明明是一键登录,为啥要输入手机号,以上也只是我对于极光认证文档的一些个人总结,大部分还是原文档信息,如果最近有接触这个业务的同学可以讲下 具体的操作步骤。我看文档也没Demo。主要是收费的。不好操作。

这篇到此就结束了 ,希望能有人看到并解惑我的疑问吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,334评论 0 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,034评论 1 32
  • 一、iOS 直播聊天室 Demo 说明 1、源码结构 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦阅读 2,681评论 2 7
  • 呆呆地对着屏幕 想努力的记起什么 转而拿起手机 随意翻开了简书里的诗 偶读两三行 这次太不小心 看到了几个虐心的零...
    留白walker阅读 277评论 2 9
  • 大年初一,儿子们去祭祖,估计会有很多话要和逝去的亲人们说一说吧!但粑粑从来不表露。初一的饺子阿宝一个没吃,反而,拿...
    灸灸微笑阅读 91评论 0 0