SDK 运行时中的中介支持

中介是卖方广告平台提供收益管理服务的常用方式。在中介工作流中,中介 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) 呈现

初始化

以下是标准的初始化、广告网络发现和通信流程:

  1. 客户端应用发起中介
  2. 中介发现并初始化相关的中介和适配器
  3. 中介使用其适配器与每个中介进行通信
  4. 客户端应用请求中介加载广告
  5. 客户端应用请求中介展示此广告

广告界面演示

在前一步中的最终请求之后呈现广告时,流程取决于广告类型:

横幅广告 全屏广告 原生广告
中介 SDK 会创建一个广告视图,用于封装胜出的中介广告的广告视图。

它还可能会在此 View 上设置监听器,或自动刷新广告(使用相同或不同的中介)。
中介 SDK 会向中介请求全屏广告,中介随后会启动 activity。 发布商使用中介 SDK 返回的组件管理视图处理和膨胀。

SDK 运行时中的中介流程

SDK 运行时内的中介运作方式因中介是否支持运行时而异。基于此,我们可以有以下场景:

  • 中介和中介对象均位于 SDK 运行时中:RE 中介对象
  • 中介位于 SDK 运行时中,中介对象位于应用内:应用内中介对象

RE Mediatee

下图概要介绍了中介的支持运行时的 (RE) 和支持运行时的感知 (RA) SDK、RE 中介适配器和中介的 RE SDK 之间的互动。

中介适配器需要与其要与之交互的中介位于同一进程中,因此它们也必须迁移到 SDK 运行时。

架构图,概要展示了中介的支持运行时的 (RE) 和运行时感知型 (RA) SDK、RE 中介适配器和中介的 RE SDK 之间的互动。
图 1. 中介和中介对象都是 RE SDK。

初始化

考虑启用了运行时的中介和中介对象的初始化、发现和通信时,流程将遵循以下步骤:

  1. 应用(或 RA SDK)使用 SdkSandboxManager#loadSdk 加载并初始化中介 SDK。
  2. 在初始化期间,中介 SDK 会使用 SdkSandboxController#loadSdk 在 SDK 运行时加载并初始化任何必需的中介。
  3. RE SDK 可以通过调用 SdkSandboxController#getSandboxedSdks 来发现运行时中所有已加载的 SDK。
RE - RE 中介序列图,显示了前面所述的流程。
图 2. 用于初始化 RE 中介的流程。

广告界面演示

以下部分介绍了如何从 RE 媒体资源中加载横幅广告和全屏广告。

RE Mediatee 横幅广告

假设应用请求加载横幅广告,则完成渲染的流程如下:

  1. 中介会为此广告选择胜出的中介。
  2. 中介从中介对象获取 SandboxedUiAdapter
  3. 中介将 UiAdapter 转发给应用。
在 RE-RE 中介中完成渲染横幅广告的流程。
图 3. 完成从 RE 中介中呈现横幅广告的流程。

详细了解 SandboxedUiAdapter 和 SDK 运行时界面库的使用。

横幅广告的重叠式广告

如果中介想要向广告添加叠加层,则必须按如下所示修改流程:

  1. 中介会创建一个布局及其叠加层和 SandboxedSdkView
  2. 中介会为此广告选择胜出的中介。
  3. 中介从中介对象获取 SandboxedUiAdapter
  4. 中介将中介对象的 UiAdapter 设置为 SandboxedSdkView
  5. 中介与应用共享填充的视图。
用于将视图叠加在从 RE Mediatee 获取的横幅广告上的流程。
用于将视图叠加在从 RE Mediatee 获取的横幅广告上的流程。
RE Mediatee 全屏广告

假设应用请求加载全屏广告,流程将按以下步骤进行:

  1. 应用(或 RA SDK)将 SdkActivityLauncher 与广告加载请求一起传递给中介。
    1. 客户端可以使用谓词限制 activity 的创建。
  2. 中介会为此广告选择胜出的中介。
  3. 中介请求中介加载广告,并从应用传递 SdkActivityLauncher
  4. 中介注册 activity 处理脚本,并获取已注册 activity 的标识符令牌。
  5. 中介使用 SdkActivityLauncher 请求使用此令牌启动 activity。
  6. 如果客户端应用的谓词允许,SDK 运行时将在专用进程中启动此 activity。
用于从 RE Mediatee 显示中介全屏应用的流程。
图 4. 流程图:展示如何从 RE Mediatee 加载中介全屏广告。

详细了解 SDK 运行时中对全屏广告的 activity 支持。

应用内 Mediatee

下图概要介绍了中介的 RE 和 RA SDK、不了解 SDK 运行时的中介适配器以及与应用静态关联的中介 SDK(也不知道运行时)之间的互动。

架构图,简要概述了中介的 RE 和 RA SDK、不了解 SDK 运行时的中介适配器以及与应用静态关联的中介 SDK(也不知道运行时)之间的交互。
图 5. 中介静态关联到应用,即使知道 RE SDK 也是如此。

初始化

由于在此场景中,中介静态关联到应用,且尚未迁移到 SDK 运行时,因此中介支持运行时的 SDK 应有一个用于注册中介的进程

此注册应可使用中介的 API 访问,但实现详情由各中介自行决定。我们将此 API 称为 MediationSandboxedSdk#registerInAppMediatee

考虑 RE 中介 SDK 和应用内中介 SDK 的初始化、发现和通信时,流程将遵循以下步骤:

  1. 应用加载并初始化中介的运行时感知型 SDK。
  2. 中介的 RA SDK:
    1. 使用 SdkSandboxManager#loadSdk 初始化中介的 RE SDK。
    2. 初始化所有应用内中介 SDK。
    3. 使用 RE SDK 提供的 API MediationSandboxedSdk#registerInAppMediate 发现并注册应用内中介 SDK。

除了注册所有应用内中介 SDK 之外,中介的 RE SDK 还可以使用 SdkSandboxController#getSandboxedSdks 发现 SDK 运行时中加载的所有 SDK。

序列图,展示了初始化应用内中介所述的流程。
图 6. 请注意,我们使用建议的中介的 API 注册对应用内中介的引用。

广告界面演示

以下部分介绍了如何从应用内中介加载横幅广告和全屏广告。

应用内中介横幅广告

假设应用请求加载横幅广告,则完成渲染的流程如下:

  1. 中介的运行时感知型 SDK 会将应用的请求转发到其支持运行时的 SDK。
  2. 中介的 RE SDK 会选择相关的中介。
  3. 中介的 RE SDK 会检索对中介的引用,并请求通过 RA SDK 加载广告。
  4. RA SDK 从应用内中介获取 View。
  5. RA SDK 会为其收到的 View 创建 SandboxedUiAdapter
  6. RA SDK 会将 UiAdapter 转发给 RE SDK。
  7. RE SDK 会将 UiAdapter 转发给应用。
完成从应用内中介渲染横幅广告的流程
图 7. 请注意,中介从应用内中介获取 V1 时,不应在 V1 上叠加视图。
应用内中介全屏广告

假设应用请求加载全屏广告,流程将按以下步骤进行:

  1. 应用将 SdkActivityLauncher 与广告加载请求一起传递给中介的 RA SDK。
    1. 客户端可以使用谓词限制 activity 的创建。
  2. 中介的 RA SDK 会将应用的请求转发到其 RE SDK。
  3. 中介的 RE SDK:
    1. 选择相关的中介。
    2. 检索对应用内中介的引用。
    3. 请求通过 RA SDK 加载广告。
  4. RA SDK 请求中介加载广告。
  5. mediatee 会直接启动 activity。系统不会执行应用的谓词。
中介位于应用进程中的全屏广告加载流程。
图 8. 应用内中介会忽略该谓词。

互动和分享反馈

Privacy Sandbox on Android 是一项正在进行的项目,本文档反映了其当前设计。在我们不断开发和完善其功能的过程中,您的反馈至关重要。 提交 bug 以提供反馈。