中介是卖方广告平台提供收益管理服务的常用方式。在中介工作流中,中介 SDK(“中介”)会调用多个广告网络(“被中介方”或“被中介方”),以获取适合给定广告位的最佳广告。在某些情况下,中介和它调用的广告网络都需要其 SDK 在设备上运行并进行交互。
本文档概述了 SDK 运行时中中介工作流的关键变更。它涵盖以下主题:
- 之前的中介流程与当前 SDK 运行时中介支持之间的差异
- 在 SDK 运行时内为中介工作流设置操作,以及转换的不同阶段
- 有关如何处理并非所有 SDK 都已迁移到运行时的场景的指南
从 AGP 8.5 开始,SDK 运行时支持中介广告,并且以下版本的 SDK 运行时 Jetpack 库也支持中介广告:
AndroidX 库 | 版本 |
---|---|
androidx.privacysandbox.activity | 1.0.0-alpha01 |
androidx.privacysandbox.sdkruntime | 1.0.0-alpha13 |
androidx.privacysandbox.tools | 1.0.0-alpha08 |
androidx.privacysandbox.ui | 1.0.0-alpha09 |
术语库
以下术语对于了解 SDK 运行时中的中介至关重要:
- 支持运行时的 SDK (RE SDK):一种 SDK,旨在在 SDK 运行时环境中运行,并通过进程间通信 (IPC) 与应用通信。
- 运行时感知型 SDK (RA SDK):一种非运行时支持型 SDK,以静态方式关联到应用,可能包含现有 SDK 代码以及用于调用支持运行时的 SDK 的新代码。
- 应用内 SDK:与应用静态关联并不知道 SDK 运行时的 SDK。这可能是因为广告联盟尚未改用 SDK 运行时,或者发布商的自定义适配器存在问题。
- 中介:广告中介 SDK,通过与其他广告联盟 SDK 互动,在设备端提供中介服务。
- Mediatee:中介调用以提供和呈现广告的广告联盟 SDK。
- 中介适配器:中介 SDK 使用的 SDK,用于提供 API 接口转换,以便与各种中介 SDK 互操作,通常由中介提供。这些变量可以是运行时感知型,也可以是运行时无感知型。
典型的中介流程
如果您的 SDK 需要在 SDK 运行时中支持中介用例,则需要实现一些更改。本部分将介绍中介流程的关键元素,以便我们解决中介和中介对象所需的更改。
我们介绍的流程是使用多个广告网络 SDK 的设备端中介的简化版本,可作为讨论使中介历程与 SDK 运行时兼容所需更改的基础。
鉴于中介流程实现存在差异,我们将重点介绍以下两个主要流程:
- 初始化(包括发现广告联盟和通信)
- 广告界面 (UI) 呈现
初始化
以下是标准的初始化、广告网络发现和通信流程:
- 客户端应用发起中介
- 中介发现并初始化相关的中介和适配器
- 中介使用其适配器与每个中介进行通信
- 客户端应用请求中介加载广告
- 客户端应用请求中介展示此广告
广告界面演示
在前一步中的最终请求之后呈现广告时,流程取决于广告类型:
横幅广告 | 全屏广告 | 原生广告 |
---|---|---|
中介 SDK 会创建一个广告视图,用于封装胜出的中介广告的广告视图。 它还可能会在此 View 上设置监听器,或自动刷新广告(使用相同或不同的中介)。 |
中介 SDK 会向中介请求全屏广告,中介随后会启动 activity。 | 发布商使用中介 SDK 返回的组件管理视图处理和膨胀。 |
SDK 运行时中的中介流程
SDK 运行时内的中介运作方式因中介是否支持运行时而异。基于此,我们可以有以下场景:
- 中介和中介对象均位于 SDK 运行时中:RE 中介对象
- 中介位于 SDK 运行时中,中介对象位于应用内:应用内中介对象
RE Mediatee
下图概要介绍了中介的支持运行时的 (RE) 和支持运行时的感知 (RA) SDK、RE 中介适配器和中介的 RE SDK 之间的互动。
中介适配器需要与其要与之交互的中介位于同一进程中,因此它们也必须迁移到 SDK 运行时。
初始化
考虑启用了运行时的中介和中介对象的初始化、发现和通信时,流程将遵循以下步骤:
- 应用(或 RA SDK)使用
SdkSandboxManager#loadSdk
加载并初始化中介 SDK。 - 在初始化期间,中介 SDK 会使用
SdkSandboxController#loadSdk
在 SDK 运行时加载并初始化任何必需的中介。 - RE SDK 可以通过调用
SdkSandboxController#getSandboxedSdks
来发现运行时中所有已加载的 SDK。
广告界面演示
以下部分介绍了如何从 RE 媒体资源中加载横幅广告和全屏广告。
RE Mediatee 横幅广告
假设应用请求加载横幅广告,则完成渲染的流程如下:
- 中介会为此广告选择胜出的中介。
- 中介从中介对象获取
SandboxedUiAdapter
。 - 中介将 UiAdapter 转发给应用。
详细了解 SandboxedUiAdapter
和 SDK 运行时界面库的使用。
横幅广告的重叠式广告
如果中介想要向广告添加叠加层,则必须按如下所示修改流程:
- 中介会创建一个布局及其叠加层和
SandboxedSdkView
。 - 中介会为此广告选择胜出的中介。
- 中介从中介对象获取
SandboxedUiAdapter
。 - 中介将中介对象的
UiAdapter
设置为SandboxedSdkView
。 - 中介与应用共享填充的视图。
RE Mediatee 全屏广告
假设应用请求加载全屏广告,流程将按以下步骤进行:
- 应用(或 RA SDK)将
SdkActivityLauncher
与广告加载请求一起传递给中介。- 客户端可以使用谓词限制 activity 的创建。
- 中介会为此广告选择胜出的中介。
- 中介请求中介加载广告,并从应用传递
SdkActivityLauncher
。 - 中介注册 activity 处理脚本,并获取已注册 activity 的标识符令牌。
- 中介使用
SdkActivityLauncher
请求使用此令牌启动 activity。 - 如果客户端应用的谓词允许,SDK 运行时将在专用进程中启动此 activity。
详细了解 SDK 运行时中对全屏广告的 activity 支持。
应用内 Mediatee
下图概要介绍了中介的 RE 和 RA SDK、不了解 SDK 运行时的中介适配器以及与应用静态关联的中介 SDK(也不知道运行时)之间的互动。
初始化
由于在此场景中,中介静态关联到应用,且尚未迁移到 SDK 运行时,因此中介支持运行时的 SDK 应有一个用于注册中介的进程。
此注册应可使用中介的 API 访问,但实现详情由各中介自行决定。我们将此 API 称为 MediationSandboxedSdk#registerInAppMediatee
。
考虑 RE 中介 SDK 和应用内中介 SDK 的初始化、发现和通信时,流程将遵循以下步骤:
- 应用加载并初始化中介的运行时感知型 SDK。
- 中介的 RA SDK:
- 使用
SdkSandboxManager#loadSdk
初始化中介的 RE SDK。 - 初始化所有应用内中介 SDK。
- 使用 RE SDK 提供的 API
MediationSandboxedSdk#registerInAppMediate
发现并注册应用内中介 SDK。
- 使用
除了注册所有应用内中介 SDK 之外,中介的 RE SDK 还可以使用 SdkSandboxController#getSandboxedSdks
发现 SDK 运行时中加载的所有 SDK。
广告界面演示
以下部分介绍了如何从应用内中介加载横幅广告和全屏广告。
应用内中介横幅广告
假设应用请求加载横幅广告,则完成渲染的流程如下:
- 中介的运行时感知型 SDK 会将应用的请求转发到其支持运行时的 SDK。
- 中介的 RE SDK 会选择相关的中介。
- 中介的 RE SDK 会检索对中介的引用,并请求通过 RA SDK 加载广告。
- RA SDK 从应用内中介获取 View。
- RA SDK 会为其收到的 View 创建
SandboxedUiAdapter
。 - RA SDK 会将
UiAdapter
转发给 RE SDK。 - RE SDK 会将
UiAdapter
转发给应用。
应用内中介全屏广告
假设应用请求加载全屏广告,流程将按以下步骤进行:
- 应用将
SdkActivityLauncher
与广告加载请求一起传递给中介的 RA SDK。- 客户端可以使用谓词限制 activity 的创建。
- 中介的 RA SDK 会将应用的请求转发到其 RE SDK。
- 中介的 RE SDK:
- 选择相关的中介。
- 检索对应用内中介的引用。
- 请求通过 RA SDK 加载广告。
- RA SDK 请求中介加载广告。
- mediatee 会直接启动 activity。系统不会执行应用的谓词。
互动和分享反馈
Privacy Sandbox on Android 是一项正在进行的项目,本文档反映了其当前设计。在我们不断开发和完善其功能的过程中,您的反馈至关重要。 提交 bug 以提供反馈。