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

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

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

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

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。
  • Mediatee: メディエーターから呼び出され、広告の提供とレンダリングを行う広告ネットワーク SDK。
  • メディエーション アダプタ: メディエーター SDK が使用する SDK。さまざまなメディエート SDK と相互運用するための API インターフェース変換を提供します。通常はメディエーターが提供します。これらは、ランタイム対応またはランタイム非対応にできます。

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

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

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

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

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

初期化

以下は、標準の初期化、広告ネットワークの検出、通信フローを示すものです。

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

広告 UI の表示

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

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

また、このビューにリスナーを設定したり、広告を自動更新したり(同じメディエイトまたは別のメディエイトを使用)することもできます。
メディエーター SDK がメディエイト先から全画面広告をリクエストし、メディエイト先がアクティビティを開始します。 パブリッシャーは、メディエーター 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 メディエイト対象を初期化するフロー。

広告 UI の表示

次のセクションでは、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 から取得したバナー広告にビューをオーバーレイするフロー。
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 が提供する API MediationSandboxedSdk#registerInAppMediate を使用して、アプリ内メディエイト SDK を検出して登録します。

すべてのアプリ内メディエイト SDK が登録されていることに加え、メディエーターの RE SDK は SdkSandboxController#getSandboxedSdks を使用して SDK ランタイムに読み込まれたすべての SDK を検出できます。

アプリ内メディエイト パートナーを初期化するためのフローを示したシーケンス。
**図 6.** なお、推奨されるメディエーター API を使用して、アプリ内メディエイトへの参照を登録します。

広告 UI の表示

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

アプリ内メディエイト バナー広告

バナー広告の読み込みをアプリからリクエストした場合、レンダリングを完了するフローは次のとおりです。

  1. メディエーターのランタイム対応 SDK は、アプリのリクエストをランタイム対応 SDK に転送します。
  2. メディエーターの RE SDK が、関連するメディエイト先を選択します。
  3. メディエーターの RE SDK はメディエイト先への参照を取得し、RA SDK を介して広告の読み込みをリクエストします。
  4. RA SDK は、アプリ内メディエイトからビューを取得します。
  5. RA SDK は、受け取ったビューの SandboxedUiAdapter を作成します。
  6. RA SDK は UiAdapter を RE SDK に転送します。
  7. RE SDK は UiAdapter をアプリに転送します。
アプリ内メディエイトからバナー広告のレンダリングを完了するフロー
**図 7.** なお、メディエーターは、アプリ内メディエイトから V1 を取得する際に、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 版プライバシー サンドボックスは継続的なプロジェクトであり、このドキュメントは現在の設計を反映しています。皆様からのフィードバックは、機能の開発と改善に活用させていただきます。フィードバックを送信するには、バグを報告してください。