見出し画像

プライバシーサンドボックスのAttribution Reporting API

はじめまして。エンジニアの平尾です。


プライバシーサンドボックスとは

プライバシーサンドボックスとは、Googleが提案するサードパーティ Cookie やその他の追跡の仕組みを使用せずにクロスサイトに関わるユースケースを満たすための一連の提案のことです。まだ、実用化はされてません。

Attribution Reporting API

Attribution Reporting APIはプライバシーサンドボックスの提案の一つです。
現在、多くの広告の計測にサードパーティーCookieが使われてます。ただ、サードパーティーCookieはユーザーのプライバシーを妨げる可能性があるため、ほとんどのブラウザでサードパーティーCookieの利用の制限がされています。
Attribution Reporting APIはサードパーティーCookieを使用することなく、広告の計測が可能になっているみたいです。

イベントレベルレポートと集計レポート

Attribution Reporting APIにはイベントレベルレポート集計レポートがあります。イベントレベルレポートは個々の広告のクリックや表示を成果と関連付けます。集計レポートはイベントレベルレポートより詳しいデータを取得できます。例えば購入額やカートの内容などです。ただし個々のイベントごとの確認はできないので、合算値でのレポートとなります。
今回はイベントレベルレポートについて実際に説明していきます。

Googleでデモページを用意しているようなので実際にさわってみましょう。

デモをつかってテストする際には、最新のChrome Beta 版を使う必要があるので準備しましょう。

デモにはメディア(Publisher site)、広告主(Advertiser site)、計測をアドテクサーバーが用意されてます。
また、chrome://attribution-internals/ で後述のアトリビューションソースやトリガーイベントレベルレポートの確認が可能です。

スクリーンショット 2022-08-16 1.29.11

アトリビューションソースイベントの送信

広告のクリックやビュースルーはメディアで行います。

スクリーンショット 2022-08-10 15.42.46

Attribution Reporting APIはクリックとビュースルーに対応しており、デモのメディアページにはそれぞれのリンクや画像(アトリビューションソースイベント)が用意されてます。

アトリビューションソースイベントは2種類あります。
いづれもattributionsrc属性にアトリビューションソースイベントの送信先を指定します。デモではアドテクサーバーが指定されてます。
attributionsrc属性はAttribution Reporting APIの測定のために用意された属性です。

navigation

アンカーリンクによるクリック

<a href="https://arapi-advertiser.web.app"
    src="/blue-shoes.png" alt="blue shoes"
    attributionsrc="https://arapi-adtech.web.app/register-source" target="_blank">Click me</a>

event

<img>や<script>タグ

<img width="180" src="/blue-shoes.png" alt="blue shoes"
   attributionsrc="https://arapi-adtech.web.app/register-source">

アトリビューションソースイベントにはAttribution-Reporting-Eligibleというヘッダーフィールドが含まれたリクエストがおくられます。また、下記のようにヘッダーフィールドを手動で設定して送ることも可能です。

const headers = {
 'Attribution-Reporting-Eligible': 'event-source'
};
// Optionally set keepalive to ensure the request outlives the page.
window.fetch("https://arapi-adtech.web.app/register-source",
            { headers, keepalive: true });

また、レスポンスヘッダーにattribution-reporting-register-sourceで下記のjsonでおくります。

{
    "destination":"https://arapi-advertiser.web.app",
     "source_event_id":"860324796298273",
    "expiry":"604800",
    "priority":"1"
}

destination(必須):アトリビューションがトリガーされるサイトのeTLD+1。プロトコル(http or https)もつけます

expiry:有効期限。秒で設定する。デフォルトは30日で、最大値も30日

priority:同様のアトリビューションソースイベントが存在した場合にこの値が大きいものがレポートの生成に使われるpriority:同様のアトリビューションソースイベントが存在した場合にこの値が大きいものがレポートの生成に使われる

※ eTLD+xとはサブドメインがx階層含まれるドメインのこと。
eTLD+1:arapi-advertiser.web.app
eTLD+2:hoge.arapi-advertiser.web.app

このレスポンスがブラウザに受信されると、アトリビューションソースイベントがブラウザのストレージに保存されます。

次に広告主ページに遷移してみます。

アトリビューションのトリガー

成果発生時のテストは広告主サイトで行います。

スクリーンショット 2022-08-10 15.42.59

デモページでは各種アトリビューションのトリガー(Visit product page: shoesやAdd product to cartなど)が用意されてます。attribution-reporting-register-sourceのヘッダーで設定したdestinationと同じeTLD+1のサイトでないとトリガーしないので注意しましょう(https://arapi-advertiser.web.appではなく、https://hoge-advertiser.web.appなどはダメ)。imgタグかjsでアトリビューションをトリガーします。

img

<img class="pixel" height="12" width="12"
    attributionsrc="https://arapi-adtech.web.app/conversion?conversion-type=visit-product-page&amp;product-category=category_1&amp;prio-checkout=false&amp;dedup=false">

js

const headers = {
 'Attribution-Reporting-Eligible': 'trigger'
};
// Optionally set keepalive to ensure the request outlives the page.
window.fetch("https://arapi-adtech.web.app/conversion?conversion-type=visit-product-page&amp;product-category=category_1&amp;prio-checkout=false&amp;dedup=false",
            { headers, keepalive: true });

トリガーに関しても、アトリビューションソースイベントと同様にレスポンスヘッダーでjsonを返します。ヘッダーフィールドはAttribution-Reporting-Register-Triggerで下記のjsonをおくります。

{
    "event_trigger_data":[{
        "trigger_data":"3",
        "priority": "1",
        "deduplication_key": "346066127110453"
     }]
}

triger_data:イベントを識別するための整数

priority:同じアトリビューションソースイベントで他のトリガーが存在する場合、priorityが高い方のトリガーを成果とする

deduplication_key:アトリビューションソースイベントとdeduplication_keyの組み合わせが同じ場合には重複排除がされる

このレスポンスをブラウザが受け取ると、レポートデータのスケジューリングを行います(リアルタイムでレポーティングはされません)。

レポートデータの送信

下記のようなリクエストでレポートデータが送信されます。

https://arapi-adtech.web.app/.well-known/attribution-reporting/report-event-attribution
{
  "attribution_destination": "https://arapi-advertiser.web.app",
  "randomized_trigger_rate": 0.0024,
  "report_id": "7b5a3a38-951a-47fe-a875-eaf908708cd6",
  "source_event_id": "346066127110455",
  "source_type": "navigation",
  "trigger_data": "4",
}

attribution_destination:トリガーされたサイトのTLD+1

randomized_trigger_rate:データのノイズの割合※。0から1で設定

report_id:本データのID

source_event_id:アトリビューションイベントソースで設定したsource_event_id

source_type:アトリビューションソースイベントの種類(navigation or event)

trigger_data:アトリビューションがトリガーされた際に設定したtrigger_data

※ Attribution Reporting APIではプライバシー保護のため、低確率で実際のレポートとは異なるランダムなレポートが送られます。randomized_trigger_rateはそのランダムなレポートが送られる確率を示します。

このデータを元にアトリビューションイベントソースとトリガーを照合して計測が可能となります。

まだ実用化は未定ですが、サードパーティーCookieに代わるプライバシーにも考慮した計測方法となるのかどうか今後が楽しみです。

参考リンク

Google Chromeのアトリビューションレポート紹介
Demo: Attribution Reporting API
Attribution Reporting with event-level reportsの仕様説明




いいなと思ったら応援しよう!