You need to enable JavaScript to run this app.
导航
Harmony版本
最近更新时间:2025.04.28 11:42:53首次发布时间:2025.04.28 11:42:53
我的收藏
有用
有用
无用
无用

获取SDK包与Demo

请先参照开通服务页流程获得身份认证服务授权,再下载SDK包进行使用。

SDK

BytedCertSDK_release_v2511_alpha4.har
未知大小

Demo

BytedCertSdkDemo_v2.5.11-signed.hap
未知大小

Demo工程源码

byted_cert_demo.zip
未知大小

若无火山引擎销售人员与您对接,请点击此处申请试用,咨询问题请注明为身份认证。

在工程中导入SDK

在工程中导入SDK

1. 将BytedCertSdk-release.har 引入您的工程中

  1. 拷贝BytedCertSdk-release.har 到您工程的libs目录下
  2. 配置oh-package.json5, 在oh-package.json5文件的dependencies中加入"bytedcertsdk"引用
{
  "name": "your entry",
  "version": "******",
  "description": "******",
  "main": "******",
  "author": "******",
  "license": "******",
  "dependencies": {
    .......
    "bytedcertsdk": "file:../libs/BytedCertSDK.har"
    .......
  }
}

2.在您使用sdk的Ability中添加以下权限

"requestPermissions": [
  {
    "name": "ohos.permission.CAMERA",
    "usedScene": {"abilities": ['Your Ability']},
    "reason": '$string:reason'
  },
  {
    "name": "ohos.permission.WRITE_MEDIA",
    "usedScene": {"abilities": ['Your Ability']},
    "reason": '$string:reason'
  },
  {
    "name": "ohos.permission.READ_MEDIA",
    "usedScene": {"abilities": ['Your Ability']},
    "reason": '$string:reason'
  },
  {
    "name": "ohos.permission.INTERNET",
    "usedScene": {"abilities": ['Your Ability']},
    "reason": '$string:reason'
  },
]

3. 设置Ability上下文

在你的UIAbility中,设置Context,并在APPStorage中生成一个WindowStage

onWindowStageCreate(windowStage: window.WindowStage): void {
  ....
  BytedGlobalContext.getContext().setValue(ABILITY_CONTEXT,this.context)
  AppStorage.setOrCreate(WINDOW_STAGE,windowStage)
  ....
}

4. 其他配置

本 Harmony SDK 基于 OpenHarmony SDK API Version 12 构建,推荐使用API 12以上版本开发。

调用流程
  1. 鉴权参数设置,启动风控数据上报。
    initWithAccessKeyAndSecret()
  2. 等待风控数据上报完成 (initWithAccessKeyAndSecret 接口得到CommonRequestCallback回调后可以先进行后续身份认证逻辑,得到StringResultCallback回调代表风控数据验证成功)
  3. 获取token:
    通过SDK的接口获取 bytedToken startBytedToken(),或者业务自行通过服务获取。
  4. 拉起认证页:
    startFaceCert//启动活体+身份认证

接口说明

1.入口类BytedFaceLiveManager

1.1 获取BytedFaceLiveManager单例

BytedFaceLiveManager为ArkTS单例对象

/**
 *  @return  BytedFaceLiveManager对象
 */
 
BytedFaceLiveManager.getManager();

1.2 设置鉴权参数与风控校验

使用BytedCertConfig配置初始化参数

/**
 *  @param  context: 上下文
 *  @param  BytedCertConfig: 鉴权参数信息
 *  @param  securityTokenCallback: 接口回调,返回值为dev_token(设备稳定标识),
 *                用于特殊需求自行组装端上请求,常规接入只需关注返回是否为空,返回代表风控校验完成,返回为空代表风控校验失败。
 *  @param  initCallback: 接口回调,从服务器获取鉴权相关配置后即返回,返回结构response中
 *                由于风控校验为耗时操作,不同设备上耗时表现不同。一般场景中此接口返回即可继续进行后续流程,
 *                通常情况下,最后的认证请求前都能完成风控校验,获得securityTokenCallback返回。
 *                如有极少数特殊情况,后续操作过快导致风控校验未能完成,在认证最终步骤会体现为端上风险未知造成认证失败,引导用户重新完成认证即可。
 *  @return  void
 *  默认使用正常采集模式进行风控数据采集,如需修改采集模版可以使用下面的方法设置securityMode参数实现。
 */
BytedFaceLiveManager.getManager().initWithBytedConfig(BytedCertConfig.createConfig('your AK','your SK',your context),{
  onResultFinish: (result: string): void => {
    // check dev_token
  }
},{
  onRequestFinish: (response: BDResponse): void => {  
      if(response.success){
          //do something when success
      }else{  
          //do something when success
      }
  }
})

或者采用传统方式

/**
 *  @param  context: 上下文
 *  @param  stsToken: 鉴权配置  使用临时密钥需要传入ststoken, 使用长期密钥时传null,强烈推荐使用临时密钥的方式,安全性更强
 *  @param  accessKey: 密钥ak
 *  @param  secretAccessKey: 密钥sk
 *  @param  securityMode: 风控数据采集模版/可选字段开关。MODE_DEFAULT:正常模式,MODE_MINIMIZE:基础模式。基础模版不采集可选字段,风控识别能力低,建议使用DEFAULT模式。
 *  @param  securityTokenCallback: 接口回调,返回值为dev_token(设备稳定标识),
 *                用于特殊需求自行组装端上请求,常规接入只需关注返回是否为空,返回代表风控校验完成,返回为空代表风控校验失败。
 *  @param  initCallback: 接口回调,从服务器获取鉴权相关配置后即返回
 *                由于风控校验为耗时操作,不同设备上耗时表现不同。一般场景中此接口返回即可继续进行后续流程,
 *                通常情况下,最后的认证请求前都能完成风控校验,获得securityTokenCallback返回。
 *                如有极少数特殊情况,后续操作过快导致风控校验未能完成,在认证最终步骤会体现为端上风险未知造成认证失败,引导用户重新完成认证即可。
 *  @return  void
 */
//风控模式 :MODE_NORMAL为普通模式(推荐模式)/MODE_MINIUM 为最小化模式,风控安全等级较低,不推荐

BytedFaceLiveManager.getManager().initWithAccessKeyAndSecret(your context,'your ststoken','your AK','your SK',BytedSecurityMode.MODE_NORMAL,{
  onResultFinish: (result: string): void => {
    // check dev_token
  }
},{
  onRequestFinish: (response: BDResponse): void => {  
      if(response.success){
          //do something when success
      }else{  
          //do something when success
      }
  }
})

1.3 获取token

如果从服务端获取token,则此步骤可以忽略不做

//params 
//refSource 有源/无源 开关 1有源 0无源 2单活体比对
//params 活体配置参数,可以传空,传空代表使用服务端下发配置,具体取值见3.params 活体配置参数介绍
//callback 执行完成回调 
BytedFaceLiveManager.getManager().startBytedToken(refSource: number, params: Map<string, string>, callback:{ 
  onBytedTokenFinish: (errorCode: number, errorMsg: string, bytedToken: string, jsonData: string) => void): void {
  }
}

回调数据返回值说明见身份认证增强版sdk返回内容说明

1.4 配置视频录制参数

有需要对于视频上传桶进行自定义,或者需要在端上获取视频信息的可以通过此接口进行配置。

/**
 *  @param  tosInfo:  tos配置,可空,当传空时,默认使用服务端端配置。
 *  @param  callback: 视频上传callback, 注意:返回非主线程
 *  @return  void
 */
public configRecordeAndUploadParams(tosInfo : BytedCertTosInfo | null , uploadVideoCallback : UploadVideoCallback)

Example:

let bytedTosInfo : BytedCertTosInfo = BytedCertTosInfo.createTosInfo("ak",
        "sk",
        "sts_token",
        "bucket",
        "tos-cn-beijing.volces.com",
        "cjq-test.tos-cn-beijing.volces.com");
BytedFaceLiveManager.getManager().configRecordeAndUploadParams(bytedTosInfo, {
    onUploadFinsh: (bytedToken: string, errorCode: number, errorMsg: string, filePath: string | undefined): void => {
      if(filePath){
          //use the file
          fs.rmdir(filePath)
      }else{
          //do something when failed
      }
    }
});

1.4 拉起人脸页

拉起人脸页进行有源/无源 认证,如果是在客户端获取token的话,建议在获取token成功的回调中进行此步操作

//params 
//abilityContext 当前AbilityContext
//refSource 有源/无源 开关 true有源 false无源
//faceCertConfig 认证参数
//bytedToken 唯一ID
//clientConfig : 从startBytedToken中获取,也可使用服务端中的bytedToken中返回的
//callback 执行完成回调 
BytedFaceLiveManager.getManager().startFaceCert(abilityContext,new FaceCertConfig(true,true,true),bytedToken,clientParams, {
    onCertFinish: (errorCode: number, errorMsg: string, jsonData: string, jsonDataObj: object | undefined): void => {
    if(errorCode == 0 || errorCode == 10000){
      this.showResult("认证成功")
    }else{
      this.showResult("认证失败 (" + errorCode + ")" + errorMsg)
    }
})

回调数据返回值说明见身份认证增强版sdk返回内容说明

FaceCertConfig 认证参数类:

export class FaceCertConfig{
//是否进行认证,如果只进行OCR或者只进行端活体可以为false,其他情况均为true
  needVerify : boolean = true
//认证方式 有源:1/无源:0/单活体:2
  refSource : number
//语音播报开关
  textSpeech : boolean = false
}

2. callback

2.1 UploadVideoCallback

/**
 *  onUploadFinsh参数
 *  @param  bytedToken:  视频对应的bytedToken
 *  @param  errorCode:   错误码, 成功的话为0
 *  @param  errorMsg:    错误信息 成功的话为""
 *  @param  filePath:    录制的视频路径 失败的话为undefined或""
 */
export interface UploadVideoCallback{
  onUploadFinsh:(bytedToken: string, errorCode: number, errorMsg: string, filePath: string | undefined) => void
}

2.2 CertResultCallback

返回数据jsonData的数据格式参考身份认证sdk返回内容说明

export interface CertResultCallback {
    //errorCode, 错误码
    //errorMsg,  错误信息
    //jsonData,  返回数据, 详细数据格式参考人脸核身服务端api的返回字段中的"resp_data"
    //jsonDataObj, 返回数据对象
  onCertFinish:(errorCode: number, errorMsg: string, jsonData: string, jsonDataObj: object | undefined) => void
}

2.3 SDKCallBack.BytedTokenCallback

/**
 * onResultFinish参数
 *  @param  errorCode     错误码
 *  @param errorMsg      错误信息    
 *  @param bytedToken,   返回的bytenToken值
 *  @paramd client_config  客户端配置,原样传给startFaceCert即可
 *  @paramd jsonData     服务端返回原始jsondata透传
 */
export interface BytedTokenCallback {
  onBytedTokenFinish:(errorCode: number, errorMsg: string, bytedToken: string, client_config : string, jsonData: string) => void
}

3. params 活体配置参数介绍

此字段为端上配置活体参数入口,params传空代表使用服务端下发配置
推荐活体参数配置在服务端下发,服务端下发配置可在控制台动态调整,且支持创建子应用实现配置隔离,具体控制台配置方式可以咨询客服。

key

说明

默认值

idcard_name

身份证名称, 有源比对需要传

idcard_no

身份证id,有源比对为需要传

risk_liveness_type

风险等级对应的活体类型,取值有
“motion”(动作活体),
“reflection”(炫彩活体)。
格式为json string ,各风险对应的活体类型的取值类型为String。

"risk_liveness_type":{ "free":"motion", //无风险,动作活体 "low":"motion", //低风险, 动作活体 "medium":"motion",//中风险 , 动作活体 "high":"reflection"//高风险, 动作活体 }

risk_motion_list

风险等级对应的下发动作列表,取值有
“0”(眨眼)
"1"(张嘴)
"2"(点头)
"3"(摇头)
格式为json string,各风险对应的动作的取值类型为String数组。

"risk_motion_list":{ "free":["0","1","2","3"],//无风险,全部下发 "low":["0","1","2","3"], //低风险, 全部下发 "medium":["0","1","2","3"],//中风险 , 全部下发 "high":["0","1","2","3"]//高风险, 全部下发 }

risk_motion_count

风险等级对应的下发动作数量,可选范围:[1, 4]
格式为json string,各风险对应的动作的取值类型为Int。
取值需要结合risk_motion_list配置的动作列表,风险的对应的下发动作数量不能大于对应的下发动作列表数量。

"risk_motion_count":{ ** "free":2, //无风险,下发两个动作* ** "low":2, //低风险, 下发两个动作* ** "medium":3, //中风险 , 下发三个动作* ** "high":4,//高风险, 下发两四动作* ** }*

risk_fixed_motion_list

风险等级对应的固定下发动作列表,取值有
“0”(眨眼)
"1"(张嘴)
"2"(点头)
"3"(摇头)
格式为json string,各风险对应的动作的取值类型为String数组。

默认不传

liveness_timeout

端上活体超时时长,可选范围: [5, 60]

10

max_liveness_trial

端上动作活体最大尝试次数, 可选范围:[1, 100]

10