金融級實人認證服務提供Harmony客戶端SDK,幫助您在業務應用(App)中實現刷臉認證功能。本文將結合示例代碼進行Harmony客戶端接入的詳細說明。
使用限制
刷臉應用必須運行在Harmony Next 4.1及以上版本。
不支持模擬器模式調試。
權限說明
Harmony SDK權限說明如下:
權限 | 是否必須 | 說明 |
ohos.permission.INTERNET | 是 | 聯網權限。SDK需要聯網才能使用。 |
ohos.permission.GET_NETWORK_INFO | 否 | 網絡狀態確認。SDK可以根據網絡狀態提供更好的服務。 |
ohos.permission.CAMERA | 是 | 攝像頭權限。 |
依賴配置
下載Harmony SDK并解壓。
該SDK為Harmony的har包。
將HAR文件復制到存放HAR包的工程目錄中。
建議參考鴻蒙官方文檔放至libs目錄下,在工程根目錄的
oh-package.json5
添加認證包的版本依賴樹管理,示例如下:修改項目工程中的
oh-package.json5
文件,在dependencies
中添加AliyunFacade、AuthBase、LivenessVerify、OcrVerify、AliyunFaceGuard依賴包,示例如下:說明代碼示例中xxx表示版本號,使用過程中,請替換為SDK包中文件的實際版本號。
{ .... "dependencies": { "AliyunFacade" : "file:./libs/AliyunFacade-xxx.har", "AuthBase" : "file:./libs/AuthBase-xxx.har", "LivenessVerify" : "file:./libs/LivenessVerify-xxx.har", "OcrVerify": "file:./libs/OcrVerify-xxx.har", "AliyunFaceGuard": "file:./libs/AliyunFaceGuard-xxx.har" .... } }
接口說明
Harmony SDK包含初始化(init、initIPv6)、獲取MetaInfos(getMetaInfos)和開始認證(verify)3個核心接口。
初始化SDK
描述:調用該函數完成SDK內部初始化。請務必做延遲初始化配置,確保在用戶同意《隱私權政策》后,在人臉識別業務場景中初始化SDK。
函數原型:
public init(context: Context, params?: HashMap<string, string>): number public initIPv6(context: Context, params?: HashMap<string, string>): number
說明請根據實際情況選用IPv4或者IPv6網絡環境進行業務調用。
參數說明:
名稱
類型
說明
context
Context
當前Ability的Context。
params
HashMap<string, string>
自定義參數,可不傳。
返回值:Number類型。0表示初始化無異常。
獲取metaInfos
描述:移動端環境信息會發送至業務服務器端,業務服務器端將這些信息作為參數之一(MetaInfos)調用服務端初始化認證接口,從而獲取認證報文,用于后續認證環節。
函數原型:
public static getMetaInfos(context: Context, params?: HashMap<string, string>): string
參數說明:
名稱
類型
說明
context
Context
當前Ability的Context
params
HashMap<string, string>
自定義參數,可不傳。
返回值:String類型,以JSON格式返回當前移動設備端環境以及SDK信息。
{ "deviceType": "harmony", "osVersion": "2", "osFullName": "2.1.6.1(Beta1)", "deviceModel": "NOH-AN00", "appName": "com.dtf.faceverify", "appVersion": "1.0.0", "nfcSupport": "N", "bioMetaInfo": "7.1.2:393216,0", "apdidToken": "", "sdkVersion": "1.1.0", "securityVersion": "", "zimVer": "", "voiceSdkVersion": "" }
發起認證
描述:調用該函數發起實人認證。
函數原型:
public static verify(context: UIContext | Context, callBack: ZimCallBack, params?: HashMap<string, string>): void
參數說明:
名稱
類型
說明
context
UIContext 或 Context
當前Ability的UIContext或Context。
重要請優先傳遞UIContext,可避免Harmony系統兼容性的問題。
certifyID
String
認證ID。您可以通過服務端發起申請請求接口(InitFaceVerify)獲取該參數。
callBack
ZimCallBack
認證結果的回調接口,定義如下:
export interface ZimCallBack { onComplete: (response: ZimResponse) => void; encrypt: (content: string) => string; }
ZIMResponse類的定義,請參見下文認證結果及錯誤碼。
params
HashMap<string, string>
自定義參數,需要根據要求傳入數據。params取值,請參見表 2. params取值說明。
表 1. ZimCallBack接口回調說明
方法
說明
示例值
onComplete
SDK認證結果回調
參考ZimResponse類定義
表 2. params取值說明
取值
說明
示例值
ext_params_key_use_message_box
當刷臉認證過程中出現異常情況,是否使用SDK內部的彈框提示。取值:
true:SDK先彈框提示,確定之后,返回錯誤code。
false:不彈提示框,直接返回錯誤code,客戶業務應用App自行決定如何提示。
true
ext_params_key_open_full_screen
進入SDK認證后是否開啟全屏顯示,SDK默認會開啟全屏顯示以保證顯示正常。設置單次有效。
true:開啟全屏顯示。
false:關閉全屏顯示。
true
ext_params_key_use_video
是否返回活體認證視頻。取值:
true:可在response.videoPath或在服務端查詢接口獲取視頻路徑。
false:不返回活體認證視頻(默認)。
true或者false
返回值:無。
認證結果及錯誤碼
認證結果通過ZIMResponse類返回,定義如下:
/*
* 結果返回
*/
export class ZimResponse {
/**
* 結果碼主碼
*/
public code: string;
/**
* 結果碼子碼
*/
public subCode: string;
/**
* 錯誤原因
*/
public msg: string;
/**
* 留證視頻路徑
*/
public videoPath: string;
}
錯誤碼 | 錯誤碼文案 | 錯誤碼描述 |
1000 | 刷臉成功 | 表示SDK活檢成功,該結果僅供參考,可通過調用服務端DescribeFaceVerify接口獲取最終認證結果。 |
1001 | 系統錯誤 | 表示系統錯誤。 |
1003 | 驗證中斷 | 表示驗證中斷。 |
2002 | 網絡錯誤 | 表示網絡錯誤。 |
2003 | 客戶端設備時間錯誤 | 表示客戶端設備時間錯誤。 |
2006 | 刷臉失敗 | 表示刷臉失敗,如需獲取更詳細的失敗原因,需調用服務端DescribeFaceVerify接口獲取。 |
更多subCode錯誤碼信息,請參見金融級客戶端錯誤碼詳情 - Harmony。
接口混淆配置
為避免接口被混淆而造成功能異常,請查看har包中obfuscation.txt
文件中的配置,請勿移除該文件。
示例代碼
import { ZimConstant, ZimFacade, ZimResponse } from 'aliyunfacade';
import { HashMap } from '@kit.ArkTS';
import { JSONUtil, StringUtil } from 'authbase';
@Entry
@Component
struct Index {
@State message: string = '發起認證';
@State certifyID: string = ''
build() {
Row() {
Column() {
TextInput({ placeholder: '請輸入certifyID', text: this.certifyID })
.onChange((value: string) => {
this.certifyID = value;
})
.margin({ left: 20, right: 20 })
Button(this.message)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.onClick((event: ClickEvent) => {
let params: HashMap<string, string> = new HashMap();
// SDK 全屏顯示,默認為true
params.set(ZimConstant.KEY_NEED_FULL_SCREEN, 'true');
// SDK 展示對客彈窗信息,默認為true
params.set(ZimConstant.KEY_USE_MESSAGE_BOX, 'true');
ZimFacade.verify(this.getUIContext(), this.certifyID, {
onComplete: (response: ZimResponse) => {
let result: HashMap<string, string> = new HashMap();
result.set('code', response.code);
result.set('subCode', response.subCode);
result.set('msg', response.msg);
result.set('certifyID', this.certifyID);
this.certifyID = '';
if (response.faceImage) {
result.set('faceImage', 'data:image/jpg;base64,' + StringUtil.base64Uint8Array(response.faceImage))
} else {
result.set('faceImage', '');
}
let showParams: string = JSONUtil.parseMapToString(result);
console.log("Aliyun", showParams);
}
}, params)
})
.margin({ top: 10 })
}
.width('100%')
}
.height('100%')
}
aboutToAppear(): void {
ZimFacade.init(getContext());
}
}