1. 云盾·实人认证
使用这个服务需要先去阿里云开通,开通免费,使用收费
什么是实人认证?
计费说明
2. 认证方案
认证方案介绍
1.RPBasic
: 活体检测 + 拍摄证件正反面 + 证件 OCR 信息确认;
2.RPManual
: 手输姓名身份证号 + 活体检测;
3.RPBioID
: 活体检测 + 拍摄证件正反面;
4.RPBioOnlyPro
: 仅活体检测(绝大多数用户)/ 活体检测 + 拍摄证件正反面(少数比对源信息老旧的用户);
5.RPBioOnly
: 仅活体检测;
6.FVBioOnly
: 仅活体检测;
7.RPH5BioOnly
(H5+服务端接入): 仅活体检测;
8.RPMin
(纯服务端接入): 用户流程由业务方自行组织;
上面几种方式都需要服务端
配合接入,这里我选用的是RPBioID
, 认证方案具体区别请点击上方超链接
3. 无线端接入
3.1 下载无线SDK:https://help.aliyun.com/document_detail/59341.html?spm=a2c4g.11186623.6.568.x5dPRG
注意 :这里需要先登陆阿里云账号,并开通云盾·实人认证
功能,然后上传自己项目的ipa
包阿里会给你生成一个定制版的SDK
,具体步骤可以去看上方链接;
说明 :iOS SDK
与BundleID
绑定,不同BundleID
需要在管理控制台上重新下载SDK。
坑:如果下载下来的SDK不是zip
格式的(现在好像已经支持下载其他格式的SDK了),是exec
格式的,不能直接解压,在mac上暂时还没有找到合适的解压工具;
解决办法:可以在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 引入系统依赖和编译配置 - 相关链接:
3.2.3 先编译一下吧,如果没问题的话,直接跳到下一步;
看一下我的编译报错:
去一探究竟吧:
这样看起来两个framework内容也不一样啊,怎么办呢,也没有存在相同的文件,难道要删除其中一个framework吗?删除哪一个呢,删除SGMain.framework肯定不行,人脸识别肯定需要用到,那就找技术问一下吧,网页咨询客服和一通电话之后,联系到了阿里的技术小哥哥,加了钉钉,开始咨询问题;
把SecurityEnvSDK.framework从pods中移除之后,又出现了新的报错:
到此,编译成功,以后如果删除pods中的依赖库,就需要注意上面的坑;
3.2.4 接下来去测试了一遍推送,还好没受到影响,然后去调用人脸识别测试吧;
补充:开发前一定要仔细阅读RPSDK.framework/Headers/RPSDK.h
文件,选择适合自己的RPSDK
初始化方式以及认证启动方式,官方文档和下方我的代码示例仅供参考
因为认证前和认证后需要通知后台去查询获取认证资料,并且项目中需要多个地方调用,所以我封装了认证类代码:
#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 - 实人认证
- (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"];
//开始实名认证
[RPSDK start:certToken rpCompleted:^(AUDIT auditState) {
NSLog(@"verifyResult = %ld",(unsigned long)auditState);
BOOL auditResult = NO;
if (auditState == AUDIT_PASS) { //认证通过
auditResult = YES;
//通知后台去获取用户认证资料
[self certificationSuccessWithTicketId:ticketId];
} else if (auditState == AUDIT_FAIL) { //认证不通过
[MBProgressHUD showError:@"认证失败"];
} else if (auditState == AUDIT_IN_AUDIT) { //认证中,通常不会出现,只有在认证审核系统内部出现超时,未在限定时间内返回认证结果时出现。此时提示用户系统处理中,稍后查看认证结果即可。
[MBProgressHUD showError:@"认证中"];
} else if (auditState == AUDIT_NOT) { //未认证,用户取消
[MBProgressHUD showError:@"取消认证"];
} else if (auditState == AUDIT_EXCEPTION) { //系统异常
[MBProgressHUD showError:@"系统异常"];
}
if (result) {
result(auditResult);
}
} withVC:navigationController];
} else {
//该用户已经认证
if (result) {
result(YES);
}
}
} fail:^(NSError *error) {
if (error) {
[MBProgressHUD showError:@"请求失败"];
}
}];
}
#pragma mark - 认证成功,通知后台查询获取认证资料
- (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:@"请求失败"];
}
}];
}
@end
接下来直接在需要判断实人认证的控制器中引入头文件,调用即可;
if ([HYXTools getLoginStatusWithUrl:@""]) {
[[RealPeopleCertification shareInstance] startRealPeopleCertificationWithVC:self.navigationController result:^(BOOL isSuccess) {
if (isSuccess) { //认证通过
} else { //认证失败
}
}];
}