SDK ランタイムでのメディエーションのサポート

メディエーションは、セルサイドの広告プラットフォームがイールド マネジメントを提供する一般的な方法です。メディエーション ワークフローでは、メディエーション SDK(「メディエーター」)が複数の広告ネットワーク(「メディエーション対象」)を呼び出して、特定のスロットに最適な広告を取得します。場合によっては、メディエーションと、メディエーションが呼び出す広告ネットワークの両方で、SDK がデバイスに存在し、やり取りする必要があります。

このドキュメントでは、SDK ランタイムのメディエーション ワークフローの主な変更点について説明します。ここでは次のトピックを扱います。

  • 以前のメディエーション フローと現在の SDK ランタイム メディエーション サポートの違い
  • SDK ランタイムでのメディエーション ワークフローのアクションと、移行のさまざまなステージを設定する
  • すべての SDK が Runtime に移行されていないシナリオの処理方法に関するガイダンス

SDK ランタイムでのメディエーション広告のサポートは、AGP 8.5 と、次のバージョンの 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 ランタイム環境で実行され、プロセス間通信(IPC)を介してアプリと通信するように作成された SDK。
  • ランタイム対応 SDK(RA SDK): ランタイム対応ではない SDK。アプリに静的にリンクされ、既存の SDK コードと、ランタイム対応 SDK を呼び出すための新しいコードが含まれている場合があります。
  • アプリ内 SDK: アプリに静的にリンクして実行され、SDK ランタイムを認識しない SDK。これは、SDK ランタイムに移行していない広告ネットワークか、パブリッシャーのカスタム アダプタである可能性があります。
  • メディエーター: 他の広告ネットワーク SDK とやり取りすることで、デバイス上でメディエーション サービスを提供する広告メディエーション SDK。
  • メディエーション対象: メディエーターによって呼び出され、広告を提供してレンダリングする広告ネットワーク SDK。
  • メディエーション アダプタ: さまざまなメディエーション SDK と相互運用するために API インターフェースの変換を行うメディエーション SDK で使用される SDK。通常はメディエーターによって提供されます。これらは、ランタイムを認識している場合と認識していない場合があります。

一般的なメディエーション フロー

SDK ランタイムでメディエーションのユースケースをサポートする必要がある場合は、いくつかの変更を実装する必要があります。このセクションでは、メディエーション フローの重要な要素を確認し、メディエーターとメディエーション対象に必要な変更について説明します。

ここで説明するフローは、複数の広告ネットワーク SDK を使用したデバイス上のメディエーションを簡略化したもので、メディエーション ジャーニーを SDK ランタイムと互換性のあるものにするために必要な変更について議論するための基礎となります。

メディエーション フローの実装にはさまざまなバリエーションがあるため、ここでは次の 2 つのメインフローに焦点を当てます。

  • 初期化(広告ネットワークの検出と通信を含む)
  • 広告のユーザー インターフェース(UI)の表示

初期化

以下は、標準の初期化、広告ネットワークの検出、通信フローを表しています。

  1. クライアント アプリがメディエーターを開始する
  2. メディエータが関連するメディエイトとアダプタを検出して初期化する
  3. メディエータはアダプタを使用して各メディエイトと通信します。
  4. クライアント アプリがメディエータに広告の読み込みをリクエストする
  5. クライアント アプリがメディエーターにこの広告の表示をリクエストする

広告 UI のプレゼンテーション

前のステップの最終リクエストの後に広告をレンダリングする際のフローは、広告のタイプによって異なります。

バナー広告 全画面広告 ネイティブ広告
メディエーター SDK は、落札したメディエーターの広告ビューをラップする広告ビューを作成します。

また、この View にリスナーを設定したり、広告を自動更新したり(同じまたは別の mediatee を使用)することもあります。
メディエーター SDK はメディエティーに全画面広告をリクエストし、メディエティーは Activity を開始します。 パブリッシャーは、メディエーション SDK から返されたコンポーネントを使用して、ビューの処理と拡張を管理します。

SDK ランタイムでのメディエーション フロー

SDK ランタイム内のメディエーションの仕組みは、メディエーション対象がランタイム対応かどうかによって異なります。これに基づいて、次のシナリオが考えられます。

  • メディエータとメディエイトの両方が SDK ランタイム内にある: RE メディエイト
  • メディエータは SDK ランタイムにあり、メディエートはアプリ内にある: アプリ内メディエート

RE Mediatee

次のアーキテクチャ図は、メディエータのランタイム対応(RE)SDK とランタイム認識(RA)SDK、RE メディエーション アダプタ、メディエートの RE SDK のインタラクションの概要を示しています。

メディエーション アダプタは、インターフェースするメディエーションと同じプロセスに存在する必要があるため、SDK ランタイムに移行する必要があります。

メディエーターのランタイム対応(RE)SDK とランタイム認識(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 mediatee を初期化するフロー。

広告 UI のプレゼンテーション

次のセクションでは、RE メディエーションからバナー広告と全画面広告を読み込む方法について説明します。

RE Mediatee バナー広告

アプリからバナー広告の読み込みリクエストが送信された場合、レンダリングを完了するフローは次のようになります。

  1. メディエーターがこの広告の落札メディエーターを選択します。
  2. メディエータはメディエイトから SandboxedUiAdapter を取得します。
  3. メディエータは UiAdapter をアプリに転送します。
RE-RE メディエーションでバナー広告のレンダリングを完了するフロー。
図 3. RE メディエーターからバナー広告のレンダリングを完了するフロー。

SandboxedUiAdapter と SDK ランタイム UI ライブラリの使用方法について学習します。

オーバーレイからバナー広告へ

メディエーターが広告にオーバーレイを追加する場合は、次のようにフローを変更する必要があります。

  1. メディエータは、オーバーレイと SandboxedSdkView を含むレイアウトを作成します。
  2. メディエーターがこの広告の落札メディエーターを選択します。
  3. メディエータはメディエイトから SandboxedUiAdapter を取得します。
  4. メディエータは、メディエータの UiAdapterSandboxedSdkView に設定します。
  5. メディエータは、入力されたビューをアプリと共有します。
RE Mediatee から取得したバナー広告の上にビューをオーバーレイするフロー。
RE Mediatee から取得したバナー広告の上にビューをオーバーレイするフロー。
RE Mediatee フルスクリーン広告

アプリから全画面広告の読み込みリクエストが送信された場合、フローは次の手順に沿って処理されます。

  1. アプリ(または RA SDK)は、広告を読み込むリクエストとともに SdkActivityLauncher をメディエーターに渡します。
    1. クライアントは、述語を使用してアクティビティの作成を制限できます。
  2. メディエーターがこの広告の落札メディエーターを選択します。
  3. メディエーターは、アプリから SdkActivityLauncher を渡して、メディエーション パートナーに広告の読み込みをリクエストします。
  4. メディアティはアクティビティ ハンドラを登録し、登録されたアクティビティの識別子トークンを取得します。
  5. メディアティは SdkActivityLauncher を使用して、このトークンを使用したアクティビティの開始をリクエストします。
  6. クライアント アプリの述語で許可されている場合、SDK ランタイムはこのアクティビティを専用プロセスで開始します。
RE Mediatee からメディエーションされたフルスクリーン アプリを表示するフロー。
図 4. RE Mediatee からメディエーションされた全画面広告を読み込む方法を示すフロー図。

SDK ランタイムでの全画面広告のアクティビティ サポートの詳細

アプリ内 Mediatee

次のアーキテクチャ図は、メディエータの RE SDK と RA SDK、SDK ランタイムを認識しないメディエーション アダプタ、アプリに静的にリンクされた(ランタイムを認識しない)メディエーティの SDK のインタラクションの概要を示しています。

メディエーターの RE SDK と 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(MediationSandboxedSdk#registerInAppMediate)が提供する API を使用して、アプリ内メディエーション SDK を検出して登録します。

メディエーターの RE SDK は、アプリ内メディエーター SDK をすべて登録するだけでなく、SdkSandboxController#getSandboxedSdks を使用して SDK ランタイムに読み込まれたすべての SDK を検出できます。

アプリ内メディエーターを初期化するために説明したフローを示すシーケンス。
図 6. なお、提案されたメディエーターの API を使用して、アプリ内メディエーターへの参照を登録します。

広告 UI のプレゼンテーション

次のセクションでは、アプリ内メディエーションからバナー広告と全画面広告を読み込む方法について説明します。

アプリ内メディエーション バナー広告

アプリからバナー広告の読み込みリクエストが送信された場合、レンダリングを完了するフローは次のようになります。

  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 の上にビューをオーバーレイしてはなりません。
アプリ内メディエーションの全画面広告

アプリから全画面広告の読み込みリクエストが送信された場合、フローは次の手順に沿って処理されます。

  1. アプリは、広告を読み込むリクエストとともに SdkActivityLauncher をメディエーターの RA SDK に渡します。
    1. クライアントは、述語を使用してアクティビティの作成を制限できます。
  2. メディエーターの RA SDK が、アプリのリクエストを RE SDK に転送します。
  3. メディエーターの RE SDK:
    1. 該当する被調停者を選択します。
    2. アプリ内メディエーション対象への参照を取得します。
    3. RA SDK を通じて広告を読み込むリクエスト。
  4. RA SDK は、メディエーション パートナーに広告の読み込みをリクエストします。
  5. メディアティはアクティビティを直接開始します。アプリの述語は無視されます。
メディエーション パートナーがアプリ プロセスにある場合の全画面広告の読み込みフロー。
図 8. この述語はアプリ内メディエーターによって無視されます。

意見交換とフィードバックの提供

Android 版プライバシー サンドボックスは進行中のプロジェクトであり、このドキュメントはその現在の設計を反映したものです。皆様からのフィードバックは、機能の開発と強化を続けるうえで不可欠です。バグを報告してフィードバックを送信します。