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