最近公司要求接入移動認(rèn)證SDK氏仗,實(shí)現(xiàn)手機(jī)號一鍵授權(quán)登錄功能赂乐,雖然官網(wǎng)也有demo丢烘,但我感覺官網(wǎng)demo比較復(fù)雜碍讨,在此自己寫個demo。如有侵權(quán)鸟顺,請聯(lián)系刪除次坡,謝謝疼约。
集成版本號:SDK5.7.1版本
注意事項(xiàng):
1. 一鍵登錄服務(wù)必須打開蜂窩數(shù)據(jù)流量并且手機(jī)操作系統(tǒng)給予應(yīng)用蜂窩數(shù)據(jù)權(quán)限才能使用
2. 取號請求過程需要消耗用戶少量數(shù)據(jù)流量(國外漫游時可能會產(chǎn)生額外的費(fèi)用)
3. 一鍵登錄服務(wù)目前支持中國移動2/3/4G(2,3G因?yàn)闊o線網(wǎng)絡(luò)環(huán)境問題溺拱,時延和成功率會比4G低)和中國電信4G(如有更新會在技術(shù)溝通QQ群上通知)
4. (新增)建議全部SDK方法由主線程發(fā)起調(diào)用逃贝,因?yàn)镾DK的數(shù)據(jù)容器就是在主線程進(jìn)行讀寫操作的,如果外部發(fā)起調(diào)用SDK方法的線程不是主線程可能會導(dǎo)致多線程對數(shù)據(jù)容器讀寫導(dǎo)致崩潰
5. (新增)SDK不建議嵌套和并發(fā)調(diào)用盟迟,即在上一次請求未結(jié)束(未有回調(diào))馬上發(fā)起下一次請求時秋泳,第二次請求將不會有回調(diào)潦闲,成功率將無法得到保證攒菠。
接入流程:
1.申請appid和appkey,前往中國移動開發(fā)者社區(qū)(dev.10086.cn)歉闰,創(chuàng)建開發(fā)者賬號并申請appid和appkey辖众,并填寫應(yīng)用的包名(bundle ID)。
2.申請能力
應(yīng)用創(chuàng)建完成后和敬,在頁面左側(cè)選擇一鍵登錄能力凹炸,配置應(yīng)用服務(wù)器出口IP地址(注意IP地址不能隨意寫,否則會報錯)及驗(yàn)簽方式昼弟。
集成步驟:
1. xcode版本需使用9.0以上啤它,否則會報錯
2. 導(dǎo)入認(rèn)證SDK的framework,直接將移動認(rèn)證TYRZSDK.framework拖到項(xiàng)目中
3. 在Xcode中找到TARGETS-->Build Setting-->Linking-->Other Linker Flags在這選項(xiàng)中需要添加-ObjC
4. 注意:如果以上操作仍然出現(xiàn)unrecognized selector sent to instance找不到方法的報錯,則添加更改為_all_load
5. 資源文件:在Xcode中務(wù)必導(dǎo)入TYRZResource.bundle到項(xiàng)目中,否則授權(quán)界面顯示異常(不顯示默認(rèn)圖片) TARGETS-->Build Phases-->Copy Bundle Resources-> 點(diǎn)擊 "+" --> Add Other --> TYRZSDK.frameWork --> TYRZResource.bundle -->Open
6. 導(dǎo)入sdk語句:#import <TYRZSDK/TYRZSDK.h>变骡,導(dǎo)入后才能調(diào)用SDK的方法
7. 在info.plist 文件中添加一個子項(xiàng)目App Transport Security Settings离赫,然后在其中添加一個key:Allow Arbitrary Loads,其值為YES塌碌。修改后其他運(yùn)營商才能使用一鍵登錄渊胸。
SDK使用
初始化SDK
//初始化SDK
[UASDKLogin.shareLogin registerAppId:appId AppKey:appKey];
//開啟日志打印
[UASDKLogin.shareLogin printConsoleEnable:YES];
獲取網(wǎng)絡(luò)類型
/*
獲取網(wǎng)絡(luò)類型
本方法用于獲取用戶當(dāng)前的網(wǎng)絡(luò)環(huán)境和運(yùn)營商(雙卡下,獲取上網(wǎng)卡的運(yùn)營商)
*/
-(NSDictionary *)getNetInfo{
return [UASDKLogin.shareLogin networkInfo];
}
預(yù)取號
/*
預(yù)取號
本方法用于發(fā)起取號請求台妆,SDK完成網(wǎng)絡(luò)判斷翎猛、蜂窩數(shù)據(jù)網(wǎng)絡(luò)切換等操作并緩存憑證scrip。
*/
-(void)getPhoneNumber{
[UASDKLogin.shareLogin getPhoneNumberCompletion:^(NSDictionary * _Nonnull sender) {
NSString *resultCode = sender[@"resultCode"];
NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:sender];
if ([resultCode isEqualToString:@"103000"]) {
NSLog(@"預(yù)取號成功");
} else {
NSLog(@"預(yù)取號失敗");
}
NSLog(@"%@", result);
[self showInfo:result];
}];
}
拉起授權(quán)頁面
/*
獲取token拉起授權(quán)頁面
應(yīng)用調(diào)用本方法時接剩,SDK將拉起用戶授權(quán)頁面切厘,用戶確認(rèn)授權(quán)后,SDK將返回token給應(yīng)用客戶端搂漠∮芈可通過返回碼200087監(jiān)聽授權(quá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(@"拉起授權(quán)頁面");
}else if ([resultCode isEqualToString:@"103000"]) {
NSLog(@"授權(quán)完畢");
//一下兩種方法都可行
//系統(tǒng)原方法
// [self dismissViewControllerAnimated:YES completion:nil];
//SDK提供的方法
[UASDKLogin.shareLogin ua_dismissViewControllerAnimated:YES completion:nil];
}else{
[self showInfo:result];
}
}];
}
本機(jī)號碼校驗(yàn)
/*
本機(jī)號碼校驗(yàn)
開發(fā)者可以在應(yīng)用內(nèi)部任意頁面調(diào)用本方法桐汤,獲取本機(jī)號碼校驗(yàn)的接口調(diào)用憑證(token)
*/
-(void)mobileAuth{
[UASDKLogin.shareLogin mobileAuthCompletion:^(NSDictionary * _Nonnull result) {
NSLog(@"%@", result);
NSString *resultCode = result[@"resultCode"];
if ([resultCode isEqualToString:@"103000"]) {
NSLog(@"校驗(yàn)成功");
}else{
NSLog(@"校驗(yàn)失敹恕:resultCode:%@",resultCode);
}
[self showInfo:result];
}];
}
刪除臨時取號憑證
/*
刪除臨時取號憑證
本方法用于刪除取號方法getPhoneNumberCompletion成功后返回的取號憑證scrip
*/
-(BOOL)delectScrip{
return [UASDKLogin.shareLogin delectScrip];
}
自定義請求超時設(shè)置
/*
自定義請求超時設(shè)置
本方法用于設(shè)置取號、一鍵登錄怔毛、本機(jī)號碼校驗(yàn)請求的超時時間(默認(rèn)8000员萍,單位毫秒)
*/
- (void)setTimeoutInterval:(NSTimeInterval)timeout{
[UASDKLogin.shareLogin setTimeoutInterval:timeout];
}