本文介紹FACE_GUARD的Harmony端接入流程。
使用須知
整合FACE_GUARD的應用,依賴業務側具備成熟的Face Service演算法和風險策略營運體系。建議您可以先和商務經理溝通評估業務情境匹配程度。
Harmony SDK使用限制如下:
不支援模擬器模式調試。
Harmony Next (0.0.71)及以上版本,API版本最低支援12。
僅支援開啟位元組碼加密方案。
接入步驟
前期準備
接入前需要進行許可權配置和SDK依賴配置,您可以參考下面的步驟操作。
許可權說明
依賴配置
介面混淆配置(重要)
調用SDK
前期準備完成後,可按照下面三個步驟完成用戶端接入。
1. 初始化(initWithOptions)
SDK 內部初始化,在 App 啟動的時候,您需要儘可能早地調用該函數 。請參考接入流程,在[時機1]調用初始化 initWithOptions 介面。
多線程情境下初始化介面需要在主線程調用,且應用的生命週期內只需要調用1次。
函數原型
public initWithOptions(ctx: Context, userProductKey: string, options: Map<string, string>, securityInitListener: SecurityInitListener): void參數說明
ctx:當前 UIContext 或 Context ,可使用 getContext() 方法擷取。
userProductKey:用於標識使用者身份,阿里雲分配的產品 AppKey(不同於AK),請聯絡商務經理擷取。
重要整合FACE_GUARD的應用,依賴業務側具備成熟的Face Service演算法和風險策略營運體系。建議您可以先和商務經理溝通評估業務情境匹配程度。
options:資訊採集可選項,預設可以為null。選擇性參數如下:
說明ID Verification用戶端內建裝置助手安全模組,為了滿足不同地區資料收集合規要求,提供了不同的資料上報地區。您可以基於使用者屬性不同,設定CustomUrl和CustomHost指定不同的上報網站。
注意:一次應用會話生命週期內只能指定一個地區上報,且服務端查詢時地區需要和上報地區保持一致。
指定網站上報:
新加坡網站(預設):
https://cloudauth-device.ap-southeast-1.aliyuncs.com印尼網站:
https://cloudauth-device.ap-southeast-5.aliyuncs.com美西(矽谷):
https://cloudauth-device.us-west-1.aliyuncs.com德國(法蘭克福):
https://cloudauth-device.eu-central-1.aliyuncs.com中國香港:
https://cloudauth-device.cn-hongkong.aliyuncs.com
不同產品服務端支援的地區,參考:支援的地區。
欄位名
說明
樣本
IPv6
是否使用IPv6網域名稱上報裝置資訊:
0(預設):否(使用IPv4網域名稱)
1:是(使用IPv6網域名稱)
"1"
DataSwitch
裝置資訊上報時機。
0(預設):初始化時
1:擷取Token時
說明建議採用預設配置。
"1"
CustomUrl
設定資料上報伺服器網域名稱。
"https://cloudauth-device.ap-southeast-1.aliyuncs.com"
CustomHost
設定資料上報伺服器host。
"cloudauth-device.ap-southeast-1.aliyuncs.com
securityInitListener:初始化回調監聽介面, 可在回調中判斷初始化是否成功, 預設可以傳入null,code 欄位取值範圍可參考code傳回值 。
調用樣本
@State USER_PRODUCT_KEY: string = "123e4567e89b12d3a45642661417****"; let options: Map<string, string> = new Map<string, string>(); options.set("IPv6", "0"); // 設定為IPv4 options.set("DataSwitch", "0"); // 設定為初始化階段採集 // 設定自訂的資料上報地區 // options.set("CustomUrl", "xxx"); 設定上報網站Url // options.set("CustomHost", "xxx"); 設定上報網站Host // 標準調用(推薦) FaceSecDevice.getInstance().initWithOptions(getContext(), this.USER_PRODUCT_KEY, options, null); // 回調調用 FaceSecDevice.getInstance().initWithOptions(this.context, this.USER_PRODUCT_KEY, options, { onInitFinish(code: number) { if (FaceSecCode.SC_SUCCESS != code) { console.log("AliyunFaceGuard 初始化失敗"); } else { console.log("AliyunFaceGuard 初始化成功"); } } });
2. 擷取用戶端token(getDeviceToken)
擷取用戶端 token,請參考接入流程在[時機2]進行調用,並上報到業務自己的伺服器,後續通過伺服器端查詢FACE_GUARD介面(FaceGuardRisk),從而擷取用戶端裝置風險識別資訊。
函數原型
// 推薦傳入bizId public getDeviceToken(bizId?: string): SecurityToken參數
bizId:客戶的業務ID,可用於關聯業務ID和token。預設情況可以不傳。
傳回值
FaceSecToken 類型,屬性如下:
public class FaceSecToken { // 介面調用狀態代碼 public code: number = 0; // 用於伺服器端查詢結果的token字串。 public token: string = ""; }code:返回介面調用狀態代碼,可用於判斷介面調用是否成功。
token:返回 token 字串資訊,商務就緒後續查詢FACE_GUARD的FaceGuardRisk介面。
調用樣本
// 傳入bizId樣本,bizId為客戶的業務ID,可以選擇是否傳入。 let bizId = "1234567890abcdef1234567890ab****" let tokenObj: FaceSecToken = FaceSecDevice.getInstance().getDeviceToken(bizId); if (tokenObj.code == FaceSecCode.SC_SUCCESS) { console.log("Aliyun Token: " + tokenObj.token); } else { console.log("Aliyun Code: " + tokenObj.code); }
3. 攜帶Token請求服務端
成功擷取deviceToken(FaceSecToken.token)後,可攜帶此參數請求商務服務器,由服務端查詢並校正結果。具體操作,請參見服務端API介面。
完整程式碼範例
import { FaceSecCode, FaceSecToken, FaceSecDevice } from 'aliyunfaceguard';
@Entry
@Component
struct Index {
@State message: string = 'AliyunFaceGuard';
@State USER_PRODUCT_KEY: string = "<請聯絡商務經理擷取>";
build() {
Row() {
Column() {
Button(this.message)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.onClick((event: ClickEvent) => {
// 初始化SDK
// 在App生命週期中只需要調用1次
// 建議在接入流程時機1調用initWithOptions介面
this.doInit();
// 此處等待2s僅類比人臉認證流程
setTimeout(() => {
// 建議在接入流程時機3調用getDeviceToken介面
this.doGetToken();
}, 2000);
})
.margin({ top: 10 })
}
.width('100%')
}
.height('100%')
}
doInit(): void {
let options: Map<string, string> = new Map<string, string>();
options.set("IPv6", "0"); //設定IPv4模式
options.set("DataSwitch", "0"); //設定init階段採集資料
// options.set("CustomUrl", "xxx"); 設定上報網站Url
// options.set("CustomHost", "xxx"); 設定上報網站Host
FaceSecDevice.getInstance().initWithOptions(getContext(), this.USER_PRODUCT_KEY, options, null);
}
doGetToken(): void {
// 傳入bizId樣本,bizId為客戶的業務ID,可以選擇是否傳入。
let bizId = "1234567890abcdef1234567890ab****"
let tokenObj: FaceSecToken = FaceSecDevice.getInstance().getDeviceToken(bizId);
if (tokenObj.code == FaceSecCode.SC_SUCCESS) {
console.log("Aliyun Token: " + tokenObj.token);
} else {
console.log("Aliyun Code: " + tokenObj.code);
}
}
}