iOS开发实战 - 接入阿里云实人认证

1. 云盾·实人认证

使用这个服务需要先去阿里云开通,开通免费,使用收费
什么是实人认证?
计费说明

2. 认证方案

认证方案介绍
1.RPBasic: 活体检测 + 拍摄证件正反面 + 证件 OCR 信息确认;
2.RPManual: 手输姓名身份证号 + 活体检测;
3.RPBioID: 活体检测 + 拍摄证件正反面;
4.RPBioOnlyPro: 仅活体检测(绝大多数用户)/ 活体检测 + 拍摄证件正反面(少数比对源信息老旧的用户);
5.RPBioOnly: 仅活体检测;
6.FVBioOnly: 仅活体检测;
7.RPH5BioOnly(H5+服务端接入): 仅活体检测;
8.RPMin(纯服务端接入): 用户流程由业务方自行组织;
上面几种方式都需要服务端配合接入,这里我选用的是RPBioID, 认证方案具体区别请点击上方超链接

RPBioID

开发必读

系统时序图
3. 无线端接入
3.1 下载无线SDK:https://help.aliyun.com/document_detail/59341.html?spm=a2c4g.11186623.6.568.x5dPRG

注意 :这里需要先登陆阿里云账号,并开通云盾·实人认证功能,然后上传自己项目的ipa包阿里会给你生成一个定制版的SDK,具体步骤可以去看上方链接;

说明iOS SDKBundleID绑定,不同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 先编译一下吧,如果没问题的话,直接跳到下一步;

看一下我的编译报错:


显示有4个重复的对象,SecurityEnvSDK和SGMain

去一探究竟吧:


位于pods中的友盟推送的SecurityEnvSDK.framework

SGMain.framework

这样看起来两个framework内容也不一样啊,怎么办呢,也没有存在相同的文件,难道要删除其中一个framework吗?删除哪一个呢,删除SGMain.framework肯定不行,人脸识别肯定需要用到,那就找技术问一下吧,网页咨询客服和一通电话之后,联系到了阿里的技术小哥哥,加了钉钉,开始咨询问题;
咨询截图

把SecurityEnvSDK.framework从pods中移除之后,又出现了新的报错:


lALPBbCc1cggXdrM8M0FeA_1400_240.png

咨询截图 - link中并没有SecurityEnvSDK的影子
解决办法
发现在.debug.cconfig和.release.cconfig中并没有把"SecurityEnvSDK删除掉"
找到上图画线部分的SecurityEnvSDK.framework,并删除,我这里已经移除了

到此,编译成功,以后如果删除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 { //认证失败

    }
  }];
}
项目演示
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容