1. 云盾·實(shí)人認(rèn)證
使用這個(gè)服務(wù)需要先去阿里云開通睁蕾,開通免費(fèi)棚辽,使用收費(fèi)
什么是實(shí)人認(rèn)證?
計(jì)費(fèi)說明
2. 認(rèn)證方案
認(rèn)證方案介紹
1.RPBasic
: 活體檢測 + 拍攝證件正反面 + 證件 OCR 信息確認(rèn);
2.RPManual
: 手輸姓名身份證號(hào) + 活體檢測;
3.RPBioID
: 活體檢測 + 拍攝證件正反面;
4.RPBioOnlyPro
: 僅活體檢測(絕大多數(shù)用戶)/ 活體檢測 + 拍攝證件正反面(少數(shù)比對(duì)源信息老舊的用戶);
5.RPBioOnly
: 僅活體檢測;
6.FVBioOnly
: 僅活體檢測颓鲜;
7.RPH5BioOnly
(H5+服務(wù)端接入): 僅活體檢測;
8.RPMin
(純服務(wù)端接入): 用戶流程由業(yè)務(wù)方自行組織轰绵;
上面幾種方式都需要服務(wù)端
配合接入扼菠,這里我選用的是RPBioID
, 認(rèn)證方案具體區(qū)別請(qǐng)點(diǎn)擊上方超鏈接
3. 無線端接入
3.1 下載無線SDK:https://help.aliyun.com/document_detail/59341.html?spm=a2c4g.11186623.6.568.x5dPRG
注意 :這里需要先登陸阿里云賬號(hào),并開通云盾·實(shí)人認(rèn)證
功能萄窜,然后上傳自己項(xiàng)目的ipa
包阿里會(huì)給你生成一個(gè)定制版的SDK
铃剔,具體步驟可以去看上方鏈接;
說明 :iOS SDK
與BundleID
綁定查刻,不同BundleID
需要在管理控制臺(tái)上重新下載SDK键兜。
坑:如果下載下來的SDK不是zip
格式的(現(xiàn)在好像已經(jīng)支持下載其他格式的SDK了),是exec
格式的穗泵,不能直接解壓普气,在mac上暫時(shí)還沒有找到合適的解壓工具;
解決辦法:可以在windows上右擊文件通過解壓工具打開(如:winrar
)佃延,然后就能拿到里面的依賴包现诀,和資源文件;
3.2 iOS集成:https://help.aliyun.com/document_detail/57932.html?spm=a2c4g.11186623.6.570.JOzYu9d
3.2.1 引入外部依賴
3.2.2 引入系統(tǒng)依賴和編譯配置 - 相關(guān)鏈接:
3.2.3 先編譯一下吧惧辈,如果沒問題的話莽使,直接跳到下一步;
看一下我的編譯報(bào)錯(cuò):
去一探究竟吧:
這樣看起來兩個(gè)framework內(nèi)容也不一樣啊成福,怎么辦呢,也沒有存在相同的文件荆残,難道要?jiǎng)h除其中一個(gè)framework嗎奴艾?刪除哪一個(gè)呢,刪除SGMain.framework肯定不行内斯,人臉識(shí)別肯定需要用到握侧,那就找技術(shù)問一下吧,網(wǎng)頁咨詢客服和一通電話之后嘿期,聯(lián)系到了阿里的技術(shù)小哥哥,加了釘釘埋合,開始咨詢問題备徐;
把SecurityEnvSDK.framework從pods中移除之后,又出現(xiàn)了新的報(bào)錯(cuò):
到此秀菱,編譯成功,以后如果刪除pods中的依賴庫蹭睡,就需要注意上面的坑衍菱;
3.2.4 接下來去測試了一遍推送,還好沒受到影響肩豁,然后去調(diào)用人臉識(shí)別測試吧脊串;
補(bǔ)充:開發(fā)前一定要仔細(xì)閱讀RPSDK.framework/Headers/RPSDK.h
文件,選擇適合自己的RPSDK
初始化方式以及認(rèn)證啟動(dòng)方式清钥,官方文檔和下方我的代碼示例僅供參考
因?yàn)檎J(rèn)證前和認(rèn)證后需要通知后臺(tái)去查詢獲取認(rèn)證資料琼锋,并且項(xiàng)目中需要多個(gè)地方調(diào)用,所以我封裝了認(rèn)證類代碼:
#import <Foundation/Foundation.h>
#import <RPSDK/RPSDK.h>
@interface RealPeopleCertification : NSObject
+ (RealPeopleCertification *)shareInstance;
- (void)startRealPeopleCertificationWithVC:(UINavigationController *)navigationController result:(void (^)(BOOL isSuccess))result;
@end
#import "RealPeopleCertification.h"
@implementation RealPeopleCertification
+ (RealPeopleCertification *)shareInstance {
static RealPeopleCertification *realPeopleCertification;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
realPeopleCertification = [[RealPeopleCertification alloc]init];
});
return realPeopleCertification;
}
#pragma mark - 實(shí)人認(rèn)證
- (void)startRealPeopleCertificationWithVC:(UINavigationController *)navigationController result:(void (^)(BOOL isSuccess))result {
[YQHttpRequest getHeaderData:nil url:@"/user/getVerifyToken" success:^(id responseDic) {
if ([[responseDic allKeys] containsObject:@"token"]) {
NSString *ticketId = responseDic[@"ticketId"];
NSString *certToken = responseDic[@"token"];
//開始實(shí)名認(rèn)證
[RPSDK start:certToken rpCompleted:^(AUDIT auditState) {
NSLog(@"verifyResult = %ld",(unsigned long)auditState);
BOOL auditResult = NO;
if (auditState == AUDIT_PASS) { //認(rèn)證通過
auditResult = YES;
//通知后臺(tái)去獲取用戶認(rèn)證資料
[self certificationSuccessWithTicketId:ticketId];
} else if (auditState == AUDIT_FAIL) { //認(rèn)證不通過
[MBProgressHUD showError:@"認(rèn)證失敗"];
} else if (auditState == AUDIT_IN_AUDIT) { //認(rèn)證中祟昭,通常不會(huì)出現(xiàn)缕坎,只有在認(rèn)證審核系統(tǒng)內(nèi)部出現(xiàn)超時(shí),未在限定時(shí)間內(nèi)返回認(rèn)證結(jié)果時(shí)出現(xiàn)篡悟。此時(shí)提示用戶系統(tǒng)處理中谜叹,稍后查看認(rèn)證結(jié)果即可。
[MBProgressHUD showError:@"認(rèn)證中"];
} else if (auditState == AUDIT_NOT) { //未認(rèn)證搬葬,用戶取消
[MBProgressHUD showError:@"取消認(rèn)證"];
} else if (auditState == AUDIT_EXCEPTION) { //系統(tǒng)異常
[MBProgressHUD showError:@"系統(tǒng)異常"];
}
if (result) {
result(auditResult);
}
} withVC:navigationController];
} else {
//該用戶已經(jīng)認(rèn)證
if (result) {
result(YES);
}
}
} fail:^(NSError *error) {
if (error) {
[MBProgressHUD showError:@"請(qǐng)求失敗"];
}
}];
}
#pragma mark - 認(rèn)證成功荷腊,通知后臺(tái)查詢獲取認(rèn)證資料
- (void)certificationSuccessWithTicketId:(NSString *)ticketId {
NSDictionary *dataDic = @{@"ticketId":ticketId};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dataDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[YQHttpRequest postBodyData:jsonString url:@"/user/realPersonAuthentication" success:^(id responseDic) {
} fail:^(NSError *error) {
if (error) {
[MBProgressHUD showError:@"請(qǐng)求失敗"];
}
}];
}
@end
接下來直接在需要判斷實(shí)人認(rèn)證的控制器中引入頭文件,調(diào)用即可踩萎;
if ([HYXTools getLoginStatusWithUrl:@""]) {
[[RealPeopleCertification shareInstance] startRealPeopleCertificationWithVC:self.navigationController result:^(BOOL isSuccess) {
if (isSuccess) { //認(rèn)證通過
} else { //認(rèn)證失敗
}
}];
}