金融級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讀取權限 |
依賴配置
下載Android SDK,該SDK為Android標準aar包。
下載完畢之后解壓,將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包升級為最新版本,并更新對應配置文件。