阿里实人认证作用:
通过动作活体的方式采集用户的人脸照片并验证其真实性,并通过与业务已留存的人脸照片进行人脸比对,验证两者是否为同一个人
实人认证接入流程
前往阿里云官网注册账号。如果已有注册账号,请跳过此步骤。
对该账号进行企业实名认证。如果已经是企业账号,请跳过此步骤。
打开云盾实人认证产品页面,单击立即开通,开通实人认证服务。
在接入之前,可以根据业务上的需求,先了解活体人脸验证方案,选择可以满足业务需求的认证方案。
登录阿里云实人认证控制台,在接入及设置页面,创建场景并进行相应的流程配置,具体操作见活体人脸验证场景设置。
根据接入时序图,了解客户端和服务端的交互流程,及各自需要做的事情。
接入时序图

在阿里后台设置场景

//这里仅是使用系统默认胡用户授权声明

点击获取认证SDK,上传apk,下载SDK

解压下载SDK-ANDROID.zip文件
1.将yw_1222_0670.jpg签名图片文件导入到工程应用模块的res/drawable目录下
如果工程在打包时启用了shrinkResources对资源进行压缩,还需要在keep.xml(res/raw/keep.xml)文件中添加以下内容:

2.解压client.zip包后根据上述介绍将SDK包拷入工程的libs目录下**

根据自己项目引入


关于ABI类型
SDK目前支持armeabi、armeabi-v7a、arm64-v8a三种ABI类型

android {
defaultConfig {

ndk {
abiFilters “armeabi-v7a”, “arm64-v8a”
}
}
}
关于签名配置

检查您工程的Gradle Plugin版本是否大于3.4.1,如果Gradle Plugin版本大于3.4.1,请您将Gradle Plugin版本降至3.4.1,并将Gradle版本降至5.4.1。如果无法降低Gradle Plugin及Gradle版本,需要在您工程的App模块下的build.gradle中添加签名配置,示例:
signingConfigs {
release {
// 修改为你的release签名文件信息。
storeFile file(‘test.jks’)
storePassword “test1234”
keyAlias “key0”
keyPassword “test1234”
// 修改为你的release签名文件信息。

        v1SigningEnabled truev2SigningEnabled true}debug {// 修改为你的release签名文件信息。storeFile file('test.jks')storePassword "test1234"keyAlias "key0"keyPassword "test1234"// 你的debug签名文件信息。v1SigningEnabled truev2SigningEnabled false}
}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}debug {minifyEnabled falsesigningConfig signingConfigs.debug}

}
关于混淆配置
android {

buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}
}
那么在相应的ProGuard配置文件(proguard-rules.pro)中添加以下配置信息,保证实人认证服务需要的类不被混淆,示例:
-keep class com.taobao.securityjni.{*;}
-keep class com.taobao.wireless.security.
{;}
-keep class com.ut.secbody.**{
;}
-keep class com.taobao.dp.{*;}
-keep class com.alibaba.wireless.security.
{;}
-keep class com.alibaba.security.rp.**{
;}
-keep class com.alibaba.security.cloud.{*;}
-keep class com.alibaba.security.realidentity.
{;}
-keep class com.alibaba.security.biometrics.**{
;}
-keep class com.alibaba.sdk.android.{*;}
-keep class android.taobao.windvane.
{*;}

关于权限配置
使用SDK需要在AndroidManifest.xml中添加以下权限声明(已有则忽略):

如果您使用的RPSDK版本在3.0.0.4(不含)以下,还需要添加以下权限声明(已有则忽略):

在Application里初始化RPVerify

 RPVerify.checkEnvironment(this);verifyInit = RPVerify.init(getApplicationContext());

调用实人认证
调用开始实人认证的接口前,需要您提前获取verifyToken(verifyToken由您的服务端调用发起认证请求接口DescribeVerifyToken获取),将其传入接口

RPVerify.start接口支持除RPMin外的所有认证方案,该接口会以加载H5的方式显示页面,如果您选择的认证方案只包含活体检测步骤(具体请参见认证方案),并对调起实人认证的速度有较高的要求,可以使用RPVerify.startByNative接口

//调接口,获取verifyToken
if (null != WCApplication.getInstance() && !WCApplication.getInstance().verifyInit) { //判断下初始化有没有成功
Flowable flowable = RetrofitUtil.getInstance().getServiceWithStr(getActivity()).getFaceToken(LoginHelper.get().getToken(), ll_auth_name.getContent().toString().trim(), ll_auth_id.getContent().toString().trim());
HttpUtil.getInstance().toSubscribeNoGson_(getActivity(), flowable, new RxSubscriber() {
@Override
public void onNext(String s) {
try {
JSONObject object = new JSONObject(s);
if (null != object && null != object.getString(“result”)) {
if (object.getString(“result”).equals(“200”)) {
if (null != object.getJSONObject(“data”) && !TextUtils.isEmpty(object.getJSONObject(“data”).optString(“VerifyToken”))) {
biZid = object.getJSONObject(“data”).optString(“Bizid”);
// im_head_bg.setBackground(ContextCompat.getDrawable(PersonAuthActivity.this, R.drawable.im_people_success));
im_head_bg
.setVisibility(View.VISIBLE);
im_head_bg.setVisibility(View.GONE);

                               //用获取的VerifyToken,调用实人认证方法,调起实人认证界面RPVerify.start(getActivity(), object.getJSONObject("data").optString("VerifyToken"), new RPEventListener() {@Overridepublic void onFinish(RPResult auditResult, String code, String msg) {//实人认证回调方法if (auditResult == RPResult.AUDIT_PASS) {// 认证通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理。// do somethingsuccess();//  im_head_bg.setBackground(ContextCompat.getDrawable(PersonAuthActivity.this, R.drawable.im_people_success));im_head_bg_.setVisibility(View.VISIBLE);im_head_bg.setVisibility(View.GONE);tv_status.setText("认证成功");im_status.setVisibility(View.VISIBLE);im_status_.setVisibility(View.GONE);tv_reason.setText("恭喜您认证成功");tv_next_step.setText("完成");} else if (auditResult == RPResult.AUDIT_FAIL) {// 认证不通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理。// do something//  im_head_bg.setBackground(ContextCompat.getDrawable(PersonAuthActivity.this, R.drawable.im_people_success));im_head_bg_.setVisibility(View.VISIBLE);im_head_bg.setVisibility(View.GONE);resultCode = "";failure();tv_status.setText("认证失败");im_status.setVisibility(View.GONE);im_status_.setVisibility(View.VISIBLE);tv_reason.setText("认证失败,请重新认证");tv_next_step.setText("重新认证");} else if (auditResult == RPResult.AUDIT_NOT) {//  im_head_bg.setBackground(ContextCompat.getDrawable(PersonAuthActivity.this, R.drawable.im_people_success));im_head_bg_.setVisibility(View.VISIBLE);im_head_bg.setVisibility(View.GONE);resultCode = "";if (null != auditResult) {tv_status.setText("认证失败");im_status.setVisibility(View.GONE);im_status_.setVisibility(View.VISIBLE);tv_next_step.setText("重新认证");if (code.equals("3203")) {resultCode = "3203";tv_reason.setText("原因:设备不支持扫脸");} else if (code.equals("3208")) {resultCode = "3208";tv_reason.setText("原因:公安网没有留存身份证照片");} else if (code.equals("3101")) {tv_reason.setText("原因:用户姓名身份证实名校验不匹配");} else if (code.equals("3102")) {tv_reason.setText("原因:实名校验身份证号不存在");} else if (code.equals("3103")) {tv_reason.setText("原因:实名校验身份证号不合法");} else if (code.equals("3204")) {tv_reason.setText("原因:非本人操作");} else if (code.equals("3206")) {tv_reason.setText("原因:非本人操作");} else if (code.equals("3001")) {tv_reason.setText("原因:认证token无效或已过期");} else if (code.equals("-10")) {tv_reason.setText("原因:设备问题,如设备无摄像头、无摄像头权限、摄像头初始化失败、当前手机不支持端活体算法等");} else if (code.equals("-20")) {tv_reason.setText("原因:端活体算法异常,如算法初始化失败、算法检测失败等");} else if (code.equals("-30")) {tv_reason.setText("原因:网络问题导致的异常,如网络链接错误、网络请求失败等。需要您检查网络并关闭代理");} else if (code.equals("-40")) {tv_reason.setText("原因:SDK异常,原因包括SDK初始化失败、SDK调用参数为空、活体检测被中断(如电话打断)等");} else if (code.equals("-50")) {tv_reason.setText("原因:用户活体失败次数超过限制");} else if (code.equals(" -60")) {tv_reason.setText("原因:手机的本地时间和网络时间不同步");} else if (code.equals("-10000")) {tv_reason.setText("原因:客户端发生未知错误");} else if (code.equals(" 3104")) {tv_reason.setText("原因:认证已通过,重复提交");} else {tv_reason.setText("请重新认证");}} else {tv_reason.setText("请重新认证");}failure();if (code.equals("-1")) {//tv_reason.setText("原因:用户在认证过程中,主动退出");im_head_bg_.setVisibility(View.GONE);im_head_bg.setVisibility(View.VISIBLE);ll_first.setVisibility(View.VISIBLE);ll_last.setVisibility(View.GONE);tv_next_step.setText("下一步");tv_next_step.setBackground(getResources().getDrawable(R.drawable.bg_43b9e0_radius_23_all));tv_next_step.setTextColor(getResources().getColor(R.color.main_ffff));}}}});} else {T("获取token失败");}} else if (object.getString("result").equals("201")) {T("获取token失败");return;} else if (object.getString("result").equals("401")) {T("您的认证次数过多,请联系客服操作");return;} else if (object.getString("result").equals("500")) {T("身份证已认证/审核中");return;} else if (object.getString("result").equals("501")) {T("身份证号码有误");return;} else if (object.getString("result").equals("502")) {T("身份认证信息已存在");return;} else {}}} catch (JSONException e) {e.printStackTrace();} finally {}}@Overridepublic void _onError(String msg) {T(msg);}});} else {}
}

错误码说明

运行程序,测试


在阿里后台的认证记录查询里查看认证结果

Android 接入阿里实人认证相关推荐

  1. Android端阿里云实人认证

    参数连接 Android接入 - 金融级实人认证 - 阿里云 企业认证完以后,下载aar包添加到项目中,同时添加依赖即可. 在Application 中调用初始化 ZIMFacade.install( ...

  2. 阿里实人认证java_GitHub - lap888/react-native-face-aliverify:      基于阿里金融级实人认证sdk封装分享...

    react-native-face-aliverify 基于阿里金融级实人认证sdk封装分享 小序 最初玩RN还是在2017 那时RN版本还在0.4x.x 时间过得确实有点快 最近接了一个RN的项目 ...

  3. 阿里实人认证/活体人脸认证步骤解释一下子 服务端java sdk 手把手 新手 菜 欢迎大佬提意见

    大前提,公司用,个人不建议看,因为用不起... 前提,公司是做app的,我只写服务端,移动端前台的项目也会需要开发实人认证,这里我讲不了,也不会... 公司需要更换新的实人认证接口,基于我自己的理解, ...

  4. 阿里实人认证android,Android客户端接入

    混淆配置参考 为避免接口混淆,您可以参考以下代码来保留类名: -keepclassmembers class ** { @com.squareup.otto.Subscribe public *; @ ...

  5. 阿里实人认证android,Android集成

    在工程中集成SDK 说明 对于SDK 4.4.0版本,请您务必升级SDK中的安全加固相关的aar包. 添加SDK包依赖 以直接在应用下进行集成为例,在应用module下的build.gradle文件内 ...

  6. 2.阿里实人认证 .net 准备工作2 转换demo

    1.引入阿里的SDK 2. 搬一下java 的代码 DefaultProfile profile = DefaultProfile.GetProfile( "cn-hangzhou" ...

  7. iOS开发-集成阿里云实人认证

    阿里实人认证 前言:为了让会员快速实名认证,项目中集成了阿里云实人认证,采用的是RPBioOnly方案 实人认证服务,用户流程为:仅活体检测: 由服务端换取认证 Token,并通过Binding参数传 ...

  8. 阿里云、腾讯云实人认证(身份证、人脸图像比对)

    调用第三方API,实现实名认证的功能. 阿里云实名认证 首先,导入maven依赖 <dependency><groupId>com.aliyun</groupId> ...

  9. android中集成阿里云金融级实人认证

    上个项目中有用到过这个,现在又要用到,每次都是到官网去看文档去集成,特此记录一下集成的步骤 第一步:打开官网文档阿里云金融级实人认证Android接入文档 去下载最新的sdk,集成到项目中 第二步在需 ...

最新文章

  1. 2020 最烂密码 TOP 200 大曝光,霸榜的竟然是它?
  2. (Oracle学习笔记) sql语言
  3. 基于uml的系统分析的网上商城_UML建模工具Enterprise Architect最新版有哪些新功能呢?立即查看...
  4. JUnit 5符合AssertJ
  5. 【Android实战】Gallary+ImageSwicther图片查看器
  6. LeetCode MySQL 1285. 找到连续区间的开始和结束数字(dense_rank连续排名)
  7. [Python] 将两个列表合并为字典
  8. 通过编程方式在InfoPath 2010表单的下拉框修改事件中获取数据
  9. 支付系统中人民银行支付系统(CNAPS)和中国银联下面的跨行支付系统是一回事儿吗?
  10. 《Java性能调优实战》00丨开篇词丨怎样才能做好性能调优?2022.03.08-20220329学习完
  11. Chrome调试器中的“警告:显示了临时标题”
  12. 全市场等权中位数_市场指数估值周报20200523
  13. c语言:从键盘输入两个正整数,求其最大公约数和最小公倍数
  14. vue-study-1 mvx模式
  15. 是非人生 — 一个菜鸟程序员的5年职场路 第30节
  16. cad角度怎么画_超实用的CAD制图口诀,快收藏
  17. RASA智能聊天机器人,理论与技术
  18. TCP之系统调用listen()
  19. JDK版本8u191与8u192的区别
  20. 项目管理工具project软件学习(三) - 自定义日历【6天工作日】/【大小周】

热门文章

  1. 黑莓8700软件_莓友shadywb分享:我眼中的黑莓
  2. jovi语音助手安装包_Jovi语音助手安装包下载-vivoJovi语音助手v3.1.1.0 最新版-腾牛安卓网...
  3. linux检查网络是否通畅_Shell脚本实现检测某ip网络畅通情况(含短信报警功能)
  4. sco的意思_HIV检测中的SCO值意义-3页word资料
  5. YOLO系列 yolov1 keras实现
  6. java模拟抛物线_小tips:用java模拟小球做抛物线运动
  7. 网页中嵌入QQ和邮箱
  8. HDU 2011 多项式求和
  9. android 提纲挈领
  10. 《调色师手册:电影和视频调色专业技法(第2版)》——布置调色工作间