![見出し画像](https://assets.st-note.com/production/uploads/images/84909174/rectangle_large_type_2_d2631ec05f51e5e9c78ebc52e5a8f3e2.png?width=1200)
プライバシーサンドボックスの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](https://assets.st-note.com/production/uploads/images/84805073/picture_pc_dc020197e6df564f71f972a92ad3f0b8.png?width=1200)
アトリビューションソースイベントの送信
広告のクリックやビュースルーはメディアで行います。
![スクリーンショット 2022-08-10 15.42.46](https://assets.st-note.com/production/uploads/images/84424235/picture_pc_91a610c5cbaad0141e7a3b4c87470e1c.png?width=1200)
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](https://assets.st-note.com/production/uploads/images/84424239/picture_pc_2834e0f36e4778981e89e23144219512.png?width=1200)
デモページでは各種アトリビューションのトリガー(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&product-category=category_1&prio-checkout=false&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&product-category=category_1&prio-checkout=false&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の仕様説明