Android接入

本文结合代码示例介绍信息核验-身份核验产品方案的Android接入流程。

使用限制

仅支持Android 4.3及以上系统版本的移动智能设备(手机或平板)接入。不支持x86架构。

权限说明

为提升安全效果,当前SDK需要以下权限:

权限

是否必须

说明

android.permission.INTERNET

联网相关权限。Android SDK需要联网才能使用。

android.permission.ACCESS_NETWORK_STATE

否(推荐开启)

android.permission.CAMERA

摄像头相关权限。该权限在Android 6.0及以上版本属于动态权限。

android.permission.READ_PHONE_STATE

否(推荐开启)

android.permission.READ_EXTERNAL_STORAGE

否(推荐开启)

SDK下载和配置

  1. 下载Android-CardVerifySDK,该SDKAndroid标准aar包。

  2. 下载完毕之后解压,将Android SDK文件夹中的所有aar文件拷贝到工程下的libs目录中,并在工程的build.gradle文件中添加如下依赖。

// SDK modules 
implementation files('libs/aliyun-identitybase-meta-sdk-xxx.aar') 
implementation files('libs/aliyun-identityocrservice-meta-sdk-xxx.aar') 
implementation files('libs/aliyun-identitycrypto-meta-sdk-1.0.0.aar') 
implementation files('libs/aliyun-identityplatform-meta-sdk-1.0.0.aar') 
implementation files('libs/aliyun-identityocr-meta-sdk-xxx.aar') 
implementation files('libs/aliyun-identitymnn-meta-sdk-xxx.aar')
// SDK third-party dependency modules 
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:2.2.2'
implementation 'com.aliyun.dpa:oss-android-sdk:2.9.4'
implementation 'com.alibaba:fastjson:1.1.72.android'
说明
  • 上述依赖中,xxx代表SDK的具体版本号。

  • 使用中不能缺少三方依赖库,否则会导致SDK功能异常。

接口说明

Android SDK包含初始化SDK(install)、获取MetaInfo(getMetaInfo)和开始认证(verify)接口。

初始化SDK(install)

  • 函数原型:

    public void install(Context context);
  • 参数说明:

    名称

    类型

    说明

    context

    Context

    当前Applicationcontext。

获取MetaInfo (getMetaInfo)

  • 函数原型:

    public static String getMetaInfo(Context context);
  • 参数说明:

    名称

    类型

    说明

    context

    Context

    当前Applicationcontext。

  • 返回值:String类型,以JSON格式返回当前移动设备端的环境信息。返回值示例如下:

    {
      "apdidToken": "",
      "appName": "com.aliyun.identity.platform",
      "appVersion": "1.0.1",
      "bioMetaInfo": "5.1.0:11501568,4",
      "deviceBrand": "xxx",
      "deviceManufacturer": "xxx",
      "deviceModel": "xxx",
      "deviceType": "android",
      "identityVer": "1.0.0",
      "osVersion": "10",
      "sdkVersion": "1.0.9"
    }

开始认证(verify)

重要
  • 调用此方法前,请确认您已将 MetaInfo 传递至服务端,并通过 InitCardVerify 接口获取了 certifyId

  • 从服务端获取的 certifyId 对应 verify 方法中的 transactionId 参数。

  • 函数原型:

    public void verify(String transactionId, Map<String, String> extParams, IdentityCallback callback);
  • 参数说明:

    名称

    类型

    说明

    transactionId

    String

    从服务端初始化认证接口(InitCardVerify)获取的certifyId

    重要

    每个transactionId只能调用一次verify函数,每次调用verify函数之前务必重新获取transactionId。

    extParams

    Map<String, String>

    扩展参数,通常情况下传null即可。

    目前支持的自定义字段,extParams配置说明在下方表格中列出。

    callback

    IdentityCallback

    认证结果的回调接口,回调中的返回码参见IdentityResponse.code

    回调格式如下:

    public class IdentityResponse {
        // See the description of "Return Code".
        public int code;
    
        // Result code description.
        public String message;
    }
    
    public interface IdentityCallback {
        boolean response(IdentityResponse response);
    }
  • extParams配置说明:

    Key

    说明

    示例(String类型)

    IdentityParams.OcrResultButtonColor

    OCR识别结果页面的底部按钮颜色。

    #FF0000

    IdentityParams.RoundProgressColor

    扫脸时的圆圈颜色。

    #FF0000

    IdentityParams.ShowBlbumIcon

    证件OCR识别环节,是否展示相册上传入口:

    • 1:展示(默认)

    • 0:不展示

    1

    IdentityParams.CardOcrTimeOutPeriod

    OCR识别环节超时时长。

    可设置范围为20~60秒,默认20秒。

    20

    IdentityParams.SdkLanguage

    SDK默认支持的多语言语种如下:

    • zh-Hans:中文简体

    • zh-Hant:中文繁体

    • en:英文

    • ja:日文

    • ko:韩文

    • id:印尼语

    • ms:马来语

    • th:泰语

    • vi:越南语

    说明

    除上述默认支持的语言外,SDK还支持客户自定义语言,请参见新增语言

    zh-Hans

    CloseButtonLayout

    关闭按钮的布局:

    • left:左侧(默认)

    • right:右侧

    left

  • IdentityResponse.code表:

    错误码

    是否计费

    结果码描述

    1000

    用户完成认证了过程,认证建议结果为通过。该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果,并进行下一步处理。

    1001

    用户完成了认证过程,认证建议结果为未通过。该结果仅供参考,可通过调用服务端CheckResult接口获取最终认证结果、未通过的详细原因,并进行下一步处理。

    1002

    系统错误。

    1003

    SDK初始化失败,请确认客户端时间是否正确。

    1004

    相机权限错误。请参考以下步骤尝试解决:

    1. 在认证前请先确保App已获取到相机权限。

    2. 如已授权仍提示无权限,请尝试清除App缓存后重试。

    1005

    网络错误。

    1006

    用户退出。

    1007

    TransactionId无效.

    1009

    客户端时间戳错误。

    1011

    提交证件类型错误。

    1012

    识别出的证件关键信息缺失或格式校验失败。

    1013

    图片质量不佳。

    1014

    错误次数超出上限。

    1015

    安卓系统版本过低。

    1016

    未获取到相机权限。

新增语言

新增自定义语言,则需要执行以下操作实现:

  1. 打开App应用工程(集成ID Verification SDKmodule)。

  2. 在应用工程下创建目标语言文件夹及 string.xml 语言资源文件。以新增俄罗斯语言为例,在主module工程下面新建俄罗斯语言的values文件夹,将string.xml添加到对应的语言文件夹下面,其他语言同理。

image

  1. string.xml文件中的value内容自行翻译成对应的语言。可参考附录1中的模板,将中文修改成目标语言。

  2. 在代码中指定自定义的目标语言,格式:“language-country”。如下示例代码以设置俄罗斯语为例:

image

示例代码

public class MainActivity extends AppCompatActivity {
  private String transactionId = "";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // 初始化SDK
      IdentityPlatform.getInstance().install(MainActivity.this);

      // 获取MetaInfo
      String metaInfo = IdentityPlatform.getMetaInfo(MainActivity.this);

      /**
       * 将MetaInfo发送到App服务器端,调用云端InitCardVerify接口获取transactionId
       */
      // transactionId = getTransactionIdFromServer(metaInfo);

      // 设置SDK语言
      Map<String, String> extParams = new HashMap<>();
      extParams.put(IdentityParams.SdkLanguage, "en");
      // 开始认证
      IdentityPlatform.getInstance().verify(transactionId, extParams,
            new IdentityCallback() {
                @Override
                public boolean response(final IdentityResponse response) {
                    if (IdentityResponseCode.IDENTITY_SUCCESS == response.code) {
                        Toast.makeText(MainActivity.this,
                                "Verification passed", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(MainActivity.this,
                                "Verification failed([" + response.code + "]" +
                                        response.message + ")",
                                Toast.LENGTH_LONG).show();
                    }
                    return true;
                }
            });
  }
}

混淆配置

-verbose
-keep class com.aliyun.identity.platform.api.** {*;}
-keep class com.aliyun.identity.IdentityUtils {*;}
-keep class com.aliyun.identity.ocr.IdentityOcrApi {*;}
-keep class com.aliyun.identity.platform.model.** {*;}
-keep class com.aliyun.identity.platform.config.** {*;}

-keep class com.aliyun.meta.verify.service.algorithm.** {*;}
-keep class com.aliyun.meta.verify.base.algorithm.** {*;}
-keep class com.aliyun.meta.verify.service.ocr.IdentityDocService {*;}
-keep class com.alibaba.fastjson.** {*;}
-keep class com.aliyun.identity.platform.log.** {*;}//日志模块混淆,可选

Demo代码包

您可以下载AliyunIdcardVerifyDemo.zip进行体验。