# AIkit命令词识别 iOS SDK 文档

# 1. 离线命令词能力简介(能力id:e75f07b62)

用户对设备(手机、玩具、家电等)说出操作指令(即“命令词”),设备即作出相应的反馈,开启语音交互。
支持多实例并发:否
协议类型:同步流式

# 2. 授权说明

授权方式支持【设备授权】和【应用授权】2种。
-设备授权: 按照设备数和有效期授权,激活设备数达到授权量上限后,新设备将无法继续激活使用。SDK采集多个设备标识按照权重算法生成设备指纹精准标识设备,计量准确。支持所有平台。
-应用授权: 对指定应用授权,仅可在授权的应用上使用,无数量限制,可限制有效期。需提供应用唯一标识,授权能力后,应用级授权支持Android、iOS平台应用。
能力激活支持【在线激活】和【离线激活】2种方式。在能力首次使用时,需要先激活后方可使用。激活时会获取授权license缓存到设备内部存储中。
在线激活: 在首次使用时,需要将设备联网,SDK初始化时获取授权license激活。设备激活后,即可在无网环境下使用。如果有恢复出厂设置或清空应用缓存等操作,将license清除后,能力将无法正常使用,将设备联网重启应用即可恢复。适用于设备可联网场景,激活过程简单。

# 3. 兼容性说明

类别 兼容范围
系统 支持iOS 9.0以上版本
机型 iOS 9.0以上设备
网络 设备具备联网条件,可使用在线激活方式,首次使用需要连接网络。
开发环境 建议使用 xcode 进行开发

# 4. SDK包组成

DEMO 中已经集成了SDK, 您可以参考DEMO,集成SDK。集成前,请先测通DEMO,了解调用原理。如果您自己代码过于复杂,可以使用一个helloworld项目了解集成过程。

将SDK zip包解压缩,得到如下文件:

  • Demo //能力SDK Demo、SDK使用说明readme.txt,示例能力调用
  • SDK //能力SDK,导入SDK库时使用
  • AEEResource.boundle //能力对应模型资源,多能力组合时,resource文件夹中包含多个子文件夹
  • 测试报告 //SDK 测试报告
  • ReleaseNotes.txt //SDK版本日志

# 5. 接口调用流程

接口调用流程图

# 6. 快速集成指南

# 6.1 导入SDK库

AIKit iOS SDK 核心代码库由AIKIT.framework 和能力引擎framework 组成。
AIKIT.framework 、引擎framework 均是动态库。
在引入工程中时,在工程的General的frameworks,Libraries,and Embedded Content 中使用Embedded & sign。
示例如下

添加动态库

# 6.2 资源导入

使用 AIKit iOS SDK 提供的能力时,还需要有配套的AI能力模型资源。AIKit 的资源全部存放在AEEResource.boundle下,开发者需将其添加到工程中。

# 6.3 设置BitCode

AIKit iOS SDK暂不支持Bitcode,Xcode 7、Xcode 8默认开启了Bitcode,而Bitcode 需要工程依赖的所有类库同时支持,可关闭此设置,只需在Targets - Build Settings 中搜索Bitcode 即可,找到相应选项,设置为NO。

接口调用流程图

# 6.4 SDK初始化

在使用能力前,需要首先初始化SDK,使用SDK提供的单能力或组合能力时,SDK均只需要初始化一次。

// SDK初始化
- (int)initSDK {
  [AiHelper initSDK:^(AiHelperMaker *maker) {
    maker.appId(APPID)
      .apiKey(APIKEY)
      .apiSecret(APISECRET)
      .ability(@"e75f07b62");
  }];
}

如上代码所示,SDK初始化参数中appId、apiKey、apiSecret为必填项。
初始化参数通过AiHelperMaker构造,各初始化参数含义如下:

参数 类型 必填 说明
appID String 应用ID
apiKey String 离线引擎托管平台创建应用后,生成的唯一应用标识
apiSecret String 离线引擎托管平台创建应用后,生成的唯一应用秘钥
ability String SDK v2.2.13+版本新增接口,传入需要用到的一个或多个能力ID,格式为"xxxx1;xxxx2",多个能力ID中间用 英文分号 隔开
workDir String SDK工作目录,默认路径为 "Documents/aikit"
userDeviceId String 用户自定义设备标识,需要服务端配置开启支持后才支持使用,建议设置长度低于256
authType int 离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP)
resDir String 指定资源读取路径,不设置默认从工程中AIKITResource.bundle中读取
batchID String 授权批次ID,扩展字段,暂未生效
authInterval int 在线授权校验间隔时长,默认为300s,可自定义设置,最短为60s,最长为24小时,单位秒

# 6.5 注册回调代理

能力结果可通过registerAbilityCallback 注册回调对象,对象需实现AIKitCoreDelegate协议,根据业务需要可为每个能力单独注册回调,或注册一个统一回调。

@interface callback : NSObject<AIKitCoreDelegate>
// 构建实现AIKitCoreDelegate协议的callback类
@end

@implementation callback
// 实现数据回调函数
- (void)aikitOnResult:(NSString *)ability
             handleId:(NSInteger)handleId
           outputData:(NSArray<AIKITDataModel *> *)data
               usrCtx:(AIKITCtxContent *)context {
    for (AIKITDataModel *model in data) {
        //获取到结果key 和 reslut
        NSString *key = model.key;
        NSData *value = [[NSData alloc] initWithBytes:model.value length:model.len];
  }
}
// 实现事件回调函数
- (void)aikitOnEvent:(NSString *)ability
            handleId:(NSInteger)handleId
               event:(NSInteger)event
           eventData:(NSArray<AIKITDataModel *> *)data
              usrCtx:(AIKITCtxContent *)context {
    // do something to output event
    if (event == AIKIT_EVENT_START) {
    // 引擎计算开始
     } else if (event == AIKIT_EVENT_PROGRESS) {
    // 引擎计算中
     } else if (event == AIKIT_EVENT_END) {
    // 引擎计算结束
  }
}
// 实现错误信息回调函数
- (void)aikitOnError:(NSString*)ability
            handleId:(NSInteger)handleId
               error:(AIKITError*)error
              usrCtx:(AIKITCtxContent*)context {
    // do something to output error
if (error) {
    NSLog(@"引擎错误,错误类型:%d, 错误码:%d, 错误描述:%@",error.type, error.code, error.description);
  }
}
@end
//支持设置一个全局回调,在方法中通过abilityId区分能力,也支持为每一个能力单独设置回调
 callback* cb = [[callback alloc] init];
[AiHelper registerAppCallback:cb];                           // global callback :注册为全局级别回调
 //[AiHelper registerAbilityCallback:@"e75f07b62" callback:cb] // ability callback:注册为能力级别回调

aikitOnResult参数说明

参数 类型 说明
ability NSString* 能力标识ID
handleId NSInteger 能力标识ID
outputData NSArray* 能力执行结果
usrCtx AIKITCtxContent* 用户自定义标识

事件回调 aikitOnEvent参数说明

参数 类型 说明
ability NSString* 能力标识ID
handleId NSInteger 会话id
event enum 0=未知;1=开始;2=结束;3=超时;4=进度
eventData NSArray* 事件消息数据
usrCtx AIKITCtxContent* 用户自定义标识

aikitOnError:错误回调

参数 类型 说明
handleId NSInteger 会话id
usrCtx AIKITCtxContent* 用户自定义标识
ability NSString* 能力标识ID
error AIKitError* 错误消息数据

AIKITDataModel对象

参数 类型 说明
key NSString* 输出数据名称
type enum 输出数据类型,1=文本;
value void* 输出数据
varType enum 输出数据变量类型,0=字节数组;1=整型;2=实型;3=布尔型
len int 输出数据长度
status int 输出数据状态,0=首数据;1=中间数据;2=尾数据;3=非会话单次输入输出

# 6.6 引擎初始化

在调用能力前,需先初始化引擎,引擎只需初始化一次。引擎初始化方法示例代码如下:

AIKITParameters *engineParams = [[AIKITParameters alloc] init]; [engineParams addString:decNetType value:$paramValue]; [engineParams addDouble:punishCoefficient value:[$paramValue doubleValue]];
//[engineParams addString:savePath value:$paramValue];
[engineParams addInt:wfst_addType value:[$paramValue intValue]];
int ret = [AiHelper initEngine:self.ability param:engineParams];

引擎功能参数说明:

功能标识 功能描述 数据类型 取值范围 必填 默认值
decNetType 解码类型 string fsa:命令词, wfst:wfst解码, wfst_fsa:混合解码
punishCoefficient fsa惩罚分数 double 最小值:0, 最大值:10
savePath 个性化资源保存路径 string 最小长度:0, 最大长度:32
wfst_addType 选择加载wfst资源 int 0:中文, 1:英文

initEngine 方法说明:

参数 类型 必填 说明
ability NSString* 能力标识ID
engineParams AIKITParameters* 引擎初始化参数构造器,key、value参考引擎参数说明

返回:

0=成功,其他=错误

# 6.7 配置自定义命令词

命令词一般由用户自定义配置在配置文件中,通过loadData方法可配置多个命令词文件,用户根据业务需求通过specifyDataSet方法设置要生效的命令词文件。
每次会话时,均需要调用specifyDataSet 设置要生效的命令词,loadData 方法初始化之后调用一次即可。
SDK 配置自定义命令词示例代码如下:个性化数据一般为用户自定义配置文件,用户根据业务需求配置个性化数据,SDK加载个性化数据示例代码如下:

AIKITCustomData *customData = [[AIKITCustomData alloc] init];
[customData addTextPath:custom1 key:@"FSA" index:0];
[customData addTextPath:custom1 key:@"FSABIN" index:0];

[AiHelper loadData:e75f07b62 data:customData];
int indexs[] = {0};
[AiHelper specifyDataSet:e75f07b62 key:@"FSA" indexs:indexs count:1];
int indexs[] = {0};
[AiHelper specifyDataSet:e75f07b62 key:@"FSABIN" indexs:indexs count:1];

AIKITCustomData *preData = [[AIKITCustomData alloc] init];
[preData addTextPath:$path key:@"FSA" index:indexs];
[preData addTextPath:$path key:@"FSABIN" index:indexs];

ret = [AiHelper preProcess:e75f07b62 data:preData];

个性化数据参数说明
数据段名称:FSA 数据类型:文本
数据段名称:FSABIN 数据类型:文本
loadData 方法参数说明:设置命令词配置文件,可设置多个,初始化前调用一次即可。

参数 类型 必填 说明
abilityId String 能力标识ID
customData AIKITCustomData* 个性化数据构造器

specifyDataSet 方法参数说明:指定要使用的个性化数据集合,每次会话开启前需要调用。

参数 类型 必填 说明
abilityId String 能力标识ID
key String 个性化资源key
indexs int[] 个性化资源索引

preProcess方法参数说明:为避免个性化数据重复加载耗时,可调用该预处理方法,对原始个性化资源进行预处理,再次调用能力时,则引擎会自 动加载预处理后的资源。

参数 类型 必填 说明
abilityId String 能力标识ID
preData AIKITCustomData* 预处理后的个性化资源

# 6.8 能力调用接口

# 6.8.1 创建能力会话

通过 start 方法开启会话,传入当前能力所需要指定的参数。示例代码如下:

AIKITParameters *abilityParams = [[AIKITParameters alloc] init];
[abilityParams addInt:languageType value:"$paramValue"];
[abilityParams addBool:vadOn value:"$paramValue"];
//[abilityParams addBool:vadLinkOn value:"false"];
[abilityParams addInt:vadEndGap value:"$paramValue"];
//[abilityParams addInt:beamThreshold value:20];
//[abilityParams addInt:hisGramThreshold value:3000];
//[abilityParams addInt:vadSpeechEnd value:80];
//[abilityParams addInt:vadResponsetime value:1000];
//[abilityParams addBool:postprocOn value:"false"];
AiHandle *handle = [AiHelper start:e75f07b62 param:abilityParams  ctxContent:$usrContext];
if (!handle.isSuccess) {
    return;
}

功能参数:

功能标识 功能描述 数据类型 取值范围 必填 默认值
languageType 语种类型 int 0:中文, 1:英文
vadOn 开启vad bool true:开启, false:关闭
vadLinkOn vad子句连接 bool true:开启, false:关闭 false
vadEndGap 子句分割时间间隔,中文建议60,英文建议75 int 最小值:0, 最大值:100
beamThreshold 解码控制beam的阈值,中文建议20,英文建议25 int 最小值:0, 最大值:100 20
hisGramThreshold 解码Gram阈值,建议值3000 int 最小值:1, 最大值:10000 3000
vadSpeechEnd vad后段点 int 最小值:0, 最大值:999999 80
vadResponsetime vad前端点 int 最小值:0, 最大值:999999 1000
postprocOn 后处理开关 bool true:开启, false:关闭 false

start 方法说明:

参数 类型 必填 说明
ability String 能力标识ID
abilityParams AIKITParameters* 能力参数配置,可设置一个或多个
usrContext AEECtxContent* 用户自定义标识

返回:AiHandle

AiHandle对象内部提供isSuccess方法,用于判断会话是否启动成功,通过code属性获取错误码,异常错误请参考文档末尾“常见错误码”章节。

# 6.8.2 送入数据

通过调用 write 方法送入能力输入数据。 write方法参数说明如下:

参数 类型 必填 说明
input AIKITInputData* 构造能力输入数据及数据描
handle AiHandle* 会话的handle对象

数据构建API参考“7.2节 能力输入数据”说明,送入代码实现数据如下:

AIKITInputData *dataBuilder = AIKITInputData.instance();
//输入音频数据
  AIAudio *audio = AIAudio
        .get("audio")          //必填项:输入输入音频key
        .data(part)                //必填项:part为 NSData* 类型输入数据
        .status(DataStatusBegin)    //非必填:设置输入数据状态,可参考文档7.2节说明及Demo
        .valid();                  //必填项:输入数据合法性检查
  dataBuilder.payload(audio);
int ret = [AiHelper write:dataBuilder handle:$handle];
if (ret != 0) {
    return;
}

能力输入数据

数据段名称:audio 数据类型:音频

以下是音频输入参数含义说明:

字段 含义 数据类型 取值范围 默认值 说明 必填
encoding 音频编码 string lame, speex, opus, speex-wb speex-wb 取值范围可枚举
sample_rate 采样率 int 16000, 8000 16000 音频采样率,可枚举
channels 声道数 int 1, 2 1 声道数,可枚举
bit_depth 位深 int 16, 8 16 单位bit,可枚举
data 音频数据 string 音频大小:0-10M
frame_size 帧大小 int 最小值:0, 最大值:1024 0 帧大小,默认0

# 6.8.3 获取能力输出结果

送入数据后,需要调用read方法读取能力结果,能力结果通过回调代理接口返回,代理实现参考6.5节。
read方法为阻塞式方法,当次送入数据处理完毕读取到结果后会返回结果状态码。如果有多次输入,读取到当次结果后,方可进行下一次数据输入。

read方法调用方法如下:

ret = [AiHelper read:handle];  // result is output in callback function:$(onResult)
if (ret != 0) {
  NSLog("read error code=%d",ret);
  return;
}

read方法说明:

参数 类型 必填 说明
handle AiHandle* AIKIT_Start生成的会话handle

结果将通过实现AIKitCoreDelegate协议的callback类onResult方法返回,callback 实现可参考6.5节;能力结果数据格式及含义如下:

  • 能力结果数据格式及含义如下:
    数据段名称:data 数据类型:文本

    以下是文本输出参数含义说明:

    字段 含义 数据类型 取值范围 默认值 说明 必填
    encoding 文本编码 string utf8, gb2312 utf8 取值范围可枚举
    compress 文本压缩格式 string raw, gzip raw 取值范围可枚举
    format 文本格式 string plain, json, xml json 取值范围可枚举
    data 文本数据 string 文本大小:0-1M

输出结果示例:

pgs: 我想
pgs: 我想听
pgs: 我想听周杰
pgs: 我想听周杰伦
pgs: 我想听周杰伦专辑
htk: <s>
我想听
周杰伦专辑
</s>
plain: 我想听周杰伦专辑
vad: {"sc":"0","ws":[{"bg":"78","ed":"303","status":"SpeechNormal"}]}
readable: {"sc":"12784","mode":"fsa","ismandarin":"true","bg":"78","ed":"303","ws":[{"sc":"0","w":"我想听","slot":"albumwant","pinyin":"","boundary":""},{"sc":"0","w":"周杰伦专辑","slot":"album","pinyin":"","boundary":""}]}
vad: {"sc":"0","ws":[{"bg":"-1","ed":"-1","status":"SpeechAutoFinish"}]}
readable: {"sc":"0","bg":"-1","ed":"-1","ws":[{"sc":"0","w":"。"}]}
  • pgs:progressive格式的结果,即可以实时刷屏
  • htk:带有分词信息的结果,每一个分词结果占一行
  • plain:类比于htk,把一句话结果中的所有分词拼成完整一句,若有后处理,则也含有后处理的结果信息,plain是每一段话的最终结果
  • vad:语音端点检测,可以过滤掉输入音频中的静音部分,vad关键名词有前端点bg(音频非静音部分起始点)和后端点ed(音频非静音部分尾端点),引擎的一次调用(start接口到end接口)中,vad识别出后端点之后后续的音频将不会被送入识别引擎;如果两处都显示-1代表没有使用vad引擎。
结果json参数 字段含义
bg vad前端点,单位是帧(10ms)
ed 识别结果,单位是帧(10ms)
status vad模块的状态(NovadOrvaderror的意思就是没有开启vad或者vad报错,因为bg和ed都显示-1了)
  • readable:json格式的结果。
结果json参数 字段含义
sc 置信度
mode 命令词模式
ismandarin 是否是普通话
bg vad前端点,单位是帧(10ms)
ed 识别结果,单位是帧(10ms)
w 识别结果
slot 命中的槽名
pinyin 拼音
boundary 边界词

注意:FSA命令词结点是可以有一个起点,多个终点的。用户在说一条命令时,命令内容必须包含一条完整的起点到终点的路径才可以被accept,如果识别到的音频内容不满足起点走到终点的要求,是不会有htk,plain,readable结果的。

# 6.8.4 结束会话

数据处理完毕,调用end方法结束会话,示例代码如下:

int ret = [AiHelper end:handle];
if (ret != 0)
{
  return;
}
参数 类型 必填 说明
handle AIKIT_HANDLE* 会话的handle对象

# 6.9 SDK逆初始化

当不再使用能力时,需调用逆初始化方法释放资源,示例代码如下:

BOOL ret = [AiHelper unInit];

# 6.10 导入资源验证效果

能力模型资源在AEEResource.boundle下,开发者确保资源已添加到工程中。至此已完成能力接入,可运行测试合成效果。

# 7、参数构建API说明

# 7.1 功能参数构建

功能参数通 AIKITParameters 类构建,构建方法如下:

  • 整型参数构建 [param addInt:PARAM_KEY value:PARAM_VALUE];
参数 类型 必填 说明
key NSString* 功能参数名称
value NSInteger 功能参数取值
  • 布尔参数构建 [param addBool:PARAM_KEY value:PARAM_VALUE];
参数 类型 必填 说明
key NSString* 功能参数名称
value BOOL 功能参数取值
  • 字符串参数构建 [param addString:PARAM_KEY value:PARAM_VALUE];
参数 类型 必填 说明
key NSString* 功能参数名称
value NSString* 功能参数取值
  • 浮点参数构建 [param addDouble:PARAM_KEY value:PARAM_VALUE];
参数 类型 必填 说明
key NSString* 功能参数名称
value Double 功能参数取值

示例代码如下:

AIKITParameters *abilityParams = [[AIKITParameters alloc] init];
[abilityParams addString:"stringKey" value:"stringValue"];
[abilityParams addDouble:"doubleKey" value:1.001];
[abilityParams addInt:"intKey" value:100];
[abilityParams addBool:"boolKey" value:true];

# 7.2 能力输入数据

输入数据通过AIKITInputData构造,通过 addPayload 方法添加输入数据,输入数据支持文本、图片、音频、视频等格式,分别通过AIText、AIImage、AIAudio、AIVideo封装输入数据及输入数据属性。

  • AIAudio 类接口说明
接口 参数说明 方法说明 是否必填
+get: key:NSString* 设置输入数据key
-status: status: DataStatus 设置当次输入数据状态,标识当前数据是首次输入、中间数据、结束数据、一次性输入4种类型,对应DataStatusBegin、DataStatusContinue,、DataStatusEnd,、DataStatusOnce
-begin 快速标识数据首帧状态,等同于aiText.status(DataStatusBegin)
-cont 快速标识数据中间数据,等同与aiText.status(AiStatus.DataStatusContinue)
-end 快速标识数据尾数据,等同与aiText.status(DataStatusEnd)
-once 快速标识数据状态,一次性输入,等同与aiText.status(DataStatusOnce)
-data: data:NSData* 设置输入参数
-encoding: encoding:NSString* 设置音频编码
-channels: channels: NSInteger 设置声道数
-bitDepth: bitDepth: NSInteger 设置位深
-sampleRate: dims:NSInteger 设置采样率
-valid 输入数据校验,返回AIText对象

示例代码如下:

//输入音频数据
AIAudio *aiAudio = AIAudio
        .get("$key")               //必填项:输入输入音频key
        .encoding($encoding)       //非必填:设置音频编码格式
        .sampleRate($sampleRate)   //非必填:设置音频采样率
        .channels($channels)       //非必填:设置音频声道数
        .bitDepth($bitDepth)       //非必填:设置音频位深
        .data(part)                //必填项:part为 byte[]类型输入数据
        .status(AiStatus.BEGIN)    //非必填:设置输入数据状态
        .valid();                  //必填项:输入数据合法性检查

# 8. 高级功能

# 8.1 日志配置

[AiHelper setLogInfo:(AIKITLogLvl)logLevel mode:logMode path:docPath];

日志配置参数说明:

参数 类型 说明
LogLvl int32_t 日志级别枚举值如下:, AIKITLogInfo , AIKITLogWarn , AIKITLogError , AIKITLogFatal , AIKITLogOff
LogMode int 日志模式(stadout:0 logcat:1 file:2)
LogPath String 日志文件名称,默认保存在沙盒路径下 /AIKIT/log

# 8.2 个性化数据卸载

已加载的个性化数据,如果不在使用或者需要替换,需要卸载已加载的个性化资源,示例代码如下:

[AiHelper unloadData:e75f07b62 key:FSA index:$index]
[AiHelper unloadData:e75f07b62 key:FSABIN index:$index]

可配置参数

参数 类型 说明
ability String 能力id
key String 个性化数据唯一标识
index String 个性化数据索引

# 错误码

错误码 含义 自查指南
18001/18002 /18003/18004 授权问题 Linux 平台删除授权文件,将设备联网,重启应用,重新从云端获取授权文件; Android 端清除应用缓存,将设备联网,重启应用,重新从云端获取授权文件; 如仍有问题,请联系项目经理协助解决。
18005 授权已过期 能力授权已过期。
18006 授权时间错误,设备时间比标准时间慢 30 分钟以上 设备时间不准确导致,请校正设备时间为标准时间,重启应用。
18007 授权应用不匹配(apiKey、apiSecret) apiKey、apiSecret配置有误,请核对项目中配置的 apiKey、apiSecret 。
18008 授权文件激活过期 非永久授权激活文件的有效期为 3天,Linux 平台删除授权文件、Android平台清除应用缓存后重启应用重新激活; 若设备无法联网,请重新申请离线激活文件,在 3 天内激活。
18010 离线授权激活文件指定平台与设备平台不匹配 批量授权激活文件不支持当前设备平台,离线批量授权文件仅只支持申请时指定的的特定平台,不可多平台混用。
18011 离线授权激活文件指定架构与设备 CPU 架构不匹配 批量授权激活文件不支持当前设备架构,离线批量授权文件仅只支持申请时制定的特定架构,不支持多架构混用。
18012 离线授权激活文件中包含 license 个数异常 离线批量激活文件异常,请检查设备中使用的离线激活文件与所申请的是否一致
18013 离线授权激活文件中未找到当前设备 批量离线授权激活文件中不包含改设备,请联网激活或申请离线授权激活文件。
18014 离线授权激活文件中设备指纹安全等级非法 离线授权文件中安全等级错误,请联系平台重新提供
18015 硬件授权验证失败 -
18016 离线授权激活文件内容非法 批量离线授权文件不合法,请替换正确的批量离线激活文件测试,如仍有问题,请联系项目经理协助解决。
18017 离线授权激活文件中协议头非法 批量离线授权文件不合法,请替换正确的批量离线激活文件测试,如仍有问题,请联系项目经理协助解决。
18018 离线授权激活文件中指纹组成项个数为0 未获取到有效的设备标识,例如 Android平台 Androidid 未获取到;Linux平台 MAC等未获取到。
18019 资源已过期 请联系平台技术人员解决
18100/18101/18102 资源错误 请仔细检查所用资源与平台提供的资源是否一致,可通过MD5对比,请使用提供SDK时附带的成套资源。
18103 资源参数不存在 请根据文档检查能力参数Key、Value 是否合法。
18104 资源路径打开失败 资源路径无读写权限,请确保在 SDK 初始化时以获取到读写权限,或将资源路径设置为有读写权限的路径下。
18105 资源加载失败,workDir 内未找到对应资源 请根据日志提示将所需资源导入到指定路径下
18106 资源卸载失败 请检查代码是否存在未初始化时调用 SDK uninit 方法,或多次调用 uninit 方法
18200 引擎鉴权失败 应用授权信息与SDK不对应。 1. 请尝试将设备联网后重启应用; 2. 请检查您项目中使用的SDK和平台提供的是否一致;
18201 引擎动态加载失败 请检查日志中打印的引擎库是否已导入到项目中
18202 引擎未初始化 请检查调用能力前是否已初始化引擎及初始化是否成功。
18203 引擎不支持该接口调用 请参照 Demo 仔细检查方法调用是否正确
18205 引擎重复初始化 请根据文档检查引擎初始化方法是否存在重复调用,引擎初始化全局仅需初始化一次。
18206 引擎参数非法 请根据文档检查引擎初始化参数是否合法;
18207 引擎上下文未注册 -
18300 SDK不可用 请联系平台技术人员解决
18301 SDK未初始化 在使用能力前请先初始化 SDK,如果有调用 uninit 方法,再次使用能力时需要重新初始化。
18302 SDK初始化失败 请根据CoreListener回调中返回的错误码参考此文档做对应检查
18303 SDK 已经初始化 重复初始化导致,使用能力时,SDK 只需要初始化一次,请检查 SDK 初始化逻辑是否存在多次初始化。
18304 不合法参数 请参考demo及协议文件仔细检查所传参数是否正确;若确认无误,请联网后重启应用后重试
18305/18306 会话不存在或已销毁 1. 请检查 start 方法调用是否返回成功; 2. 请排查代码是否在调用 end 方法结束会话后又调用了 write 或read 方法。 3. 请确保 end 方法在能力执行完毕后调用,能力执行结果会在 onEvent 中回调。
18307 会话重复终止 该错误一般为重复调用 end 方法导致, 请仔细检查代码是否有重复调用 end 方法
18308 超时错误 请检查网络是否正常连接
18309 SDK正在初始化中 请联系平台技术人员解决
18310 会话重复开启 start 、end方法需成对调用,请仔细检查代码逻辑是否存在调用start 后未调用end结束会话,又再次调用start 情况出现
18400 工作目录无写权限 在设置 workDir 时,请确保该工作路径有读写权限。若无法设置读写权限,请修改为有读写权限的工作路径。
18401 未获取到设备标识 没有获取到组成设备指纹所必须的组成项,请确认 mac、AndroidID、SN 等是否能获取到,请根据授权安全等级确保能获取对应数量的设备标识。
18402 文件打开失败 请检查 日志中所打印的文件是否存在,以及对应路径下是否有读权限。
18404 设备指纹比较失败 设备指纹组成项发生变化导致,获取到的设备指纹与缓存的设备指纹不一致,请将设备联网后重启应用重试。
18405 工作目录不存在 请检查资源文件文件夹是否存在
18500 未找到该参数 key 请参照demo或协议文档仔细检查参数名拼写
18501 参数范围溢出,不满足约束条件 请根据协议检查调用 SDK 方法时所传参数范围,需要确保所传参数符合协议约束要求
18502 SDK 初始化参数为空 请根据 SDK 集成文件检查 SDK 初始化代码,确保必填参数有值且合法
18503 SDK 初始化参数中 appId 为空 appId 为空值,请在 SDK 初始化时传入正确的 appId 值
18504 SDK 初始化参数中 apiKey为空 apiKey为空值,请在 SDK 初始化时传入正确的 apiKey值
18505 SDK 初始化参数中 apiSecret 为空 apiSecret 为空值,请在 SDK 初始化时传入正确的 apapiSecret 值
18506 abilityId 参数为空 abilityId 为空值,请检查 引擎初始化方法及调用能力方法时所传的 abilityId 是否正确
18507 input 参数为空 请检查调用能力方法时 input 参数是否为空
18508 输入数据参数 Key 不存在 请根据协议文档检查输入参数的 key
18509 必填参数缺失 请根据文档或demo检查参数漏传项
18510 输出参数缺失 能力输出参数缺失
18520 不支持的编解码类型 输入的编解码格式不支持
18600 协议中时间戳字段缺失 请将设备联网后重启应用
18601 协议中未找到该能力 ID 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 若无误请删除授权文件或清空应用缓存后重启应用; 请确认所传能力 ID 是否正确; 请联系平台协助排查授权是否已过期或授权量已用完。
18602 协议中未找到该资源 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 请将设备联网后重新应用重试; 请确认是否已申请授权过该资源。
18603 协议中未找到该引擎 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 请将设备联网后重新应用重试; 请确认项目中使用SDK版本是否正确。
18606 协议能力接口类型不匹配 请根据协议检查能力接口类型是否一致,流式与非流式接口不可混用
18607 预置协议解析失败 请联系平台技术人员解决
18700 能力未授权 该SDK未授权,请联系项目经理申请授权
18701 网络不通 请检查网络连接是否正常
18702 网关检查不过 检查设备时间是否正确; 请检查 SDK 初始化时所传 apiKey、apiScrect 是否正确;
18703 云端响应格式不对 请检查网络是否可以正常访问外网
18704 应用未注册 请检查appid 是否正确
18705 应用 ApiKey & ApiSecret 校验失败 请检查 apiKey、apiSecret 是否正确
18706 引擎不支持的平台架构 您所使用的能力不支持该设备平台架构,请确认申请的SDK支持的平台架构。
18707 授权已过期 如需继续使用请申请授权延期
18708 无可用授权 该能力不支持当前平台架构的设备; 2. 授权量已满
18709 未找到该 appid 绑定的能力 请检查 appId 是否正确;请确认是否已购买该能力
18710 未找到该 appid 绑定的资源 请检查 appId 是否正确;请检查是否已申请受限资源
18711 json操作失败 请联系平台技术人员解决
18712 http 404错误 请联系平台技术人员解决
18713 设备指纹安全等级不匹配 设备指纹安全等级不匹配,请申请申请安全等级变更
18714 应用信息错误 一般为apiKey、apiSecret值有误,请检查 appid、apiKey、apiSecret 的值是否正确。
18715 未找到该SDKID 该组合能力SDK未授权,请申请授权
18716 未找到该组合能力集合 该组合能力未创建,请申请授权
18717 SDK组合能力授权不足 组合能力授权量已用完,需申请追加授权
18718 无效授权应用签名 应用级授权,应用签名与授权签名不一致
18719 应用签名不唯一 应用级授权,提供的应用签名有误
18720 能力schema不可用 请联系平台技术人员解决
18721 未找到能力集模板 请联系平台技术人员解决
18722 能力不在模板能力集模板中 该能力未授权,请申请授权
18801 建立链接错误 -
18802 结果等待超时 -
18803 连接状态异常 -
在线
咨询
建议
反馈
体验
中心