错误码速查
本页按公共、iOS 和 Android 三部分汇总错误码,便于快速检索。
跨平台状态、事件和离线模型状态的完整处理规则见运行状态与事件处理契约。
公共错误码
以下错误码在 iOS 和 Android 两端的 code 与 constantName 同码同义。分类(category)字段两端存在差异,故下表按 iOS / Android 分别列出;App 若按分类做 UI 分组或埋点,需以各自平台的实际分类为准。
错误模型
iOS — TmkTranslationError(枚举关联值,属性 code/constantName/message/category/chineseDescription/englishDescription/underlyingError/actualErrorCode/actualErrorMessage/actualErrorDomain)。
Android — TmkTranslationException(类,属性 errorCode/actualErrorCode/actualErrorMessage/actualErrorDomain/category/constantName/chineseDescription/englishDescription)。
两端主错误码均通过 error.code(iOS)或 exception.errorCode(Android)获取,actualErrorCode / actualErrorMessage 仅用于脱敏后的诊断排障。
统一错误码表
| code | constantName | iOS 分类 | Android 分类 | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|---|---|
| 2001101 | SDK_NOT_INITIALIZED | state | caller | SDK 未初始化,调用方在未执行 sdkInit 前就使用了 SDK 能力。 | App 停止当前流程并提示用户"SDK 未初始化,请重新进入页面"。 | 提示用户操作 |
| 2001102 | AUTHENTICATION_FAILED | caller | network | 在线鉴权失败(token 校验失败/授权头格式非法/token 非法),或离线 License 鉴权不通过(过期/签名无效/scope 未授权等)。 | 在线:App 弹窗提示"鉴权失败,请重新鉴权";离线:引导用户联网重试或检查账号权限。 | 提示用户操作 |
| 2001103 | ROOM_CREATION_FAILED | network | rtcRtm | 在线房间(dialog/mono-dialog)创建流程中的非超时失败。 | App 弹窗提示"房间创建失败,是否重试?";连续失败 3 次后弹窗提示离开,记录诊断日志。 | 提示用户重试 |
| 2001104 | CHANNEL_CREATION_FAILED | rtcRtm | rtcRtm | 在线通道创建失败,或离线通道组装失败。 | 在线:App 弹窗提示"通道创建失败,是否重新创建?";离线:提示"通道初始化失败,是否重新初始化?"并检查模型资源。 | 提示用户重试 |
| 2001105 | ENGINE_NOT_SUPPORTED | rtcRtm | caller | 当前 SDK、账号或配置不支持该引擎能力。 | App 弹窗提示"当前引擎能力不支持",停止当前流程。 | 不可恢复 |
| 2001106 | INVALID_CONFIGURATION | caller | caller | 配置非法,包括语言、声道、音色、appId、channel 等参数不合法。 | App 弹窗提示具体配置错误项,引导用户修正后重试;不要用旧配置自动重复重试。 | 提示用户操作 |
| 2001107 | NETWORK_UNAVAILABLE | network | network | 网络不可用;也可能出现在模型下载、鉴权、语言列表、建房或建通道的超时场景。Android 将底层 I/O 取消型超时统一映射为此码。 | 启动期:App 提示"网络不可用,请检查网络"并提供重试按钮;运行期:App 仅通过 onStateChanged(reconnecting) 显示"网络恢复中…"横幅,不弹窗,SDK 自动重连。 | App 自动重试(SDK 自动重连) |
| 2001108 | AUDIO_PROCESSING_ERROR | audio | audio | 音频采集、播放、PCM 推流或音频会话异常。 | App 停止录音/播放,弹窗提示"音频处理异常,请重新创建对话(在线)或重新初始化(离线)"。 | 提示用户重试 |
| 2001109 | TTS_SYNTHESIS_ERROR | rtcRtm | audio | 在线或离线 TTS 合成异常。 | 单句失败:App 做 Toast 提示"语音合成失败",不弹窗、不中断通道;连续 3 句失败或通道级:App 弹窗提示"语音合成异常,是否重建通道?"。 | 单句:App 自动重试;通道级:提示用户重试 |
| 2001110 | TRANSLATION_ERROR | rtcRtm | internal | 在线翻译引擎异常,或离线 ASR 识别/MT 翻译阶段失败。 | 单句失败:App 做 Toast 提示"翻译失败",不弹窗;通道级失败:App 弹窗提示"翻译异常,是否重建(在线)或重新初始化(离线)?"。 | 单句:App 自动重试;通道级:提示用户重试 |
| 2001111 | SESSION_EXPIRED | network | state | 在线会话或 RTC/RTM token 已过期。 | App 停止当前会话,弹窗提示"会话已过期,请重新创建对话";不可复用旧 token。 | 提示用户操作 |
| 2001112 | QUOTA_EXCEEDED | network | network | 账号或应用服务配额不足。 | App 弹窗提示"配额不足",停止当前流程;引导用户联系客服或升级套餐。 | 不可恢复(需联系客服) |
| 2001113 | INVALID_LANGUAGE_CODE | caller | caller | 传入的语言代码不被当前模式支持。 | App 弹窗提示"当前语言不支持,请重新选择";在线重新创建对话,离线确认对应语种模型已下载后重新初始化。 | 提示用户操作 |
| 2001114 | ENGINE_INITIALIZATION_FAILED | rtcRtm | internal | 引擎初始化失败;离线 creation failed、load timeout 或模型加载超时。 | App 弹窗提示"引擎初始化失败,是否重试?";连续失败 3 次后提示用户检查 SDK 资源和离线模型完整性。 | 提示用户重试 |
| 2001115 | BUFFER_OVERFLOW | audio | internal | 音频输入或输出缓冲超过处理能力。 | App 自动降低推流频率或重启采集;严重时弹窗提示"音频缓冲溢出,请重建通道"。 | App 自动重试(降低频率) |
| 2001116 | THREAD_INTERRUPTED | internal | internal | 工作线程被中断。 | App 自动重试当前操作;若持续出现则弹窗提示"内部异常,请重新创建对话"并记录诊断日志。 | App 自动重试 |
| 2001117 | OFFLINE_MODEL_NOT_READY | caller | audio | 模型缺失、校验失败、下载失败、离线鉴权未通过或账号未开通离线能力。 | App 引导用户下载/更新模型或重新鉴权;在模型就绪前不要直接启动离线通道。 | 提示用户操作 |
| 2001999 | UNKNOWN_ERROR | internal | internal | 未知错误或底层错误无法映射。 | App 弹窗提示"发生未知错误,是否重新创建(在线)或重新初始化(离线)?";记录诊断日志。 | 提示用户重试 |
| 2002001 | NETWORK_INVALID_URL | caller | network | 网络 URL、模型下载 URL 或后台地址配置错误。 | App 弹窗提示"网络地址配置错误",停止当前流程,不重试。 | 不可恢复(需修复配置) |
| 2002002 | NETWORK_TRANSPORT_ERROR | network | network | 网络传输失败,包括 DNS、TLS、超时或模型下载失败。 | App 弹窗提示"网络连接失败,是否重试?";模型下载场景保留续传/重试入口。 | 提示用户重试 |
| 2002003 | NETWORK_HTTP_STATUS_ERROR | network | network | 已被 HTTP 状态细分码取代,仅作为兼容兜底保留。 | 按下方 HTTP 状态细分码表处理;新代码不应依赖此码。 | 视 HTTP 状态码而定 |
| 2002004 | NETWORK_RESPONSE_DECODING_ERROR | network | network | 响应、manifest 或语言列表解析失败。 | App 弹窗提示"服务响应异常",记录诊断日志。 | 不可恢复 |
| 2002005 | NETWORK_BUSINESS_ERROR | network | network | 已被后台业务码细分码取代,仅作为兼容兜底保留。 | 按下方后台业务码细分表处理;新代码不应依赖此码。 | 视业务码而定 |
| 2002006 | REQUEST_CANCELLED | network | rtcRtm | 用户取消、页面退出、主动停止或音色设置被取消。 | App 不弹错误框,仅恢复 UI 到已取消/已停止状态。 | 无需恢复 |
| 2003002 | INVALID_STATE | state | state | 当前状态不允许操作;例如通道释放后继续调用。 | 重复停止可忽略;关键路径失败时 App 弹窗提示"状态异常,请重新创建(在线)或重新初始化(离线)"。 | 提示用户重试 |
| 2003003 | DEPENDENCY_UNAVAILABLE | rtcRtm | internal | 必要依赖、离线库或模型能力不可用。 | App 弹窗提示"SDK 依赖异常,请检查资源完整性",停止当前流程并记录诊断。 | 不可恢复 |
| 2003004 | RTC_OPERATION_FAILED | rtcRtm | rtcRtm | RTC/RTM 入会、订阅、消息收发等实时链路操作失败(通用兜底);封禁、加入失败、服务端拒绝和被踢已使用下方细分码。 | App 弹窗提示"实时链路异常,是否重新创建或离开?";未命中细分码时记录 actualErrorCode 排障。 | 提示用户重试 |
| 2003005 | MESSAGE_DECODING_FAILED | rtcRtm | rtcRtm | 在线/离线消息解析失败。 | App 仅记录日志,不弹窗、不关闭通道。 | App 自动重试(日志记录) |
| 2003006 | AUDIO_CHANNEL_CREATION_FAILED | audio | audio | 音频通道创建失败。 | App 停止采集,弹窗提示"音频通道创建失败,是否重建(在线)或重新初始化(离线)?"。 | 提示用户重试 |
| 2003007 | TRACK_EVENT_NOT_CONFIGURED | internal | internal | 埋点未配置。 | 不影响翻译主流程,App 可忽略或记录日志。 | 无需恢复 |
| 2003008 | TRACK_EVENT_INVALID_EVENT_NAME | caller | caller | 埋点事件名为空或非法。 | 不影响翻译主流程,App 可忽略或修正埋点配置。 | 无需恢复 |
| 2003103 | RTC_BANNED_BY_SERVER | rtcRtm | rtcRtm | 被服务端封禁(声网 connection reason 3);状态原因仍为 bannedByServer。 | App 弹窗提示"当前对话已被封禁,请离开"。 | 不可恢复 |
| 2003104 | RTC_JOIN_FAILED | rtcRtm | rtcRtm | 加入实时频道失败(声网 connection reason 4);状态原因仍为 serviceRejected。 | App 弹窗提示"加入频道失败,是否重试或检查网络?"。 | 提示用户重试 |
| 2003110 | RTC_REJECTED_BY_SERVER | rtcRtm | rtcRtm | 被服务端拒绝(声网 connection reason 10);状态原因仍为 serviceRejected。 | App 弹窗提示"服务端拒绝连接,是否重新创建或离开?"。 | 不可恢复 |
| 2003123 | RTC_USER_BANNED | rtcRtm | rtcRtm | 用户被踢出频道(声网 error code 123)。 | App 弹窗提示"您已被移出对话,请离开"。 | 不可恢复 |
HTTP 状态细分码
HTTP 非成功状态使用 2002000 + HTTP 状态码 映射为 SDK 错误码,原始状态码保留在 actualErrorCode,actualErrorDomain 为 http。
| code | constantName | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|
| 2002400 | NETWORK_HTTP_BAD_REQUEST | HTTP 400,请求参数错误。 | App 不重试;检查请求参数是否正确。 | 不可恢复(需修复参数) |
| 2002401 | NETWORK_HTTP_UNAUTHORIZED | HTTP 401,未授权。 | App 重新发起鉴权流程,获取新 token 后重试原请求。 | App 自动重试(重新鉴权后) |
| 2002403 | NETWORK_HTTP_FORBIDDEN | HTTP 403,禁止访问。 | App 不重试;提示用户"无访问权限,请联系客服"。 | 不可恢复(需联系客服) |
| 2002404 | NETWORK_HTTP_NOT_FOUND | HTTP 404,资源不存在。 | App 不重试;检查请求 URL 和资源标识。 | 不可恢复(需修复地址) |
| 2002408 | NETWORK_HTTP_REQUEST_TIMEOUT | HTTP 408,请求超时。 | App 自动重试原请求(最多 3 次),失败后提示用户"请求超时,请检查网络"。 | App 自动重试 |
| 2002429 | NETWORK_HTTP_TOO_MANY_REQUESTS | HTTP 429,请求过于频繁。 | App 按指数退避自动重试(初始 1s,最大 30s),失败后提示"请求过于频繁,请稍后重试"。 | App 自动重试(退避后) |
| 2002500 | NETWORK_HTTP_SERVER_ERROR | HTTP 500,服务端内部错误。 | App 自动重试原请求(最多 3 次),失败后提示"服务异常,请稍后重试"。 | App 自动重试 |
| 2002502 | NETWORK_HTTP_BAD_GATEWAY | HTTP 502,网关错误。 | App 自动重试原请求(最多 3 次),失败后提示"网关异常,请稍后重试"。 | App 自动重试 |
| 2002503 | NETWORK_HTTP_SERVICE_UNAVAILABLE | HTTP 503,服务不可用。 | App 按指数退避自动重试(初始 1s,最大 30s),失败后提示"服务暂时不可用,请稍后重试"。 | App 自动重试(退避后) |
| 2002504 | NETWORK_HTTP_GATEWAY_TIMEOUT | HTTP 504,网关超时。 | App 自动重试原请求(最多 3 次),失败后提示"网关超时,请检查网络"。 | App 自动重试 |
2002xxx | HTTP_<status> | 未列出的 HTTP 状态码。 | 按状态码语义处理:4xx 不重试检查参数,5xx 自动重试;从 actualErrorCode 读取原始状态码。 | 视 HTTP 状态码而定 |
后台业务码细分
后台业务错误使用 2004000 + 后台码 映射为 SDK 错误码;未知后台码统一返回 2007999。原始后台码保留在 actualErrorCode,actualErrorDomain 为 backend。本节不适用于后端 License 获取的 1007,该路径的专用处理见下文。
| 后台码 | SDK 错误码 | constantName | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|---|
| 1001 | 2005001 | BIZ_TOKEN_PARAM_LOST | token 参数缺失。 | App 提示"token 参数缺失,请检查鉴权参数"。 | 提示用户操作 |
| 1002 / 1003 / 1005 | 2001102 | AUTHENTICATION_FAILED | 授权头格式非法、token 校验失败或 token 非法。 | App 弹窗提示"鉴权失败,请重新鉴权"。 | 提示用户操作 |
| 1004 | 2001111 | SESSION_EXPIRED | token 已过期。 | App 停止当前会话,弹窗提示"会话已过期,请重新创建对话"。 | 提示用户操作 |
| 2000 | 2006000 | BIZ_PARAM_ERROR | 参数错误。 | App 提示"请求参数错误,请检查配置"。 | 提示用户操作 |
| 2001 | 2006001 | BIZ_PARAM_LOST | 参数缺失。 | App 提示"请求参数缺失,请检查配置"。 | 提示用户操作 |
| 2002 | 2006002 | BIZ_SERVER_BUSY | 服务端繁忙。 | App 自动重试(最多 3 次);失败后提示"服务繁忙,请稍后重试"。 | App 自动重试 |
| 2003 | 2006003 | BIZ_ILLEGAL_OPERATION | 非法操作。 | App 提示"非法操作"并停止当前流程。 | 不可恢复 |
| 2004 | 2006004 | BIZ_ROOM_STATUS_UNAVAILABLE | 房间状态不可用。 | App 提示"房间状态不可用,请重新创建"。 | 提示用户重试 |
| 2006 | 2006006 | BIZ_USER_NOT_EXISTS | 用户不存在。 | App 提示"用户不存在,请检查账号"。 | 提示用户操作 |
| 2007 | 2006007 | BIZ_ROOM_DATA_NOT_EXISTS | 房间数据不存在。 | App 提示"房间数据不存在,请重新创建"。 | 提示用户重试 |
| 2008 | 2006008 | BIZ_REGION_INVALID | region 非法。 | App 提示"region 非法,请检查区域配置"。 | 提示用户操作 |
| 2011 | 2006011 | BIZ_NO_PERMISSION_OPERATE_ROOM | 无房间操作权限。 | App 提示"无房间操作权限"。 | 不可恢复 |
| 2014 | 2006014 | BIZ_ENGINE_PARAMS_INVALID | 引擎参数非法。 | App 提示"引擎参数非法,请检查配置"。 | 提示用户操作 |
| 2017 | 2006017 | BIZ_PERMISSION_DENIED | 权限不足。 | App 提示"权限不足"并停止当前流程。 | 不可恢复 |
| 3000 | 2007000 | BIZ_USER_IDENTITY_INVALID | 用户身份非法。 | App 提示"用户身份非法"。 | 不可恢复 |
| 3001 | 2007001 | BIZ_ROOM_NOT_EXIST | 房间不存在。 | App 提示"房间不存在,请重新创建"。 | 提示用户重试 |
其它(不含后端 License 获取的 1007) | 2007999 | BACKEND_BIZ_UNKNOWN | 未知后台业务码。 | App 提示"服务端返回未知错误",记录 actualErrorCode 排障后重试。 | 提示用户重试 |
补充说明:
- 离线翻译在底层失败时,会按阶段映射为统一错误码:
tts→2001109/TTS_SYNTHESIS_ERROR,translation/asr→2001110/TRANSLATION_ERROR。底层组件码保留在actualErrorCode中。 - RTC 细分码保留原有的
onStateChanged原因:2003103对应bannedByServer,2003104与2003110对应serviceRejected。未列出的 RTC 错误仍使用2003004。
License 签发响应可能返回 license_id 或 licenseId。SDK 仅可将脱敏后的 licenseId 用于诊断关联,不应输出原始 License、clientSecret 或设备私钥。
iOS 错误码
TmkTranslationError 错误模型
public enum TmkTranslationError: Error, LocalizedError {
case caller(message: String, underlying: Error? = nil)
case network(message: String, underlying: Error? = nil)
case rtcRtm(message: String, underlying: Error? = nil)
case audio(message: String, underlying: Error? = nil)
case state(message: String, underlying: Error? = nil)
case internalError(message: String, underlying: Error? = nil)
}
常用公开属性:
| 属性 | 说明 |
|---|---|
code | SDK 统一错误码。 |
constantName | 错误码常量名。 |
message | 对外可读错误文案。 |
category | 错误分类(caller/network/rtcRtm/audio/state/internal)。 |
chineseDescription / englishDescription | 中英文说明。 |
underlyingError | 原始底层错误。 |
actualErrorCode | 实际底层错误码,例如离线组件或 LicenseCore 诊断码。 |
actualErrorMessage | 实际底层错误信息;上传或展示前必须脱敏。 |
actualErrorDomain | 实际底层错误域。 |
示例:
func onError(_ error: TmkTranslationError) {
print(error.code)
print(error.category.rawValue)
print(error.message)
let safeActualMessage = error.actualErrorMessage == nil ? "-" : "<redacted>"
print(safeActualMessage)
}
iOS 离线组件诊断码
以下错误码为 iOS 离线组件 TmkOfflineErrorCode 的定义值。SDK 内部通过 TmkTranslationError.from(_:) 将其映射为上方通用错误码后回调 App;原始码保留在 error.actualErrorCode 中,仅用于诊断排障。
| code | constantName | 说明 | 上层映射码 | 处理契约 | 恢复策略 |
|---|---|---|---|---|---|
| 2004001 | OFFLINE_INVALID_ARGUMENT | 离线组件参数无效(modelDirectory/text 等为空或非法)。 | 2001106 | 作为 actualErrorCode 排障;App 检查配置参数,修正后重新初始化。 | 提示用户操作 |
| 2004002 | OFFLINE_CREATION_FAILED | 离线引擎创建失败(ASR/MT/TTS Session 初始化失败)。 | 2001114 | 作为 actualErrorCode 排障;App 检查模型文件完整性,重新初始化离线通道。 | 提示用户操作 |
| 2004003 | OFFLINE_OPERATION_FAILED | 离线引擎运行时操作失败(翻译/合成等执行异常)。 | 2001110 / 2001109 | 作为 actualErrorCode 排障;按 stage 判断:TTS 阶段→2001109,ASR/MT 阶段→2001110。 | App 自动重试 |
| 2004004 | OFFLINE_ENGINE_RELEASED | 离线引擎已释放后继续调用。 | 2003002 | 作为 actualErrorCode 排障;忽略退出后的回调或重新创建通道。 | App 自动重试(日志记录) |
| 2004005 | OFFLINE_LOAD_TIMEOUT | 离线模型加载超时。 | 2001114 | 作为 actualErrorCode 排障;检查模型完整性并重新加载。 | 提示用户操作 |
iOS 离线 License 组件码
在 .default 模式下,离线 License 鉴权失败不会使在线鉴权回调失败;.offline 的离线鉴权失败会直接通过回调返回错误,.all 则要求在线和离线鉴权都成功。当业务继续调用离线能力接口或创建离线通道时,对外 error.code 统一映射为 2001102 / AUTHENTICATION_FAILED。组件码写入 error.actualErrorCode,native LicenseCore 返回码写入 error.actualErrorMessage。
| code | constantName | native 返回码 | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|---|
| 2004101 | OFFLINE_AUTH_EMPTY_CONTENT | 1001 | License 内容为空。 | App 提示"离线 License 内容为空",引导用户重新联网鉴权获取 License;不要继续启动离线通道。 | 提示用户操作 |
| 2004102 | OFFLINE_AUTH_DECRYPT_OR_PARSE_FAILED | 1002 | License 解密或解析失败。 | App 提示"离线 License 解析失败",引导用户重新联网鉴权;不要删除设备密钥,不上传原始 License。 | 提示用户操作 |
| 2004103 | OFFLINE_AUTH_SIGNATURE_INVALID | 1003 | License 签名无效。 | App 提示"离线 License 签名无效",引导用户重新联网鉴权;若仍失败,提示检查后台签发配置。 | 提示用户操作 |
| 2004104 | OFFLINE_AUTH_CLIENT_PACKAGE_OR_DEVICE_MISMATCH | 1004 | client、包名或设备绑定不匹配。 | App 提示"设备绑定不匹配",引导用户检查包名、账号和设备绑定后重新鉴权。 | 提示用户操作 |
| 2004105 | OFFLINE_AUTH_MODEL_KEY_EMPTY | 1005 | 模型密钥为空。 | App 提示"离线模型密钥为空",引导用户检查账号离线授权范围后重新鉴权。 | 提示用户操作 |
| 2004106 | OFFLINE_AUTH_EXPIRED_OR_NOT_YET_VALID | 1006 | License 已过期或尚未生效。 | App 提示"离线 License 已过期或未生效",引导用户联网重新签发 License 后再使用离线能力。 | 提示用户操作 |
| 2004107 | OFFLINE_AUTH_UNSUPPORTED | 1007 | License 版本或算法不支持。 | App 提示"离线 License 版本不支持",引导用户升级 SDK 或联系后台确认签发格式。 | 提示用户操作 |
| 2004108 | OFFLINE_AUTH_UNAUTHORIZED_SCOPE_OR_MODEL | 1008 | 当前 scope 或模型未授权。 | App 提示"离线授权范围不足",引导用户检查账号授权范围,重新鉴权或联系后台开通。 | 提示用户操作 |
| 2004199 | OFFLINE_AUTH_INTERNAL_ERROR | 1099/unknown | 内部错误或未知 native 返回码。 | App 提示"离线鉴权内部错误",引导用户联网重试;持续失败时记录脱敏日志提交排查。 | 提示用户重试 |
后端 License 获取错误码
后端 License 获取响应的 1007 与上表 native LicenseCore 的 1007 / OFFLINE_AUTH_UNSUPPORTED 同码但来源和语义不同,必须通过 actualErrorDomain 区分;不得将后端 1007 解释为 License 版本或算法不支持。
| 来源 | 对外 error.code | actualErrorCode / actualErrorDomain | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|---|
| 后端 License 获取 | 2001102 / AUTHENTICATION_FAILED | 1007 / backend | 当前业务 token 与设备授权上下文(含 thumbprint)不匹配。 | SDK 清理本次缓存 token,强制刷新一次并重试一次 License 请求;第二次仍失败时保留该原始诊断字段。 | App 提示联网重新鉴权;不要自行删除设备密钥、Keystore/Keychain 数据或处理 token。 |
iOS 设备密钥错误
iOS 独有的 Security.framework Keychain 操作错误,仅适用于 iOS 平台。
| code | constantName | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|
| 2001201 | DEVICE_KEY_READ_FAILED | 设备密钥读取失败,且 Security.framework 错误未能进一步分类。 | 检查设备 Keychain 状态并重试;结合 actualErrorCode 排查。 | 提示用户操作 |
| 2001202 | DEVICE_KEY_CREATION_FAILED | 设备密钥创建失败。 | 检查系统 Security.framework 能力并重试;不要删除已有 License 绑定密钥。 | 提示用户操作 |
| 2001203 | DEVICE_KEY_INVALID | 设备密钥或 Security.framework 参数无效。 | 检查 SDK、系统版本和密钥参数;修复后重新鉴权。 | 提示用户操作 |
| 2001204 | DEVICE_KEY_ACCESS_DENIED | 设备密钥访问被系统拒绝。 | 检查 Keychain 访问条件、设备锁定状态和应用签名配置。 | 提示用户操作 |
| 2001205 | DEVICE_KEY_UNAVAILABLE | 设备密钥服务或所需交互条件暂不可用。 | 稍后重试,并检查设备是否允许 Keychain 交互。 | 提示用户操作 |
| 2001206 | DEVICE_KEY_STORAGE_FAILED | 设备密钥所在 Keychain 存储操作失败。 | 检查 Keychain 存储状态和系统空间,必要时提交脱敏诊断信息。 | 提示用户操作 |
| 2001299 | DEVICE_KEY_OPERATION_FAILED | 设备密钥操作失败,无法进一步分类。 | 保留并上报 actualErrorCode、actualErrorDomain、actualErrorMessage。 | 提示用户操作 |
完整英文说明和 Apple OSStatus 对照见 Apple Security Framework Result Codes。SDK 不自动删除或重建已有设备密钥。
Android 错误码
TmkTranslationException 异常模型
class TmkTranslationException : Exception {
// 对外统一错误码(2001xxx/2002xxx/2003xxx,见通用错误码表)。
val errorCode: Int
// 底层原始错误码(后台业务码、HTTP 状态码或 native 返回码等);无原始码时为 null。
val actualErrorCode: Int?
// 底层原始错误信息;无原始信息时为 null。
val actualErrorMessage: String?
// 底层原始错误域,用于区分原始码来源,如 "backend"、"OfflineLicenseApplyStatus";无时为 null。
val actualErrorDomain: String?
}
错误码规则:凡来自后台或底层(native)的原始错误,errorCode 始终是通用错误码表中的统一 SDK 错误码,原始错误码与信息保留在 actualErrorCode / actualErrorMessage / actualErrorDomain 中,便于业务侧排障而不破坏统一码契约。纯 SDK 内部错误这三个字段为 null。
主要回调入口:AuthCallback.onError、CreateRoomCallback.onError、CreateChannelCallback.onError、ActionCallback.onError、TmkTranslationListener.onError、TmkTranslationChannelStateSnapshot.code。
Android 离线引擎错误码
以下错误码由 co.timekettle.offlinesdk.ErrorCodes 定义,直接通过 listener?.onError(code, message) 透传给 App 层,不会像 iOS 那样被映射为通用码。因此 App 需针对这些码独立处理。
| code | constantName | 说明 | 处理契约 | 恢复策略 |
|---|---|---|---|---|
| 2004001 | ERROR_ASR_INIT_FAILED | ASR Session 创建失败(模型目录为空或底层初始化异常)。 | App 检查 ASR 模型后引导用户下载/更新模型,重新初始化离线通道。 | 提示用户操作 |
| 2004002 | ERROR_MT_INIT_FAILED | MT Session 创建失败(模型目录为空或底层初始化异常)。 | App 检查 MT 模型后引导用户下载/更新模型,重新初始化离线通道。 | 提示用户操作 |
| 2004003 | ERROR_TTS_INIT_FAILED | TTS Session 创建失败(模型目录为空或底层初始化异常)。 | App 检查 TTS 模型和 tmk-tts-data 后引导用户下载/更新,重新初始化。 | 提示用户操作 |
| 2004004 | ERROR_ASR_RUNTIME | ASR 运行时错误(当前代码仅定义常量,尚未实际抛出)。 | App 记录诊断日志。若将来触发,建议 App 自动重新初始化离线通道。 | App 自动重试(日志记录) |
| 2004005 | ERROR_MT_RUNTIME | MT 翻译运行时异常(懒切换模型目录缺失或翻译执行异常)。 | App 自动重新初始化离线通道,在 UI 上做 Toast 提示"翻译异常,正在恢复…";保留诊断日志。 | App 自动重试(自动重新初始化) |
| 2004006 | ERROR_TTS_RUNTIME | TTS 合成运行时异常(懒切换模型目录缺失或合成执行异常)。 | App 自动重新初始化离线通道,在 UI 上做 Toast 提示"语音合成异常,正在恢复…";保留诊断日志。 | App 自动重试(自动重新初始化) |
| 2004007 | ERROR_MODEL_NOT_FOUND | 模型文件不存在(当前代码仅定义常量,尚未实际抛出)。 | App 引导用户下载或更新模型;模型就绪前不启动离线通道。 | 提示用户操作 |
| 2004008 | ERROR_MODEL_DOWNLOAD_FAILED | 模型下载失败(当前代码仅定义常量,尚未实际抛出)。 | App 恢复下载按钮,提示用户点击重试或续传。 | 提示用户重试 |
Android 离线 License 鉴权状态枚举
离线 License 鉴权失败时,Android 统一回调对外错误码 2001102 / AUTHENTICATION_FAILED(TmkTranslationException.errorCode),底层 native LicenseCore 返回码保留在异常字段中:actualErrorCode = native 返回码(1001–1099),actualErrorMessage = OfflineLicenseApplyStatus.diagnosticSummary,actualErrorDomain = "OfflineLicenseApplyStatus",仅用于排障。
| OfflineLicenseApplyStatus | actualErrorCode | 触发场景 |
|---|---|---|
EMPTY_CONTENT | 1001 | License 内容为空。 |
DECRYPT_OR_PARSE_FAILED | 1002 | License 解密或解析失败。 |
SIGNATURE_INVALID | 1003 | License 签名无效。 |
CLIENT_PACKAGE_OR_DEVICE_MISMATCH | 1004 | client、包名或设备绑定不匹配。 |
MODEL_KEY_EMPTY | 1005 | 模型密钥为空。 |
EXPIRED_OR_NOT_YET_VALID | 1006 | License 已过期或尚未生效。 |
UNSUPPORTED | 1007 | License 版本或算法不支持。 |
UNAUTHORIZED_SCOPE_OR_MODEL | 1008 | 当前 scope 或模型未授权。 |
INTERNAL_ERROR | 1098 | 离线 License 鉴权内部错误。 |
UNKNOWN | 1099 | 未知 native 返回码。 |
补充说明:
-
native
UNSUPPORTED的actualErrorCode=1007与后端 License 获取1007同码不同源;后者固定为actualErrorDomain="backend",并遵循上方的单次 token 刷新与重试契约。 -
后台业务/RTC 命令失败时,
errorCode为通用错误码;后台原始码保留在actualErrorCode、actualErrorDomain="backend"。 -
离线通道底层 ASR/MT/TTS 组件码可能被 SDK 映射为
2001109、2001110、2001114或2001117后回调业务侧;组件码用于定位具体离线阶段。 -
诊断日志可以记录
OfflineLicenseApplyStatus诊断枚举和 native LicenseCore 返回码,但不能上传原始 License、clientSecret或设备私钥。