[iOS]iOS集成移動認證(一鍵授權登錄)

最近公司要求接入移動認證SDK,實現(xiàn)手機號一鍵授權登錄功能,雖然官網(wǎng)也有demo,但我感覺官網(wǎng)demo比較復雜,在此自己寫個demo。如有侵權,請聯(lián)系刪除,謝謝。

先上demo地址
官網(wǎng)地址

集成版本號:SDK5.7.1版本

注意事項:

    1.  一鍵登錄服務必須打開蜂窩數(shù)據(jù)流量并且手機操作系統(tǒng)給予應用蜂窩數(shù)據(jù)權限才能使用
    2.  取號請求過程需要消耗用戶少量數(shù)據(jù)流量(國外漫游時可能會產(chǎn)生額外的費用)
    3.  一鍵登錄服務目前支持中國移動2/3/4G(2,3G因為無線網(wǎng)絡環(huán)境問題,時延和成功率會比4G低)和中國電信4G(如有更新會在技術溝通QQ群上通知)
    4.  (新增)建議全部SDK方法由主線程發(fā)起調(diào)用,因為SDK的數(shù)據(jù)容器就是在主線程進行讀寫操作的,如果外部發(fā)起調(diào)用SDK方法的線程不是主線程可能會導致多線程對數(shù)據(jù)容器讀寫導致崩潰
    5.  (新增)SDK不建議嵌套和并發(fā)調(diào)用,即在上一次請求未結束(未有回調(diào))馬上發(fā)起下一次請求時,第二次請求將不會有回調(diào),成功率將無法得到保證。

接入流程:

1.申請appid和appkey,前往中國移動開發(fā)者社區(qū)(dev.10086.cn),創(chuàng)建開發(fā)者賬號并申請appid和appkey,并填寫應用的包名(bundle ID)。
2.申請能力
應用創(chuàng)建完成后,在頁面左側選擇一鍵登錄能力,配置應用服務器出口IP地址(注意IP地址不能隨意寫,否則會報錯)及驗簽方式。

集成步驟:

1.  xcode版本需使用9.0以上,否則會報錯
2.  導入認證SDK的framework,直接將移動認證TYRZSDK.framework拖到項目中
3.  在Xcode中找到TARGETS-->Build Setting-->Linking-->Other Linker Flags在這選項中需要添加-ObjC
4.  注意:如果以上操作仍然出現(xiàn)unrecognized selector sent to instance找不到方法的報錯,則添加更改為_all_load
5.  資源文件:在Xcode中務必導入TYRZResource.bundle到項目中,否則授權界面顯示異常(不顯示默認圖片) TARGETS-->Build Phases-->Copy Bundle Resources-> 點擊 "+" --> Add Other --> TYRZSDK.frameWork --> TYRZResource.bundle -->Open
6.  導入sdk語句:#import <TYRZSDK/TYRZSDK.h>,導入后才能調(diào)用SDK的方法
7.  在info.plist 文件中添加一個子項目App Transport Security Settings,然后在其中添加一個key:Allow Arbitrary Loads,其值為YES。修改后其他運營商才能使用一鍵登錄。

SDK使用
初始化SDK

//初始化SDK
[UASDKLogin.shareLogin registerAppId:appId AppKey:appKey];
//開啟日志打印
[UASDKLogin.shareLogin printConsoleEnable:YES];

獲取網(wǎng)絡類型

/*
 獲取網(wǎng)絡類型
 本方法用于獲取用戶當前的網(wǎng)絡環(huán)境和運營商(雙卡下,獲取上網(wǎng)卡的運營商)
 */
-(NSDictionary *)getNetInfo{
    return [UASDKLogin.shareLogin networkInfo];
}

預取號

/*
 預取號
 本方法用于發(fā)起取號請求,SDK完成網(wǎng)絡判斷、蜂窩數(shù)據(jù)網(wǎng)絡切換等操作并緩存憑證scrip。
 */
-(void)getPhoneNumber{
    [UASDKLogin.shareLogin getPhoneNumberCompletion:^(NSDictionary * _Nonnull sender) {
        NSString *resultCode = sender[@"resultCode"];
        NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:sender];
        if ([resultCode isEqualToString:@"103000"]) {
            NSLog(@"預取號成功");
        } else {
            NSLog(@"預取號失敗");
        }
        NSLog(@"%@", result);
        [self showInfo:result];

    }];
}

拉起授權頁面

/*
 獲取token拉起授權頁面
 應用調(diào)用本方法時,SDK將拉起用戶授權頁面,用戶確認授權后,SDK將返回token給應用客戶端。可通過返回碼200087監(jiān)聽授權頁是否成功拉起。
 */
-(void)getAuthorization{
    
    UACustomModel * model = [[UACustomModel alloc] init];
    model.currentVC = self;
//    model.authPageBackgroundImage = [UIImage imageNamed:@"IMG_2924"];
    [UASDKLogin.shareLogin getAuthorizationWithModel:model complete:^(id  _Nonnull sender) {
        NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:sender];
        NSLog(@"%@", result);
        NSString *resultCode = sender[@"resultCode"];

        if ([resultCode isEqualToString:@"200087"]) {
            NSLog(@"拉起授權頁面");
        }else if ([resultCode isEqualToString:@"103000"]) {
            NSLog(@"授權完畢");
            //一下兩種方法都可行
            //系統(tǒng)原方法
//            [self dismissViewControllerAnimated:YES completion:nil];
            //SDK提供的方法
            [UASDKLogin.shareLogin ua_dismissViewControllerAnimated:YES completion:nil];

        }else{
            [self showInfo:result];
        }
        
    }];
}

本機號碼校驗

/*
 本機號碼校驗
 開發(fā)者可以在應用內(nèi)部任意頁面調(diào)用本方法,獲取本機號碼校驗的接口調(diào)用憑證(token)
 */
-(void)mobileAuth{
    [UASDKLogin.shareLogin mobileAuthCompletion:^(NSDictionary * _Nonnull result) {
        NSLog(@"%@", result);
        NSString *resultCode = result[@"resultCode"];
        if ([resultCode isEqualToString:@"103000"]) {
            NSLog(@"校驗成功");
        }else{
            NSLog(@"校驗失?。簉esultCode:%@",resultCode);
        }
        [self showInfo:result];
    }];
}

刪除臨時取號憑證

/*
 刪除臨時取號憑證
 本方法用于刪除取號方法getPhoneNumberCompletion成功后返回的取號憑證scrip
 */
-(BOOL)delectScrip{
    return  [UASDKLogin.shareLogin delectScrip];
}

自定義請求超時設置

/*
 自定義請求超時設置
 本方法用于設置取號、一鍵登錄、本機號碼校驗請求的超時時間(默認8000,單位毫秒)
 */
- (void)setTimeoutInterval:(NSTimeInterval)timeout{
    [UASDKLogin.shareLogin setTimeoutInterval:timeout];
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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