iOS 一鍵登錄功能實現(xiàn)

源起

今天是周五了,工作大多是總結(jié)和回歸。沒有很重的開發(fā)任務,自己也開始研究下項目中用到的各種SDK。先吐槽一下,我這個項目是從外包接手,里面用到的三方SDK真的是讓我心累。
分享使用的mob share SDK。
推送用的極光 JPush。
統(tǒng)計用的是友盟的U-App。

真的是讓人醉了。我認為只要集成了友盟 這幾個都可以解決,當然其他的SDK也可以做到??赡苁峭獍窃谠椖炕A(chǔ)開發(fā)的吧。為了快速。就造成這樣了。最近我在整理項目,想著要不要將SDK統(tǒng)一了。但是考慮到有和后臺交互的地方。遲遲也沒動手。

今天在看極光推送的時候發(fā)現(xiàn)了一個新的掉用SDK。


B1BA71A42F2480CB0CDE60CB50602155.jpg

沒錯就是這個認證。一開始我還以為是運營商認證。結(jié)果其實不然,是認證登錄。獲取本機號碼 直接一鍵登錄。這個功能在早期的時候,我認為是獲取手機鑰匙串信息獲取到的SIM卡信息。后來也沒多深入研究,如今看到這個SDK存在。想著研究看下。畢竟第一次看這個SDK就 開始寫文章,難免有些疏漏,忘大家能夠指出我的問題 和我的疑點。(在看的時候 還是有疑點的,因為這個SDK是付費的 也沒法深究)。

進入正題->極光的SDK初識

關(guān)于認證的配置 這里我就不介紹了,去極光的文檔處,點擊認證查看關(guān)于認證的配置信息即可。

下面講一下我理解的SDK 和我有的疑惑。

SDK接口說明

   1. JVERIFICATIONService,包含SDK所有接口
    2.JVAuthConfig類,應用配置信息類
    3.VAuthEntity類,認證實體類
    4.JVUIConfig類,登錄界面UI配置基類
    5.JVMobileUIConfig類,JVUIConfig的子類,移動登錄界面UI配置類
    6.JVUnicomUIConfig類,JVUIConfig的子類,聯(lián)通登錄界面UI配置類
    7.JVTelecomUIConfig類,JVUIConfig的子類,電信登錄界面UI配置類

SDK初始化

文檔在介紹這個環(huán)節(jié)的時候,將歷史版本都一一列舉出來了。當我們使用的時候可以直接pod最新的 然后使用最新的版本 集成步驟就可以。

開始支持的版本 1.0.0

接口定義
    + setupWithConfig:(JVAuthConfig * )config;
        接口說明:
            初始化接口
        參數(shù)說明
            config 配置類
        調(diào)用示例:
 // 如需使用 IDFA 功能請?zhí)砑哟舜a并在初始化配置類中設(shè)置 advertisingId
    NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

    JVAuthConfig *config = [[JVAuthConfig alloc] init];
    config.appKey = @"a0e6ace8d5b3e0247e3f58db";
    config.advertisingId = idfaStr;
    [JVERIFICATIONService setupWithConfig:config];

SDK獲取初始化狀態(tài)

開始支持的版本 2.3.2

    + (BOOL)isSetupClient
        接口說明:
            初始化是否完成
        返回值說明
            YES 初始化完成
            NO 初始化未完成
        調(diào)用示例:
BOOL isSetupClient = [JVERIFICATIONService isSetupClient];
if (isSetupClient) {
//初始化完成,可以進行后續(xù)操作
}

SDK設(shè)置debug模式

開始支持的版本 1.0.0

接口定義
    + (void)setDebug:(BOOL)enable;
        接口說明:
            開啟debug模式
        參數(shù)說明
            enable 是否開啟debug模式

SDK判斷網(wǎng)絡(luò)環(huán)境是否支持

開始支持的版本 1.1.2

接口定義

    + (BOOL)checkVerifyEnable;
        接口說明:
            判斷當前網(wǎng)絡(luò)環(huán)境是否可以發(fā)起認證
        返回值說明
            YES 可以認證
            NO 不可以認證
        調(diào)用示例:

if(![JVERIFICATIONService checkVerifyEnable]) {
        NSLog(@"當前網(wǎng)絡(luò)環(huán)境不支持認證!");
        return;
    }
    //繼續(xù)獲取token操作
    ...

SDK獲取號碼認證token(新)

開始支持的版本 2.2.0

    + (void)getToken:(NSTimeInterval)timeout completion:(void (^)(NSDictionary * result))completion;
        接口說明:
            獲取手機號校驗token

        參數(shù)說明
            completion 參數(shù)是字典 返回token 、錯誤碼等相關(guān)信息,token有效期1分鐘, 一次認證后失效
            result 字典 獲取到token時key有operator、code、token字段,獲取不到token是key為code和content字段
            timeout 超時時間(毫秒),有效取值范圍(0,10000],若小于等于0則取默認值5000.大于10000則取10000.為保證獲取token的成功率,建議設(shè)置為3000-5000ms.

        調(diào)用示例:
 [JVERIFICATIONService getToken:(NSTimeInterval)timeout completion:^(NSDictionary *result) {
        NSLog(@"getToken result:%@", result)
        //TODO:獲取token后相關(guān)操作
    }];

SDK獲取號碼認證token(舊)

開始支持的版本 1.0.0

接口定義
    + (void)getToken:(void (^)(NSDictionary * result))completion;
        接口說明:
            獲取號碼認證token,此接口已廢棄,建議使用新接口

        參數(shù)說明
            completion 參數(shù)是字典 返回token、錯誤碼等相關(guān)信息,token一次認證后失效
            result 字典 獲取到token時key有operator、code、token字段,獲取不到token時key為code和content字段

        調(diào)用示例:
    [JVERIFICATIONService getToken:^(NSDictionary *result) {
        NSLog(@"getToken result:%@", result)
        //TODO:獲取token后相關(guān)操作
    }];

說明:開發(fā)者可以通過SDK獲取token接口的回調(diào)信息來選擇驗證方式,若成功獲取到token則可以繼續(xù)使用極光認證進行號碼驗證;若獲取token失敗,需要換用短信驗證碼等方式繼續(xù)完成驗證。

SDK發(fā)起號碼認證

開始支持的版本 1.0.0

    + (void)verifyNumber:(JVAuthEntity * )entity result:(void (^)(NSDictionary * result))completion;
        接口說明:
            發(fā)起號碼認證,驗證手機號碼和本機SIM卡號碼是否一致

        參數(shù)說明:
            completion 認證結(jié)果
            result 字典 key為code和content兩個字段
            entity 認證實體類

        調(diào)用示例:
  JVAuthEntity *entity = [[JVAuthEntity alloc] init];
    entity.number = @"phone number";
    entity.token = @"your token";
    [JVERIFICATIONService verifyNumber:entity result:^(NSDictionary *result) {
        NSLog(@"verify result:%@", result);
    }];

說明:開發(fā)者調(diào)用該接口,需要在管理控制臺找到該應用,并在[認證設(shè)置]-[其他設(shè)置]中開啟[SDK發(fā)起認證],建議從開發(fā)者服務端發(fā)起號碼認證。

SDK登錄預取號

開始支持的版本 2.2.0

    + (void)preLogin:(NSTimeInterval)timeout completion:(void (^)(NSDictionary result))completion*
        接口說明:
            驗證當前運營商網(wǎng)絡(luò)是否可以進行一鍵登錄操作,該方法會緩存取號信息,提高一鍵登錄效率。建議發(fā)起一鍵登錄前先調(diào)用此方法。

        參數(shù)說明:
            completion 預取號結(jié)果
            result 字典 key為code和message兩個字段
            timeout 超時時間(毫秒),有效取值范圍(0,10000],若小于等于0則取默認值5000.大于10000則取10000.為保證獲取token的成功率,建議設(shè)置為3000-5000ms.

        調(diào)用示例:

 [JVERIFICATIONService preLogin:5000 completion:^(NSDictionary *result) {
        NSLog(@"登錄預取號 result:%@", result);
    }];

SDK請求授權(quán)一鍵登錄(新)

開始支持的版本 2.3.0

    + (void)getAuthorizationWithController:(UIViewController )vc hide:(BOOL)hide completion:(void (^)(NSDictionary result))completion
        接口說明:
            授權(quán)一鍵登錄

        參數(shù)說明:
            completion 登錄結(jié)果
            result 字典 獲取到token時key有operator、code、loginToken字段,獲取不到token是key為code和content字段
            vc 當前控制器
            hide 完成后是否自動隱藏授權(quán)頁,默認YES。若此字段設(shè)置為NO,請在收到一鍵登錄回調(diào)后調(diào)用SDK提供的關(guān)閉授權(quán)頁面方法。

        調(diào)用示例:
  [JVERIFICATIONService getAuthorizationWithController:self hide:YES completion:^(NSDictionary *result) {
        NSLog(@"一鍵登錄 result:%@", result);
    }];

SDK請求授權(quán)一鍵登錄(舊)

開始支持的版本 2.0.0

接口定義

    + (void)getAuthorizationWithController:(UIViewController )vc completion:(void (^)(NSDictionary *result))completion*
        接口說明:
            授權(quán)一鍵登錄

        參數(shù)說明:
            completion 登錄結(jié)果
            result 字典 獲取到loginToken時key有operator、code、loginToken字段,獲取不到loginToken時key為code和content字段
            vc 當前控制器

        調(diào)用示例:
  [JVERIFICATIONService getAuthorizationWithController:self completion:^(NSDictionary *result) {
        NSLog(@"一鍵登錄 result:%@", result);
    }];

SDK關(guān)閉授權(quán)頁面

開始支持的版本 2.3.0

    + (void)dismissLoginController;
        接口說明:
            關(guān)閉授權(quán)頁
        調(diào)用示例:
[JVERIFICATIONService dismissLoginController];

SDK自定義授權(quán)頁面UI樣式

開始支持的版本 2.0.0

接口定義
    + (void)customUIWithConfig:(JVUIConfig )UIConfig;*
        接口說明:
            自定義授權(quán)頁面UI樣式
        參數(shù)說明:
            UIConfig JVUIConfig的子類
        調(diào)用示例:

 /*移動*/
    JVMobileUIConfig *mobileUIConfig = [[JVMobileUIConfig alloc] init];
    mobileUIConfig.logoImg = [UIImage imageNamed:@"logo"];
    [JVERIFICATIONService customUIWithConfig:mobileUIConfig];

    /*聯(lián)通*/
    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授權(quán)頁面添加自定義控件

開始支持的版本 2.1.0

接口定義
    + (void)customUIWithConfig:(JVUIConfig )UIConfig customViews:(void(^)(UIView *customAreaView))customViewsBlk;*
        接口說明:
            自定義授權(quán)頁面UI樣式,并添加自定義控件
        參數(shù)說明:
            UIConfig JVUIConfig的子類
            customViewsBlk 添加自定義視圖的block
        調(diào)用示例:
 /*移動*/
    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];
    }];

    /*聯(lián)通*/
    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 = @[@"自定義協(xié)議1",@"https://www.jiguang.cn/push"];
    telecomUIConfig.appPrivacyTwo = @[@"自定義協(xié)議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類

聯(lián)通登錄界面UI配置類,JVUIConfig的子類。

JVTelecomUIConfig類

電信登錄界面UI配置類,JVUIConfig的子類。

錯誤碼列表

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

后續(xù)

這里我看文檔居然有寫 要傳手機號,這里比較納悶,明明是一鍵登錄,為啥要輸入手機號,以上也只是我對于極光認證文檔的一些個人總結(jié),大部分還是原文檔信息,如果最近有接觸這個業(yè)務的同學可以講下 具體的操作步驟。我看文檔也沒Demo。主要是收費的。不好操作。

這篇到此就結(jié)束了 ,希望能有人看到并解惑我的疑問吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,306評論 0 15
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,644評論 1 32
  • 一、iOS 直播聊天室 Demo 說明 1、源碼結(jié)構(gòu) 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦閱讀 2,986評論 2 7
  • 呆呆地對著屏幕 想努力的記起什么 轉(zhuǎn)而拿起手機 隨意翻開了簡書里的詩 偶讀兩三行 這次太不小心 看到了幾個虐心的零...
    留白walker閱讀 346評論 2 9
  • 大年初一,兒子們?nèi)ゼ雷?,估計會有很多話要和逝去的親人們說一說吧!但粑粑從來不表露。初一的餃子阿寶一個沒吃,反而,拿...
    灸灸微笑閱讀 119評論 0 0

友情鏈接更多精彩內(nèi)容