SDK 运行时中的中介支持

中介是卖方广告平台提供收益管理的常用方式。在中介工作流程中,中介 SDK(“中介”)会调用多个广告联盟(“被中介”或“被中介”),以获取适合特定广告位的最佳广告。在某些情况下,中介和它调用的广告联盟都需要其 SDK 在设备上运行并进行互动。

本文档概述了 SDK 运行时的中介工作流程的主要变化。它涵盖以下主题:

  • 之前的中介流程与当前 SDK 运行时中介支持之间的差异
  • 在 SDK 运行时中为中介工作流设置操作,以及不同的过渡阶段
  • 有关如何处理并非所有 SDK 都已迁移到运行时的情形的指南

AGP 8.5 和以下版本的 SDK 运行时 Jetpack 库开始,支持在 SDK 运行时中使用中介广告:

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 运行时环境中运行并通过进程间通信 (IPC) 与应用通信的 SDK。
  • 运行时感知型 SDK (RA SDK):一种静态链接到应用且不支持运行时的 SDK,可能包含您现有的 SDK 代码以及用于调用运行时感知型 SDK 的新代码。
  • 应用内 SDK:与应用静态链接并运行的 SDK,不了解 SDK 运行时。这可能是尚未过渡到 SDK 运行时的广告联盟,也可能是发布商的自定义适配器。
  • 中介程序:通过与其他广告联盟 SDK 互动,在设备上提供中介服务的广告中介 SDK。
  • 被中介的广告联盟:由中介程序调用以提供和呈现广告的广告联盟 SDK。
  • 中介适配器:中介 SDK 使用的 SDK,用于提供 API 接口转换,以便与各种中介 SDK 互操作,通常由中介提供。这些资源可以是运行时感知型,也可以是运行时非感知型。

典型的中介流程

如果您的 SDK 需要在 SDK 运行时中支持中介用例,则需要进行一些更改。本部分将回顾中介流程的关键要素,以便我们解决中介方和被中介方所需做出的变更。

我们描述的流程代表了使用多个广告网络 SDK 的设备端中介的简化版本,可作为讨论如何进行必要更改以使中介流程与 SDK 运行时兼容的基础。

鉴于中介流程实现方式各不相同,我们重点介绍以下两种主要流程:

  • 初始化(包括发现广告联盟和通信)
  • 广告界面 (UI) 呈现

初始化

以下内容展示了标准的初始化、广告网络发现和通信流程:

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

广告界面呈现

在完成上一步中的最终请求后,广告的呈现流程取决于广告类型:

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

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

SDK 运行时中的中介流程

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

  • 中介和被中介方均位于 SDK 运行时内:RE 被中介方
  • 中介位于 SDK 运行时中,而被中介者位于应用内:应用内被中介者

RE Mediatee

以下架构图高度概括地展示了中介的运行时启用 (RE) SDK 和运行时感知 (RA) SDK、RE 中介适配器以及被中介对象的 RE SDK 之间的互动。

中介适配器需要与它们所连接的中介对象位于同一进程中,因此也必须迁移到 SDK 运行时。

架构图,简要展示了中介的运行时启用 (RE) 和运行时感知 (RA) SDK、RE 中介适配器以及被中介对象的 RE SDK 之间的互动。
图 1. 中介和被中介方均为 RE SDK。

初始化

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

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

广告界面呈现

以下部分介绍了如何从 RE mediatee 加载横幅广告和全屏广告。

RE Mediatee 横幅广告

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

  1. 中介选择此广告的获胜中介。
  2. 中介方从被中介方处获取 SandboxedUiAdapter
  3. 中介将 UiAdapter 转发给应用。
在 RE-RE 中介中完成横幅广告渲染的流程。
图 3. 完成从 RE mediatee 渲染横幅广告的流程。

详细了解 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. 即使 mediatee 知道 RE SDK,它也会静态链接到应用。

初始化

由于在此方案中,被中介的 SDK 静态链接到应用,并且尚未迁移到 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 从应用内被中介对象获取视图。
  5. RA SDK 会为收到的 View 创建 SandboxedUiAdapter
  6. RA SDK 会将 UiAdapter 转发给 RE SDK。
  7. RE SDK 会将 UiAdapter 转发给应用。
从应用内被中介方完成横幅广告渲染的流程
图 7. 请注意,当从应用内被中介方获取 V1 时,中介方不应将视图叠加在 V1 上。
应用内 mediatee 全屏广告

如果应用请求加载全屏广告,则流程会按以下步骤进行:

  1. 应用通过加载广告的请求将 SdkActivityLauncher 传递给中介的 RA SDK。
    1. 客户端可以使用谓词来限制 activity 的创建。
  2. 中介的 RA SDK 将应用的请求转发给其 RE SDK。
  3. 中介的 RE SDK:
    1. 选择相关被调解方。
    2. 检索对应用内被中介方的引用。
    3. 通过 RA SDK 发送加载广告的请求。
  4. RA SDK 请求被中介方加载广告。
  5. 被调解方直接开始调解活动。应用的谓词将不会被遵守。
当被中介的应用位于应用进程中时,全屏广告加载流程。
图 8. 应用内中介将忽略该谓词。

互动和分享反馈

Privacy Sandbox on Android 是一项正在进行的项目,本文档反映了其当前的设计。您的反馈对我们继续开发和增强其功能至关重要。 提交 bug 以提供反馈。