请先参照开通服务页流程获得身份认证服务授权,再下载SDK包进行使用。
若无火山引擎销售人员与您对接,请点击此处申请试用,咨询问题请注明为身份认证。
{ "name": "your entry", "version": "******", "description": "******", "main": "******", "author": "******", "license": "******", "dependencies": { ....... "bytedcertsdk": "file:../libs/BytedCertSDK.har" ....... } }
"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' }, ]
在你的UIAbility中,设置Context,并在APPStorage中生成一个WindowStage
onWindowStageCreate(windowStage: window.WindowStage): void { .... BytedGlobalContext.getContext().setValue(ABILITY_CONTEXT,this.context) AppStorage.setOrCreate(WINDOW_STAGE,windowStage) .... }
本 Harmony SDK 基于 OpenHarmony SDK API Version 12 构建,推荐使用API 12以上版本开发。
initWithAccessKeyAndSecret()
startBytedToken()
,或者业务自行通过服务获取。startFaceCert//启动活体+身份认证
BytedFaceLiveManager为ArkTS单例对象
/** * @return BytedFaceLiveManager对象 */ BytedFaceLiveManager.getManager();
使用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 } } })
如果从服务端获取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返回内容说明
有需要对于视频上传桶进行自定义,或者需要在端上获取视频信息的可以通过此接口进行配置。
/** * @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 } } });
拉起人脸页进行有源/无源 认证,如果是在客户端获取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 }
/** * 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 }
返回数据jsonData的数据格式参考身份认证sdk返回内容说明
export interface CertResultCallback { //errorCode, 错误码 //errorMsg, 错误信息 //jsonData, 返回数据, 详细数据格式参考人脸核身服务端api的返回字段中的"resp_data" //jsonDataObj, 返回数据对象 onCertFinish:(errorCode: number, errorMsg: string, jsonData: string, jsonDataObj: object | undefined) => void }
/** * 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 }
此字段为端上配置活体参数入口,params传空代表使用服务端下发配置
推荐活体参数配置在服务端下发,服务端下发配置可在控制台动态调整,且支持创建子应用实现配置隔离,具体控制台配置方式可以咨询客服。
key | 说明 | 默认值 |
---|---|---|
idcard_name | 身份证名称, 有源比对需要传 | |
idcard_no | 身份证id,有源比对为需要传 | |
risk_liveness_type | 风险等级对应的活体类型,取值有 | "risk_liveness_type":{ "free":"motion", //无风险,动作活体 "low":"motion", //低风险, 动作活体 "medium":"motion",//中风险 , 动作活体 "high":"reflection"//高风险, 动作活体 } |
risk_motion_list | 风险等级对应的下发动作列表,取值有 | "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] | "risk_motion_count":{ ** "free":2, //无风险,下发两个动作* ** "low":2, //低风险, 下发两个动作* ** "medium":3, //中风险 , 下发三个动作* ** "high":4,//高风险, 下发两四动作* ** }* |
risk_fixed_motion_list | 风险等级对应的固定下发动作列表,取值有 | 默认不传 |
liveness_timeout | 端上活体超时时长,可选范围: [5, 60] | 10 |
max_liveness_trial | 端上动作活体最大尝试次数, 可选范围:[1, 100] | 10 |