Topics API for Mobile の概要

フィードバックを送信

Topics API について

モバイル広告では、広告主はユーザーの興味との関連性が高い広告を配信したいと考えます。たとえば、料理関連の情報に興味を持っているユーザーであれば、自分の興味と関係のない広告よりも、料理に関連する広告のほうに関心を示すでしょう。

コンテンツ ターゲット広告は、現在視聴されている(および宣伝されている)コンテンツから派生した興味 / 関心にのみ基づきます。Topics API のメリットの 1 つは、ユーザーにとっては有用なアプリでも、コンテンツ ターゲット広告では収益化が難しいアプリでも、より関連性の高い広告をユーザーに表示することができる点です。これにより、ユーザーが利用するアプリの資金調達につながります。

Topics API は、デバイス上でのユーザーのアプリ使用状況に基づいて、興味に関する大まかなシグナルを推定します。トピックと呼ばれるこれらのシグナルは広告主と共有され、アプリ間で個々のユーザーをトラッキングすることなく、コンテキスト シグナルやその他のファースト パーティ シグナルをサポートします。

Topics API は、通常は複数のアプリで動作するサードパーティの広告 SDK をサポートするように設計されています。このサポートは、それらの SDK が通常観察する、アプリ間の興味 / 関心の一部を表示するという形で行われます。個々のアプリ デベロッパーが、ユーザーに関する追加情報を得ることを期待すべきではありません。

主な概念

  • トピックは、ユーザーの興味を示すもので、人が読める形式になっています。Topics 分類に含まれます。
  • トピックは、呼び出し元(アプリ、またはアプリで使用されているサードパーティ SDK)によって参照されます。呼び出し元が、3 エポックの間に、トピックに関連付けられたアプリから Topics API リクエストを行った場合に参照されます。
  • エポックは、トピックの算出を行う期間です(例: 1 週間)。

仕組み

今回の提案では、Topics API を使用して、ユーザーのアプリ使用状況に基づいた興味に関する大まかな広告トピックを、呼び出し元に提供することを目的としています。これらのトピックを使用すると、広告を表示するアプリに関連するコンテキスト情報を補完でき、組み合わせることでユーザーに適した広告を見つけられます。

インタレスト ベース広告のためのトピック取得機能をセットアップする方法を示すコード例については、Topics API デベロッパー ガイドをご覧ください。注: API はまだ最終版ではありません。

トピックは事前に定義されたオープンソースの分類から選択されます。

プラットフォームは分類器モデルを使用してトピックを推定します。Topics API の実装と分類器の使用方法は Android オープンソース プロジェクトの一部となり、今後改善される予定です。

説明のため、インタレスト ベース広告を取得するためのトピックの使用方法を次のコード例に示します。ここで使用されている API は最終版ではありません。

// Initialize the Topics API.
…
topicsFuture = AdvertisingTopicsClient.getTopics();

// Retrieve Topics and use them in Ad request.
Futures.addCallback(
    topicsFuture,
    new FutureCallback<AdvertisingTopicsInfo>() {
        @Override
        public void onSuccess(@Nullable AdvertisingTopicsInfo topicsInfo) {
            // Sanitize Topics result.
            ...
            // Initialize ad request with Topics obtained.
            AdRequest adRequest = AdRequest.initialize(topicsInfo);
        }

        @Override
        public void onFailure(Throwable t) {
            // Handle error.
            ...
        }
});

分類器モデルの仕組みをより深く理解するために、Android Topics Classifier Colab を使用して、システム内での各種アプリデータに対する反応をテストしてみてください。

Topics API へのアクセス権を取得する

Topics API にアクセスするには、広告テクノロジー プラットフォームの登録が必要です。詳しくは、プライバシー サンドボックス アカウントの登録をご覧ください。

詳細

  • ユーザーの上位 5 つのトピックが、週 1 回などのエポックごとに、デバイス上の情報を使用して計算されます。

    • プラットフォームでは、Topics API が呼び出された際に、API を呼び出しているアプリにトピックが割り当てられているか確認されます。割り当てられているトピックがない場合には、以下のルールに沿って選択が行われます。選択されたトピックが、エポックの残り期間中にアプリに割り当てられます。
      • 95% の確率で、エポック中に算出された上位 5 つのトピックリストから、ランダムにトピックが選択されます。
      • 5% の確率で、分類からランダムにトピックが選択されます。
      • 呼び出し元は、shouldRecordObservation = false パラメータを使用して getTopics を呼び出すことで、状態を変更せずにトピックを取得するよう指定できます。つまり、トピックは返されますが、呼び出しは週ごとのエポック計算に含まれず、呼び出し元に対して確認されたトピックのリストも更新されません。
    • アプリごとに複数のトピックからいずれかを取得する仕組みとなっているのは、アプリが異なればトピックも異なるようにするためです。同じユーザーに関する情報を複数のアプリで関連付けることが難しくなるようにしています。
      • たとえば、アプリ A ではユーザーのトピックとして T1 が示され、アプリ B では T2 が示されます。この場合、情報が同じユーザーに関連するものかどうかを判別するのは、双方のアプリにおいて難しくなります。
  • Topics API では、3 つまでのトピックのリストが返されます。トピックは、過去の 3 つのエポックのそれぞれから 1 つが選ばれます。

    • トピックが 3 つまで提供されると、使用頻度の低いアプリの場合は、関連性の高い広告を見つけるうえで十分なトピック数になります。一方で、使用頻度の高いアプリの場合は、最大で 1 週間に 1 つのトピックを新たに学習します。
    • 返されるトピック情報には、分類のエントリに対応するトピック ID(int)、分類のバージョン、分類器モデルのバージョンが含まれます。
    • 3 エポックの間に、該当するトピックに関連付けられたアプリをユーザーが使用したことが確認された場合にだけ、呼び出し元はトピックを受信できます。
    • 返されるトピックは、すべてユーザーの興味に該当するものであるため、広告リクエストではこれらのいずれか、またはすべてのトピックを広告のパーソナライズに使用できます。
  • トピックが Topics API を呼び出すアプリに割り当てられると、呼び出し元がこのトピックを受け取れるかどうかがプラットフォームで判断されます。

    • 3 エポックの間に、該当するトピックに関連付けられたアプリのユーザー エンゲージメントが確認された場合にだけ、呼び出し元はトピックを受信できます。
    • 呼び出し元がアプリ上のユーザーのトピックについて API を呼び出したことがない場合は、API の返すリストにそのトピックは含まれません。
    • 3 エポックの間に、呼び出し元がトピックを受け取っていない場合、Topics API は空のリストを返します。

    たとえば、ユーザーがデバイスに 7 つのアプリ(A、B、C、D、E、F、G)をインストールしているとします。アプリのトピック分類と、それらのアプリの広告テクノロジー SDK が次のようになっているとします。

    アプリ トピック分類 広告テクノロジー SDK
    A T1、T5 ad-sdk1、ad-sdk2
    B T2 ad-sdk2
    C T3、T6 ad-sdk3、ad-sdk4
    D T1、T4 ad-sdk1
    E T5 ad-sdk4、ad-sdk5
    F T6 ad-sdk2、ad-sdk3、ad-sdk4
    G T7 ad-sdk2
    • 第 1 週の終わりに、Topics API がこのエポックの上位 5 つのトピックを生成します。
    上位のトピック トピックの学習が可能な呼び出し元
    T1 ad-sdk1、ad-sdk2
    T2 ad-sdk2
    T3 ad-sdk3、ad-sdk4
    T4 ad-sdk1
    T5 ad-sdk1、ad-sdk2、ad-sdk4、ad-sdk5
    • 第 2 週にいずれかのアプリの呼び出し元が API を呼び出すと、該当するエポック、トピック、アプリについて、呼び出し元が「トピックの学習が可能な呼び出し元」の列にあるトピックのみを含んだリストが返されます。
    • トピックの算出に際し、各呼び出し元が利用できる履歴ウィンドウは、3 エポック(3 週間)です。
    • 広告 SDK を介して Topics API を呼び出すアプリに関連付けられたトピックのみが使用されます。つまり、アプリに Topics API を呼び出す広告 SDK が含まれていない場合、そのアプリに関連付けられているトピックは、広告 SDK がアクセスできるトピックのプールに含まれません。
    • アプリで新しいマニフェストと XML 要素を介して Topics API のオプトアウトを宣言し、広告 SDK がそのアプリで API を使用できないようにすることもできます。オプトアウトしたアプリに関連付けられたトピックは、週ごとのトピックの算出には影響を及ぼしません。このドキュメントは、関連する実装の詳細を含むように更新される予定です。
  • プラットフォームで 5 つのトピックを推測できるほどアプリが使用されていない場合は、残りのトピックをランダムに生成するなどのオプションが検討される可能性があります。

分類

  • 現在の提案では、最初の分類には数百から数千のトピックが含まれます。このドキュメントの今後の更新で、最初の分類案が共有されます。
  • この分類は、プライベートなトピックが含まれないように、人の手を経てキュレートされます。
  • この分類は、Android のモバイルアプリでの表示が可能な広告のカテゴリに合わせてカスタマイズされます。
  • 分類は一般公開されており、変更される可能性があります。このページの上部にあるフィードバック ボタンを使用して提案を送信できます。

トピック分類器

興味に関するトピックは、一般公開されているアプリ情報(アプリ名、説明、パッケージ名など)でトレーニングされた分類器モデルから得られます。

  • 推論に分類器モデルを使用して所定のエポックのトピックを算出すると、使用されたシグナルのセットがデバイスに残ります。このシグナルのセットには、インストール済みのアプリまたは最近使用されたアプリを含めることができ、後で他のシグナルを含むように拡張される場合があります。
  • 初期モデルは Google がトレーニングします。トレーニング データには、一般公開されているアプリ情報について人の手を経てキュレートしたラベルが含まれます。このモデルは、アプリでのトピック分類のテストを行うために自由に利用することができます。
  • 初期モデルは、Google Play ストアなどの一部のアプリストアで公開されているアプリの情報を使用してトレーニングされます。
  • アプリが複数のトピックにマッピングされる、トピックにマッピングされない、またはユーザーのトピック履歴に追加されない可能性があります。分類の際にアプリが複数のトピックにマッピングされる場合、アプリに対して選択されるトピックの数が上位 3 つに制限されます。

ユーザー コントロール

  • 今回の設計では、アプリの使用状況に関連するトピックをユーザーが表示、削除できるようにしています。このユーザー コントロール機能の実装は現在進行中であり、今後のアップデートに反映される予定です。
  • 3 エポックの間に推定されたトピックの選択に関係するアプリを、ユーザーがアンインストールする場合、3 エポックの間に返されたトピックのリストからトピックが削除されることはありません。これは、アンインストールに関する情報が開示されることを避けるためです。

エンドユーザー エクスペリエンスがどのようになるかをテストするには、アプリ内インテントを起動して、エンドユーザーが目にする外観に近いトピックの設定 UI を表示します。以下に、この呼び出しの例を示します。

//Button that launches settings UI
private Button mSettingsAppButton;
private static final String RB_SETTING_APP_INTENT = "android.adservices.ui.SETTINGS";


//Does setup for button on screen that will launch settings UI to observe Topics
private void registerLaunchSettingsAppButton() {
    mSettingsAppButton.setOnClickListener(
        new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Context context = getApplicationContext();
                Intent activity2Intent = new Intent(RB_SETTING_APP_INTENT);
                activity2Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(activity2Intent);
            }
        });
}

広告テクノロジー プラットフォームを登録する

Topics API にアクセスするには、すべての広告テクノロジー プラットフォーム(Google を含む)で登録プロセスを完了する必要があります。

アプリ デベロッパーは、アプリ マニフェスト内に広告テクノロジー デベロッパーの登録 ID を含めることで、Topics API にアクセスできる広告テクノロジー デベロッパーを管理できます。

返されたトピックの暗号化

Topics API を呼び出す登録済みの広告テクノロジー プラットフォームでは、返されたトピックを呼び出し元のみが読み取れるように、暗号鍵を指定する必要があります。

プライバシー サンドボックスは、広告テクノロジーが提供するエンドポイントからこれらのキーを取得します。ベスト プラクティスとして、少なくとも 6 か月に 1 回ではなく、頻繁に鍵を更新することをおすすめします。

プライバシー サンドボックスは、登録プロセス中に、広告テクノロジーから提供されたエンドポイントの可用性を確認するよう広告テクノロジーに求めます。現在のアドテックと新たに登録されたアドテックで必要な操作の詳細については、登録デベロッパー ガイドをご覧ください。

暗号化の詳細

暗号化の導入により、「GetTopics()」の呼び出しにより、「EncryptedTopic」オブジェクトのリストを含むレスポンスが生成されるようになります。これらの結果を復号すると、以前の Topic オブジェクトと同じ JSON 形式のオブジェクトが作成されます。

Topics API は、HPKE(ハイブリッド公開鍵暗号化)のワンショット実装をサポートしています。登録済みの呼び出し元は、登録時に指定された公開暗号化 URL エンドポイントで 32 ビットの公開鍵をホストする必要があります。これらの鍵は Base64 でエンコードされます。

EncryptedTopic オブジェクトには 3 つのフィールドがあります。返されたトピックのリストは、公開鍵に対応する秘密鍵を使用して取得できます。

開発目的の場合は、登録チェックを無効にして Topics API の暗号化をテストできます。これにより、API はテスト用の公開鍵を使用してレスポンスを暗号化します。対応する秘密鍵を使用して、暗号化されたトピックを復号できます。