Android接入

金融级NFC认证服务提供Android客户端SDK,帮助您在业务应用(App)中实现NFC认证功能。本文结合示例代码介绍Android客户端的接入流程。

使用限制

  • 不支持模拟器模式调试。

  • 仅支持Android 4.4及以上系统版本,且设备支持NFC的移动智能设备(手机或Pad)接入。

权限说明

权限

是否必须

说明

android.permission.INTERNET

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

android.permission.ACCESS_NETWORK_STATE

android.permission.NFC

NFC读取权限

依赖配置

  1. 下载Android SDK,该SDK为Android标准aar包。

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

    重要

    代码示例中xxx表示版本号,使用过程中,请替换为Android SDK包中文件的实际版本号,即解压后的aar包名称。

    # 阿里云实人认证服务SDK AAR
    implementation files('libs/aliyun-facade-xxx.aar')
    implementation files('libs/aliyun-base-xxx.aar')
    implementation files('libs/aliyun-nfc-xxx.aar')
    
    # 阿里云实人认证服务三方依赖库,不能省略
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okio:okio:1.14.0'
    implementation 'com.alibaba:fastjson:1.2.83_noneautotype'

接口说明

Android SDK包含初始化SDK(install)、获取MetaInfos(getMetaInfos)和开始认证(verify)3个接口。

初始化SDK

  • 描述:调用该函数完成SDK内部初始化。请务必做延迟初始化配置,确保在用户同意《隐私权政策》后,在人脸识别业务场景中初始化SDK。

  • 函数原型:

    public static void install(Context context);

    IPv6网络初始化,示例代码如下:

    public static int installIPv6(Context context) 
  • 参数说明:

    名称

    类型

    说明

    context

    Context

    当前Application的context。

  • 返回值:无。

获取MetaInfos

  • 描述:移动端环境信息发送至业务服务器端,业务服务器端将这些信息作为参数之一(MetaInfos)调用服务端初始化认证接口(InitFaceVerify),从而获取CertifyId,用于后续认证环节。

  • 函数原型:

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

    名称

    类型

    说明

    context

    Context

    当前Application的context。

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

    {"deviceType":"android","appVersion":"1.0","osVersion":"11","appName":"com.aliyun.aliyunfaceDemo","nfcSupport":"Y","bioMetaInfo":"7.0.0:393216,0","deviceModel":"M2011K2C","sdkVersion":"2.2.8.1","zimVer":"1.0.0","voiceSdkVersion":"1.0.0"}

开始认证

  • 描述:调用该函数发起实人认证。

  • 函数原型:

    public void verify(final String certifyId, boolean useMsgBox,
                       HashMap<String, String> extParams,
                       ZIMCallback callback);
  • 参数说明:

    参数

    类型

    说明

    certifyId

    String

    从服务端初始化认证接口(InitFaceVerify-发起NFC认证请求)获取的CertifyId。

    说明

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

    useMsgBox

    boolean

    当认证过程中出现异常情况,是否使用SDK内部的弹框提示。取值:

    • true:SDK先弹框提示,确定之后,返回错误code。

    • false:不弹提示框,直接返回错误code。

    用户根据业务应用App自行决定如何提示。

    extParams

    HashMap<String, String>

    用户自定义参数,一般传NULL即可。

    callback

    ZIMCallback

    认证结果的回调接口,定义如下:

    public interface ZIMCallback {
     boolean response(ZIMResponse response);
    }

    ZIMResponse类的定义,请参见认证结果及错误码

  • 返回值:无。

认证结果及错误码

认证结果通过ZIMResponse类返回,定义如下:

public class ZIMResponse {
 /**
 * 返回结果编码
 */
 public int code;

 /**
 * 返回结果原因信息
 */
 public String reason;

 // ......
}

错误码

错误码文案

错误码描述

1000

认证成功

代表认证成功。

说明

该结果仅供参考,可通过调用服务端DescribeFaceVerify-查询NFC认证结果接口获取最终认证结果。

1001

系统错误

表示系统错误。

1003

验证中断

表示验证中断。

2002

网络错误

表示网络错误。

2003

客户端设备时间错误

表示客户端设备时间错误。

2006

认证失败

表示认证失败。

说明

如需获取更详细的失败原因,需调用DescribeFaceVerify-查询NFC认证结果服务端接口获取。

说明

更多错误码信息,请参见金融级NFC认证Android客户端错误码详情

接口混淆配置

为避免接口被混淆而造成功能异常,您需要在App工程的proguard-rules.pro文件中添加如下配置信息:

-keep class com.alipay.deviceid.** { *; }
-keep class net.security.device.api.** {*;}
-keep class org.json.** { *;}
-keep class com.alibaba.fastjson.** {*;}

-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**

-keepclassmembers,allowobfuscation class * {
     @com.alibaba.fastjson.annotation.JSONField <fields>;
}

示例代码

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;

import com.alipay.face.api.ZIMCallback;
import com.alipay.face.api.ZIMFacade;
import com.alipay.face.api.ZIMFacadeBuilder;
import com.alipay.face.api.ZIMResponse;

public class MainActivity extends Activity {

    private String certifyId = "xxx";

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

        Context ctx = getApplicationContext();

        // 初始化SDK
        ZIMFacade.install(ctx);

        // 获取MetaInfos
        String metaInfos = ZIMFacade.getMetaInfos(ctx);

        // 将MetaInfos发送到App服务器端,调用云端InitFaceVerify接口获取CertifyId。
        // certifyId = getCertifyIdFromServer(metaInfo); // 需客户自己实现

        // 开始验证
        ZIMFacade zimFacade = ZIMFacadeBuilder.create(ctx);
        zimFacade.verify(certifyId, true, null, new ZIMCallback() {
            @Override
            public boolean response(final ZIMResponse response) {
                if (1000 == response.code) {
                    Log.d("AliyunFace", "认证成功。");
                } else {
                    Log.e("AliyunFace", "认证失败。");
                }
                return true;
            }
        });
    }
}

Demo代码包

您可以下载Android Demo代码包进行体验。

升级注意事项

如果您在使用金融级NFC认证之前接入过金融级实人认证方案,您只需要将项目中相关的AAR包升级为最新版本,并更新对应配置文件。