跳转到主要内容
格式基于 Keep a Changelog, 本项目遵循 语义化版本

[3.0.0] - 2026-04-06

破坏性变更

  • 公共 SDK API 现在要求显式传入 Android ContextCloudX.initialize() 现在要求传入 Android Context,公共广告创建 API 也同样要求传入 ContextcreateBanner()createMREC()createInterstitial()createRewarded()
  • 适配器工厂接口改为直接接收原始 Context — 适配器工厂接口现在直接接收 context: Context,不再使用 CloudXContextProvider;外部适配器需要更新其 create() 签名,并将 contextProvider.getContext() 替换为传入的 context

变更

  • SDK 内部上下文流改为显式传递 — SDK 不再依赖进程启动阶段的上下文引导。Context 现在会在初始化、广告创建、隐私处理、HTTP 客户端初始化以及内部单例访问中显式传递
  • 启动开销与 ANR 风险降低 — SDK 启动初始化器已从 manifest 中移除,从而减少应用启动期间的主线程工作并降低 ANR 风险
  • 隐私初始化顺序修正 — 隐私转发现在会按正确的初始化顺序解析 consent,并通过 ManualPrivacyState.onChanged 响应初始化后的手动隐私变更
  • 第一方 Metrics 遥测能力扩展 — 第一方 metrics 遥测现在已接入公共 SDK 入口和内部运行时调用点,并通过带类型的 telemetry metric、配置驱动采样以及 MetricsTelemetryTracker 的缓冲投递完成上报

移除

  • 旧的启动上下文引导链路 — 移除了内部启动上下文引导路径,包括 ApplicationContextCloudXStartupCloudXContextProvider 以及内部 ContextProvider 间接层
  • ActivityLifecycleService 启动链路 — 移除了 ActivityLifecycleService 及其在 SDK 启动流程中的注册路径

[2.2.7] - 2026-04-02

新增

  • 第一方 Metrics 遥测已贯通 SDK 调用链路 — Metrics 遥测现已接入 SDK 调用点、HTTP 计时埋点和遥测收集器,因此方法调用与内部 SDK 指标现在会与现有 metrics tracker 并行进入第一方 metrics 遥测链路

变更

  • 指标时间戳改为在事件创建时记录 — 指标时间戳现在会在 metric 事件创建时写入,而不是等到 tracker 之后入队时再写入,因此时间数据反映的是 SDK 动作实际发生的时刻
  • Activity 生命周期服务显式初始化 — Activity 生命周期跟踪现在通过 ActivityLifecycleService.instance(context) 显式初始化,Jetpack Startup 在注册生命周期跟踪时也会直接传入真实的 application context

修复

  • 发布商启动 ANR 风险 — 修复 ActivityLifecycleService 初始化过程中的发布商启动 ANR 风险,移除了启动流程中此前的惰性单例和全局查找路径
  • SDK Metrics 遥测缺失 — 修复 SDK metrics 遥测事件缺失问题,将 MetricsTelemetryTracker 接入此前只走旧 metrics 路径的运行时调用点

[2.2.6] - 2026-04-01

新增

  • 生命周期事件遥测 — SDK 现在会在保留旧追踪链路的同时,新增第一方 init、bid request、load success、loss、impression、click、reward 和 error 遥测事件
  • 崩溃遥测链路 — SDK 崩溃现在会在下次启动时通过旧崩溃追踪器和新的第一方崩溃遥测追踪器同时缓存并发送

变更

  • 遥测中包含 placement 和 customData — Banner、插屏和激励广告的生命周期遥测现在会在事件发生时携带该广告实例对应的 placementcustomData
  • 崩溃缓存行为调整 — 即使未配置崩溃端点,崩溃遥测负载现在也会被缓存;端点是否存在只影响是否发送待处理负载
  • 遥测端点命名统一 — 远程日志端点配置现在使用 sdkLogEndpointURL 命名,以与服务端协议保持一致

移除

  • Session 初始化追踪 — 移除了旧的 session 端点和内部 session tracker 流程;SDK 初始化时不再发送旧的 session init 事件

修复

  • 第一方遥测中的 SDK 错误可见性 — 竞价响应解析失败、适配器初始化失败和广告加载失败现在会记录到第一方遥测,而不再只出现在旧追踪链路中
  • 崩溃追踪器相互隔离 — 一个崩溃追踪器失败后,不再阻止另一个追踪器缓存或发送其负载
  • 发布版本不包含 Native Ads — 已发布的 2.2.6 版本明确排除了 commit f6d049327f249fa1728fbb9e754484f460e40fbd 中的 native ads 工作

[2.2.5] - 2026-03-30

新增

  • SDK 初始化遥测 — 通过 sdkInitEndpointURL 新增第一方 SDK 初始化事件跟踪
  • 竞价请求遥测 — 通过 sdkBidReqEndpointURL 新增第一方竞价请求事件跟踪
  • 展示中加载失败错误码 — 新增 LOAD_NOT_ALLOWED_WHILE_SHOWING,当同一个全屏广告实例正在展示时再次调用 load() 会明确失败

变更

  • 全屏广告就绪状态改为由适配器提供 — 全屏广告是否就绪现在由底层广告网络适配器判断,而不再仅依赖 SDK 是否还持有缓存的全屏广告引用
  • 过期全屏广告的重新加载处理FullscreenAdManager.load() 只有在适配器仍然报告广告可用时才会复用缓存广告;否则会销毁陈旧广告并重新发起加载
  • 静态全屏广告过期机制 — 静态全屏广告现在会记录加载时间,并在一小时后不再报告为就绪

修复

  • 内部跟踪事件丢失 — 修复适配器连续触发回调时,因代理协程作用域在事件发射完成前被取消而导致 impression、click、reward、error 内部跟踪丢失的问题
  • 展示过程中错误接受新的加载请求 — 修复全屏广告在正在展示时仍接受 load() 的问题;现在会立即通过 onAdLoadFailed(..., LOAD_NOT_ALLOWED_WHILE_SHOWING) 失败
  • 陈旧全屏广告仍被判定为可展示 — 修复底层广告网络 SDK 已使广告失效或过期后,全屏广告仍被报告为 ready 的问题
  • Mintegral CMP 同意状态传递 — 修复 Mintegral 在由 CMP 管理 GDPR 同意时无法读取同意信息的问题;当未设置手动同意时,SDK 现在会调用 setConsentStatus(context) 让 Mintegral 从共享存储读取 TCF 字符串

[2.2.4] - 2026-03-26

新增

  • 精细化无填充诊断 — 无填充错误消息现在包含每个网络的未出价原因,便于诊断填充率问题
  • 改进竞价请求数据 — 竞价请求现在包含内容语言,以改善广告定向

变更

  • 服务端驱动的位置控制 — 竞价请求中的位置坐标共享现在通过 CloudX 控制面板控制(账户级别)。发布商无需更改 SDK 代码。

修复

  • ProGuard 兼容性 — 修复适配器模块的 consumer ProGuard 规则未正确应用的问题
  • Mintegral 稳定性 — 修复 Mintegral 适配器在 Android 6.0 (API 23) 上的崩溃问题

[2.2.3] - 2026-03-20

新增

  • 通过指标管道新增远程日志采集,支持服务端控制过滤条件和采集限制
  • 为 Unity Ads 适配器新增 GitHub Packages RC 工作流和 Maven Central 发布工作流支持

变更

  • 将 Unity 适配器的产物/模块重命名为 adapter-unityads,并统一 SDK、构建配置和文档中的 Unity Ads 命名
  • CXLogger 重构为基于 handler 的架构,并简化了作用域日志实现
  • 移除 demo app 对 SDK 内部 CXLogger 的依赖

修复

  • 修复 Unity Ads 网络名称大小写,使其与服务端竞价方配置保持一致

[2.2.2] - 2026-03-17

新增

  • 配置请求中包含适配器元数据
  • 竞价令牌收集的指标追踪
  • SDK 初始化后发送会话初始化事件

修复

  • InMobi 竞价令牌获取现在在主线程上运行

[2.2.1] - 2026-03-11

变更

  • 为所有广告格式工厂的 Mintegral 适配器添加防御性空值检查和异常保护,并将 Mintegral SDK 从 17.0.61 升级至 17.0.91

修复

  • 修复 BidRequestProvider.createBidRequest() 中的非局部返回问题,该问题导致适配器抛出异常时适配器扩展被静默跳过

[2.2.0] - 2026-03-10

新增

  • 广告点击跟踪 — 用户点击广告时通知服务器
  • 手动隐私 APIsetHasUserConsent()setDoNotSell(),用于自行管理用户同意的应用,自动转发至所有广告网络适配器
  • Kotlin 协程支持 — 新增挂起函数 initialize() 重载,简化 Kotlin 集成
  • 网络 SDK 崩溃报告 — 检测并报告来自广告网络 SDK 的崩溃
  • 创意类型支持 — CloudX 渲染器新增创意类型
  • 所有广告格式的适配器错误指标跟踪

变更

  • CloudX 渲染器移入核心 SDK 模块
  • 移除 appcompatwebkit 传递依赖,减小 SDK 体积
  • 指标在临时失败(5xx、网络、超时)时保留并自动重试
  • 将 Vungle SDK 从 7.6.1 升级至 7.7.1
  • 将 InMobi SDK 从 11.1.0 升级至 11.1.1

修复

  • 修复了地理位置数据从处理后的头部而非原始头部读取的问题
  • 修复了 INVALID_APP_KEY 错误在非配置 HTTP 响应中错误出现的问题

[2.0.1] - 2026-03-04

此补丁版本增加了对 Unity Engine 2022.3 的兼容性。

变更

  • 改进了内部事件持久化,采用更轻量的基于文件的存储方案,解决了 Unity Engine 2022.3 构建兼容性问题
  • 将 Meta Audience Network SDK 从 6.21.0 降级至 6.20.0,以兼容 Unity Engine 2022.3

修复

  • 修复了会话指标跟踪中罕见的并发访问问题
  • 修复了使用 singleTask 启动模式的应用中 Meta 激励广告 Activity 被过早销毁的问题

[2.0.0] - 2026-02-04

此版本将广告位名称替换为 CloudX 控制台中的广告单元 ID。更新您的 createBanner()createMREC()createInterstitial()createRewarded() 调用,使用广告单元 ID 而不是广告位名称。

新增

  • 激励视频广告 包括 CloudX.createRewarded()CloudXRewardedAdCloudXRewardedListenerCloudXReward
  • InMobi 适配器 (SDK 11.1.0) 支持横幅、MREC、插屏和激励视频广告
  • Vungle 激励视频广告 (SDK 7.6.1) 为现有 Vungle 适配器添加支持
  • CloudX.isInitialized() 用于检查 SDK 初始化状态
  • CloudX.getVersion() 用于获取 SDK 版本字符串
  • CloudXAdView 上添加 setPlacement()setCustomData() 方法用于跟踪
  • 在全屏广告上添加 show(activity, placement, customData) 重载用于跟踪
  • onInitialized() 回调中返回 CloudXSdkConfiguration
  • 添加 CloudXAd.networkPlacement 属性用于网络特定的广告位 ID
  • 新增错误代码:NETWORK_NO_CONNECTIONAD_ALREADY_SHOWINGDONT_KEEP_ACTIVITIES_ENABLEDAD_NOT_READYINVALID_APP_KEY

破坏性变更

  • minSdk 从 21 提升到 23 (Android 6.0 Marshmallow)
  • CloudXInitializationParams 替换为 CloudXInitializationConfiguration 构建器模式
  • createBanner()createMREC()createInterstitial()createRewarded() 中将 placementName 参数重命名为 adUnitId
  • CloudXAd.placementId 重命名为 adUnitId
  • 移除 CloudXAd.placementName 属性
  • CloudXAd.bidderName 重命名为 networkName
  • CloudXErrorCode.INVALID_PLACEMENT 重命名为 INVALID_AD_UNIT
  • onAdLoadFailed(placementName, cloudXError) 更改为 onAdLoadFailed(adUnitId, cloudXError)
  • onAdDisplayFailed(cloudXError) 更改为 onAdDisplayFailed(cloudXAd, cloudXError) - 现在包含广告对象
  • onInitialized() 更改为 onInitialized(configuration: CloudXSdkConfiguration)
  • 移除 testMode 参数 - 测试模式现在由服务器控制
  • show() 更改为 show(activity) 用于插屏和激励视频广告 - 现在需要 Activity 参数

变更

  • Meta Audience Network SDK 从 6.17.0 更新到 6.21.0

修复

  • 广告重新加载现在在 onAdHiddenonAdDisplayFailed 回调中正常工作
  • 所有 load()show() 调用现在保证在 UI 线程上回调

[0.12.1] - 2025-12-23

修复

  • 修复 Meta 适配器中由 getBidderToken() 阻塞主线程导致的 ANR

[0.12.0] - 2025-12-14

破坏性变更

  • 移除 CloudXError.effectiveMessage - 请直接使用 message
  • 移除 setLoggingEnabled() - 使用 setMinLogLevel(CloudXLogLevel.NONE) 来禁用日志
  • 移除 CloudXPrivacy 类 - 隐私现在通过 GPP/TCF 自动处理

变更

  • 增强 GDPR 支持,包含 GPP Section 2 解析和供应商同意检查
  • 简化 TCF 目的检查,仅需要目的 1 和 2(移除 3-4)
  • 通过 GPP 添加 CCPA 支持,并提供传统 USPrivacy 回退
  • 移除 COPPA 处理
  • 添加 CloudXLogLevel.NONE 枚举值用于禁用日志

修复

  • 修复初始化期间地理 API 失败处理

[0.11.0] - 2025-12-09

变更

  • HTTP 客户端从 Ktor 3.0.3 迁移到 OkHttp 4.12.0
  • 为所有广告格式添加 isDestroyed 保护

[0.10.0] - 2025-12-03

新增

  • Vungle 适配器 (SDK 7.6.1) 支持横幅和插屏广告

变更

  • 简化日志标签为 “CloudX” 以便更容易过滤 logcat
  • 为公共 API 函数添加入口日志以便更好地调试
  • SDK 初始化现在在未找到适配器时会提前失败并显示明确错误

修复

  • 修复加载失败后横幅刷新停止的问题

[0.9.0] - 2025-11-26

新增

  • 通过新的 CloudXAdRevenueListener 接口和 onAdRevenuePaid 回调实现广告收入追踪

变更

  • 将 Ktor 从 2.3.8 升级到 3.0.3 以提高与使用 Ktor 3.x 的应用的兼容性

修复

  • 修复广告生命周期管理中的内存泄漏
  • 各种错误修复和稳定性改进

[0.8.0] - 2025-11-11

内部

  • 验证发布自动化工作流程的测试版本

[0.6.1] - 2025-11-03

修复

  • 修复发布脚本以更新中文 README (README.zh-CN.md) 版本号

[0.6.0] - 2025-11-03

新增

  • 测试模式支持:在 CloudXInitializationParams 中添加 testMode 参数以在开发期间请求测试广告

[0.5.0] - 2025-10-27

修复

  • 修复发布推广脚本以正确同步从发布分支到主分支的文件删除

[0.4.0] - 2025-10-27

新增

  • CloudX Android SDK 初始 Alpha 版本
  • 支持横幅 (320x50) 和 MREC (300x250) 广告格式
  • 支持插屏全屏广告
  • 具有智能广告聚合的实时竞价
  • CloudX 和 Meta Audience Network 适配器支持
  • GDPR、CCPA(通过 GPP)和 COPPA 隐私合规
  • IAB TCF、USPrivacy 和 GPP 字符串支持
  • 用于竞价优化的会话深度追踪
  • 全面的广告生命周期回调和错误处理
  • 可配置日志级别的调试日志