iOS 错误码
概述
本文档列出优聚智汇 iOS SDK 可能返回的错误码及其含义,帮助开发者快速排查和解决问题。
在 onLoadError 和 onAdError 回调中,开发者会收到 UjuException 对象,通过 error.code 和 error.message 获取错误信息。
iOS 错误码与 Android 不同
iOS 使用 UjuErrorCode 枚举(分组式:0 / 1-3 / 100-103 / 200-202 / ...),Android 使用 ErrorType 枚举(0 / 1000-2011)。请勿混淆两个平台的错误码,分别参考各平台错误码文档。
UjuException 结构
swift
public struct UjuException: Error, CustomStringConvertible {
public let code: Int // 错误码,对应 UjuErrorCode.rawValue
public let message: String // 错误信息
public let underlyingError: Error? // 底层错误(可选,用于调试)
public var description: String { get } // "UjuException(code=X, message=Y)"
}日志输出建议
打印错误时使用 error.description 或 String(describing: error),不要使用 error.localizedDescription(后者会回退到 NSError 默认描述,如「未能完成操作。(UjuAdCore.UjuException错误5。)」)。
UjuErrorCode 错误码
UjuErrorCode 枚举按业务分组定义:
初始化(Init)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 0 | unknown | 未知错误 | 未知原因 | 联系技术支持并提供日志 |
| 1 | initFailed | 初始化失败 | appId/appKey 错误、网络问题、配置异常 | 检查 appId/appKey/region,检查网络 |
| 2 | initInvalidConfig | 初始化配置无效 | UjuAdInitConfig.create 参数缺失或格式错误 | 检查配置参数是否完整正确 |
| 3 | notInitialized | SDK 未初始化 | 未调用 initialize/start 就加载广告 | 确保先完成两阶段初始化 |
加载(Load)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 100 | loadFailed | 加载失败 | 适配器异常、广告位配置错误 | 检查广告位 ID,稍后重试 |
| 101 | loadTimeout | 加载超时 | 广告请求超时 | 检查网络状况,适当增加超时或重试 |
| 102 | noFill | 无填充 | ADX 本次无出价、广告库存不足、频次达上限 | 正常业务响应,可降级或稍后重试 |
| 103 | invalidPlacement | 广告位无效 | placementId 为空或不存在 | 检查广告位 ID 是否正确 |
展示(Show)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 200 | showFailed | 展示失败 | 展示流程异常 | 检查展示时机与容器 |
| 201 | adNotReady | 广告未就绪 | 未加载成功就调用 show | 确保 onLoadSuccess 后再 show,检查 isReady() |
| 202 | frequencyCapped | 频次限制 | 展示频次已达上限 | 等待频次重置后再展示 |
网络(Network)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 300 | networkError | 网络错误 | 无网络连接 | 检查网络连接 |
| 301 | networkTimeout | 网络超时 | 网络请求超时 | 检查网络状况,稍后重试 |
| 302 | networkUnavailable | 网络不可用 | 网络完全不可用 | 提示用户检查网络 |
解析(Parse)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 400 | parseError | 解析错误 | 数据格式异常 | 联系技术支持 |
| 401 | encryptionError | 加密错误 | RSA/AES 加密失败 | 检查 rsaPublicKey 是否正确 |
| 402 | decryptionError | 解密错误 | 服务端数据解密失败 | 检查 rsaPublicKey / 联系技术支持 |
配置(Config)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 500 | configError | 配置错误 | 策略配置异常 | 联系技术支持 |
| 501 | configVersionMismatch | 配置版本不匹配 | 本地缓存配置版本与服务端不一致 | 清除缓存后重试 |
缓存(Cache)
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 600 | cacheError | 缓存错误 | 缓存读写异常 | 联系技术支持 |
| 601 | cacheIOError | 缓存 IO 错误 | 磁盘读写失败 | 检查磁盘空间 |
其他
| 错误码 | 枚举名 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|---|
| 700 | crashReportFailed | 崩溃上报失败 | 崩溃信息上报失败 | 不影响主流程,可忽略 |
| 800 | adapterNotRegistered | 适配器未注册 | 对应 ADN 适配器未注册 | 检查 registerAdapterFactory 调用 |
| 801 | adapterInitFailed | 适配器初始化失败 | 三方 SDK 初始化失败 | 检查三方 SDK 配置 |
| 802 | adapterUnsupportedFormat | 适配器不支持该格式 | 适配器不支持当前广告格式 | 检查广告位与适配器匹配 |
onLoadError 与 onAdError 区分
加载失败 vs 展示失败
onLoadError(error: UjuException):广告加载阶段失败(1 个参数),常见错误码 1/2/100/101/102/103/300/301onAdError(error: UjuException):广告展示阶段失败(1 个参数),常见错误码 200/201/202
iOS 的 onLoadError 与 onAdError 均为 1 个参数(error),与 Android 不同(Android onLoadError 有 2 个参数含 placementId)。
错误处理示例
swift
func onLoadError(error: UjuException) {
switch error.code {
case UjuErrorCode.noFill.rawValue:
// ADX 无出价,正常业务响应,可降级到其他广告源
print("无填充,稍后重试")
case UjuErrorCode.networkError.rawValue, UjuErrorCode.networkTimeout.rawValue:
// 网络问题,提示用户检查网络
print("网络异常,请检查网络连接")
case UjuErrorCode.adNotReady.rawValue:
// 广告未就绪,需先调用 load()
print("广告未就绪,请先加载")
default:
print("广告错误: \(error.description)")
}
}
func onAdError(error: UjuException) {
// 展示阶段失败
print("展示失败: code=\(error.code), msg=\(error.message)")
}重试机制建议
- 对于网络错误(300/301/302)和加载超时(101),可实现合理的重试机制
- 设置重试间隔和最大重试次数,避免无限重试
- 建议重试间隔 3-5 秒,最大重试 3 次
noFill(102)不建议立即重试,可间隔较长时间后再试
常见问题排查表
| 现象 | 可能错误码 | 排查方向 |
|---|---|---|
| SDK 初始化失败 | 1/2 | 检查 appId/appKey/region 是否正确 |
| 广告不加载 | 100/102/103 | 检查广告位 ID、网络连接 |
| 广告不展示 | 201 | 确认 onLoadSuccess 后再 show,检查 isReady() |
| 无填充 | 102 | 正常现象,广告库存不足,稍后重试 |
| 网络错误 | 300/301/302 | 检查网络连接 |
| 加解密失败 | 401/402 | 检查 rsaPublicKey 是否正确 |
联系技术支持
如果您遇到无法解决的错误问题,可以通过以下方式联系技术支持:
- 邮件:marco@ujuad.com
- 官网:https://www.ujuad.com
提供错误码、错误信息、发生环境和复现步骤,有助于技术支持更快定位问题。
