WebKitのPrivate Click Measurementの翻訳をして概要を掴む
https://webkit.org/blog/11529/introducing-private-click-measurement-pcm/ を雑にDeepLで翻訳して読み込んで行く(所々自分で訳したものに変えています)
Introducing Private Click Measurement, PCM
このブログ記事では、Webサイトをまたいで、iOSアプリからWebサイトへの広告クリックを測定するためのPCM(Private Click Measurement)と呼ばれる新機能を取り上げています。これはiOSとiPadOS 14.5ベータ版の一部です。
Motivation and Goals
ウェブ上の古典的な広告表示は、ユーザーまたはデバイス ID を含む Cookie で行われます。このような属性はクロスサイトトラッキングを構成するものであり、WebKit はこれを防止することを約束しています。Web サイトは、大規模なトラッキングの一部として、広告クリックやコンバージョンのデータを単一のユーザーに帰属させることができないようにすべきです。
同時に、オンライン広告の計測もサポートしたいと考えています。PCMは、クッキーを使用しない専用のプライベートブラウジングモードで、限られたデータでアトリビューションレポートを送信したり、レポートを24時間から48時間の間にランダムに遅延させてイベントを時間内に切り離したり、オンデバイスでデータを処理したりすることで、このトレードオフを実現しています。
The Feature in a Nutshell
- iOSおよびiPadOS 14.5ベータ版では、Webサイト全体およびiOSアプリからWebサイトへの広告クリックのプライバシーを保護した測定を行うための、PCM(Private Click Measurement)と呼ばれるオンバイデフォルトの新機能が搭載されています。
クリックソース側の8ビットの識別子で、1つのウェブサイトまたはアプリにつき256の並列広告キャンペーンを測定できます。 - コンバージョン側の4ビットの識別子により、16種類のコンバージョンイベントを識別することができます。
- アンリンク可能なトークンによる不正防止ができます。
A Proposed Standard
私たちは2019年5月に、広告クリックのプライバシー保護のための測定を最初に提案しました。それ以来、提案はPrivate Click Measurementに名称を変更し、W3Cプライバシーコミュニティグループでは、ミーティングとGitHubの両方で広範囲に議論されています。
提案がウェブ標準になるためには、2つの独立した実装が必要です。つまり、Firefox、Brave、Chrome、Edgeなどの他のブラウザは、標準化の道をさらに進む前に、PCMを独自に実装する必要があります。私たちは、それらのブラウザと協力して、標準化に向けて努力しています。
とはいえ、私たちは、広告を測定するために提案されたウェブ標準を可能にする最初のブラウザになれることを嬉しく思っています。
On By Default
第二の独立した実装があり、W3CプライバシーCGで議論されている不正防止メカニズムを追加する前に、なぜPCMをデフォルトで有効にしているのかと質問されるかもしれません。理由は以下の通りです。
- 早期アクセス。広告主、ウェブサイト、アプリが技術を採用し、実際のデータを分析し、測定値を調整し、問題があれば当社に報告できるよう、早期アクセスの必要性を認識しています。
- 平等なアクセス。私たちは、誰もが最初からこの技術をテストして使用する機会を提供したいと考えています。選択されたパートナーとだけ実行するという選択肢もありますが、私たちはオープンなアプローチを選択しました。
- アトリビューションデータは安定しています。不正防止トークンが追加されたり、データラベルの名称が変更されたりする可能性はあるが、機能や属性データは安定しており、クリックソース側が8ビット、属性オン側が4ビットとなっている。このように、PCMの本格的なテストは、現時点では意味があり、有用なものとなっている。
Web-to-Web Click Measurement
PCM web-to-webは、提案された標準規格の対象となるケースです。すなわち、ユーザーがウェブページ上のリンクをクリックし、クロスサイトに移動し、最大7日後には、ユーザーをここに連れてきた以前のクリックに対して帰属を求めるというシグナルが目的地のウェブサイト上に表示されます。
以下の例では、クリックは social.example
というウェブサイト上で行われ、クリックはユーザーを shop.example
に移動させると仮定しています。
The Click Side
クリック計測データを保存したいリンクは、このようになっているはずです。
<!-- Link on social.example -->
<a href="https://shop.example/product.html"
attributionsourceid="[8-bit source ID]"
attributeon="https://shop.example">
Markup
</a>
必須属性は2つ。
-
attributionsourceid
: 8 ビットのアトリビューションソース ID で、0~255 の間で指定できる。これは以前は広告キャンペーンID(ad campaign ID)と呼ばれていましたが、PCMは技術的に広告とは結びついていないため、その属性とキー名には広告用語を使用しないことが標準化の議論で決定されました。 -
attributeon
: 着信したナビゲーションをクリックに属性付けしたいクリック先のウェブサイト。PCM は登録可能なドメインまたは eTLD+1 のみを使用することに注意してください。これは、ユーザーのJane Doe
を追跡するためにhttps://janeDoeTracking.shop.example
と設定することができないようにするためです。
クリックが実際にアトリビュートオンのウェブサイトにユーザーをナビゲートした場合、social.example
から shop.example
への7日間のクリックとして attributesourceid
が格納されます。
このデータはウェブサイトにアクセスできないことに注意してください。ブラウザに暗黙的に保存されます。
The Triggering Event
クリックアトリビューションをトリガーするには、「アトリビューション・オン」のウェブサイトは、クリックスルー広告を実行しているウェブサイトへのHTTP GETリクエストを行わなければなりません。この方法は、既存の "トラッキングピクセル "をサポートし、採用を容易にすることを目的としています。この例では、shop.example
サイトが social.example
にHTTP GETリクエストを行います。アトリビューションをトリガーするより現代的な方法については、将来の機能強化のセクションを参照してください。
social.example
へのHTTP GETリクエストは、https://social.example/.well-known/private-click-measurement/trigger-attribution/[4-bit trigger data]/[optional 6-bit priority]
にリダイレクトされた場合にアトリビューションをトリガーします。
URLパスのパラメータは2つです。
- Trigger data: これは、トリガーイベントをコード化する 00 から 15 までの 4 ビットの値です(必須の 2 桁であることに注意)。これは以前、コンバージョン値と呼ばれていましたが、PCMは技術的に広告とは結びついていないので、広告用語は使用していません。
- Optional priority: これは00から63までの6ビットの値で、複数のトリガーイベントが、最高の優先度を持つイベントの単一のアトリビューションレポートになるようにします(繰り返しますが、2桁の数字に注意してください)。例えば、セールスファネル内には複数のステップがあり、各ステップが帰属をトリガーしますが、ファネルのさらに下のステップの方が優先度が高い場合があります。この値は、どのトリガーデータがアトリビューションレポートに入るかを制御するだけで、アトリビューションレポート自体の一部ではありません。なぜこれがトリガーデータのような4ビットの値ではないのかと質問されるかもしれません。その理由は、いくつかのトリガーデータと優先度のペアをリマップすることなく、測定されているものを簡単に変更できるようにするためです。イベント00-15をトリガーすると、最初は優先度00-15にマッピングされているかもしれませんが、ショップのオーナーはイベント5-7にドリルアップしたいと思っています。余分なビットを使用すると、トリガーイベント 05-07 を優先度 20-22 に割り当てることが簡単になり、属性レポートをそれらに集中させることができます。
トリガーイベントが保存されたクリックと一致すると、単一の帰属レポートが 24 時間後から 48 時間後、またはそれ以降のブラウザが実行されている最も早い時間の間にランダムに送信されるようにブラウザによってスケジュールされます。帰属レポートがまだ送信されていない限り、優先度の高いトリガーイベントに基づいて再スケジュールすることができます。
The Attribution Report
PCMアトリビューションレポートは、HTTP POST リクエストとして、クリックが発生したウェブサイト上の /.known/private-click-measurement/report-attribution/
に送信されます(この例では https://social.example/.well-known/private-click-measurement/report-attribution/
)。
レポートはJSONで以下のような形です。
{
"source_engagement_type" : "click",
"source_site" : "social.example",
"source_id" : [8-bit source ID],
"attributed_on_site" : "shop.example",
"attribution_trigger_data" : [4-bit trigger data],
"version": 1
}
上記の明らかになっていないキーバリューについての注意点
-
source_engagement_type
は常にclick
です。このフィールドは、将来的にビュースルーなどの他のタイプのアトリビューションのためにこのレポートメカニズムを使用することを可能にします。 -
version
は、これが帰属機能のどのバージョンであるかを受信側に通知します。不正防止トークンが追加されたり、メカニズムの他の何かが変更されたりしたときに、この数は増えることを期待してください。これにより、並行して動作するバージョンを並行して動作させることができ、開発者側で変更や採用が必要なことがあるかもしれないというシグナルを開発者に提供することができます。
App-to-Web Click Measurement
iOSとiPadOSアプリからの広告クリックを測定する機能をSafariに追加しました。
アプリ内の広告主の多くは、ユーザーを自社のウェブサイトに誘導し、そこで商品を購入したり、サービスに申し込んだりしたいと考えています。PCM app-to-webでは、まさにこのような広告を測定することができます。
The Click Side
PCMのWeb-to-Webと違うのは、iOSアプリの中にあるクリック側だけです。この技術を採用するには、これを行う必要があります。
- アプリで広告がクリックされたときに、PCM の広告属性レポートを送信する場所に URL を追加します。これは、
Info.plist
のキーNSAdvertisingAttributionReportEndpoint
の下で行います。このエンドポイントの名前は、意図的に PCM に関連付けられていません。アプリに関連付けられた将来の潜在的な広告測定レポートは、適切であれば、異なるよく知られた場所でこの URL を使用するかもしれません。アトリビューションをトリガーするための後続の HTTP リダイレクトは、このウェブサイトに行く必要があることに注意してください。 - 新しい
UIEventAttribution
を作成し、openURL:
への呼び出しのオプションに追加します。UIEventAttribution
に入力する必要があるフィールドについては、以下を参照してください。 - 新しい
UIEventAttributionView
を使って、ウェブサイトへのナビゲーションのトリガーとなるクリックスルー広告の部分をオーバーレイします。このビューは、ユーザーのジェスチャーがナビゲーションの前に発生したかどうかをチェックするためのAppleのオンデバイスコードのチェックポイントとしてのみ機能します。ビューはジェスチャーを消費しないので、ジェスチャーがこれらのビューのいずれかで起こったとしても、ウェブサイトにナビゲートするかどうかは自由に決めることができます。UIEventAttribution
オブジェクトがopenURL:
への呼び出しの一部としてブラウザに転送されるためには、ユーザー ジェスチャーが必要です。PCM app-to-web は、これまでのところ Safari と iOS と iPadOS でのみサポートされています。今後は WebKit API を追加して、他のデフォルトブラウザも PCM app-to-web の転送先にできるようにしたいと考えています。
UIEventAttribution
これは、クリック数を測定したい場合にopenURL:への呼び出しで提出するオプションのデータ構造です。
open class UIEventAttribution : NSObject, NSCopying {
open var sourceIdentifier: UInt8 { get }
open var destinationURL: URL { get }
open var reportEndpoint: String? { get }
open var sourceDescription: String { get }
open var purchaser: String { get }
public init(sourceIdentifier: UInt8,
destinationURL: URL,
sourceDescription: String,
purchaser: String)
}
-
sourceIdentifier
は、リンクに対する PCM の attributionsourceid 属性と同じです。許容される値は 0-255 です。 -
destinationURL
は、リンクに対する PCM の attributeon 属性と同じですが、プロトコルを持つ完全な URL である必要があります。レポートはURLの登録可能なドメイン(eTLD+1)とHTTPSで送信されます。 -
reportEndpoint
は Apple のコードによって info.plist のNSAdvertisingAttributionReportEndpoint
から拾われます。ご覧のように、init関数はこのパラメータを取りません。これは、PCMがその後の広告属性レポートを送信する場所です。静的なInfo.plistに記述する必要がある理由は、janeDoeTracking.example
のようなユーザー固有のレポートURLを動的に送信することで、トラッキングベクターとして使用できないようにするためです。 - sourceDescription は、タップされたコンテンツの人間が読める説明です。この文字列はおよそ100文字以内で、文脈に応じてローカライズすることができます。この文字列は、Appleや配信先のウェブサイトには表示されません。代わりに、保存されている広告クリックデータをユーザーに示すことができるようにすることを目的としています。
-
purchaser
は、タップされたコンテンツの購入者の人間が読める名前または説明で、通常は広告の購入者です。この文字列はおよそ100文字以内で、文脈に応じてローカライズすることができます。この文字列は、Appleや配信先のウェブサイトには表示されません。代わりに、保存されている広告クリックデータをユーザーに示すことができるようにすることを目的としています。
UIEventAttribution
Sample Code
func openAdLink() {
let adURL = URL(string: "https://shop.example/tabletStandDeluxe.html")!
let eventAttribution =
UIEventAttribution(sourceIdentifier: 4,
destinationURL: adURL,
sourceDescription: "Banner ad for Tablet Stand Deluxe.",
purchaser: "Shop Example, Inc.")
// If using scene lifecycle.
let sceneOpenURLOptions = UIScene.OpenExternalURLOptions()
sceneOpenURLOptions.eventAttribution = eventAttribution
self.view.window?.windowScene?.open(adURL,
options: sceneOpenURLOptions,
completionHandler: nil)
// If using application lifecycle.
let appOpenURLOptions: [UIApplication.OpenExternalURLOptionsKey : Any] = [
.eventAttribution: eventAttribution
]
UIApplication.shared.open(adURL,
options: appOpenURLOptions,
completionHandler: nil)
}
UIEventAttributionView
UIEventAttributionView
は、タップ可能なコンテンツ(通常は広告)の上に配置されるビューです。これは、ユーザーのジェスチャーが発生したことを確認するためにシステムによって使用されます。
open class UIEventAttributionView : UIView {
}
ビューは目に見えず、非常に軽量です。最もシンプルな使用例は、これらのビューを作成して、タップ可能なコンテンツ全体に適用することです。例えば、特定のタップ可能な領域を作成したい場合は、1つのコンテンツの上に複数のビューを配置することもできます。
UIEventAttributionView
が正しく動作することを確認するために:
-
isUserInteractionEnabled
がfalse
であることを確認します。これはこのビューのデフォルト値で、ビューがイベントを消費しないようにします。 - イベント帰属ビューの上にビューが配置されていないことを確認します。PCM app-to-web の目的のためにユーザージェスチャーとしてカウントするには、ユーザーがこのビューをタップする必要があります。
- タップ処理がタッチアップ イベントで発生するようにします。これは、UITapGestureRecognizer の発射に反応してコンテンツがタップされた場合、または
UILongPressGestureRecognizer
の .end 状態でコンテンツがタップされた場合に自動的に発生します。
UIEventAttributionView
Sample Code
func addEventAttributionView() {
// Create an event attribution view.
let eventAttributionView = UIEventAttributionView()
// Place it over your ad however you'd like.
eventAttributionView.translatesAutoresizingMaskIntoConstraints = false
adView.addSubview(eventAttributionView)
NSLayoutConstraint.activate([
adView.topAnchor.constraint(equalTo: eventAttributionView.topAnchor),
adView.leadingAnchor.constraint(equalTo: eventAttributionView.leadingAnchor),
adView.trailingAnchor.constraint(equalTo: eventAttributionView.trailingAnchor),
adView.bottomAnchor.constraint(equalTo: eventAttributionView.bottomAnchor)
])
}
Testing and Debugging
WebKit には Private Click Measurement Debug Mode という実験的な機能があります。このモードは、macOSでは「開発(Develop)」→「実験的機能(Experimental Features)」、iOSおよびiPadOSでは「設定(Settings)」→「Safari」→「高度な機能(Advanced)」→「実験的機能(Experimental Features)」にあります。このモードを有効にして Safari を再起動すると、レポートはトリガーイベントが発生してから 24~48 時間後ではなく、わずか 10 秒後に出力されます。これにより、テストとデバッグを迅速に行うことができます。
デバッグモードでは、Web Inspectorのコンソールにデバッグ出力も可能になります。この出力は、後のベータ版ではデフォルトで表示されるようになります。
テストが終わったら、デバッグモードを無効にすることを忘れないでください。
Future Enhancements
提案された、あるいは確立されたウェブ標準では、常にそうであるように、機能強化の要望やコーナーケースがあり、プラットフォームの進歩に合わせて仕様を進化させる必要があります。以下に、今後のリリースでPCMの実装を変更する可能性のある、顕著で関連性の高い問題のリストを示します。ご意見をお持ちの方は、GitHubにご参加ください。
- リンク不可能なトークンによる不正防止、GitHub issue #27。2020年5月にW3CプライバシーCGに解決案が提示されました。これは、伝統的にblinded signaturesと呼ばれるものを使用する予定です(私たちはこれを アンリンカブル・トークン と呼んでいます)。その意図は、署名されたイベントへのリンクを不可能にする形式で帰属レポートに含まれるトークンを暗号化して署名することをウェブサイトに提供することです。これらのトークンは、レポートの受信者にどのイベントかを伝えることなく、関係するイベント(リンククリックとアトリビューショントリガー)を信頼していることを証明する役割を果たします。
- レガシーなトラッキングピクセルの代わりにイベントをトリガーする最新の JavaScript API、GitHub issue #31。ここでの意図は、リダイレクトされたトラッキングピクセルの代わりに JavaScript の呼び出しをトリガーイベントとして機能させることです。これにより、サードパーティへのリクエストを一括して行う必要がなくなります。
- 広告主へのアトリビューションレポートもGitHub issue #53 アトリビューションレポートはクリックソースと広告主サイトの両方に送信したいと表明しています。しかし、これがきっかけで、指定されたサードパーティにレポートを送信することについての会話が生まれました。GitHub issue #57
- 入れ子になったiframeでのPCMリンクをサポートする、GitHub issue #7。クロスサイトのiframeで配信されるクリックスルー広告の計測についてです。その後のアトリビューションレポートはファーストパーティのクリックソースサイトに送られるので、そのファーストパーティが自分に代わって要求されたクリック計測をどのようにコントロールすべきかは明確ではありません。この会話の一部は、サードパーティによる広告の配信だけでなく、そのようなサードパーティへのレポートもカバーしています。このようなスキームのプライバシーリスクについては、GitHub Issue #57で探っています。
Misuse or Use Together With Tracking May Lead To Blocking
PCMは、Webサイト間、またはアプリからWebサイトへのクリック数のプライバシーを保護した測定をサポートすることを目的としています。これらのコンテキストでのユーザー、イベント、デバイスの追跡には使用されません。
PCMがトラッキング目的で不正に使用されていたり、ユーザー、イベント、デバイスをトラッキングするための無関係な手段と組み合わせて使用されている場合、当社は、違反者がPCMおよび将来の測定機能を使用することをブロックすることがあります。
FAQ
Q: PCMのweb-to-appはどうでしょうか?
A: 興味はあるが、まだ解決策がない。
Q:ビュースルー広告のアトリビューションはどうですか?
A: これには興味がありますが、プライバシーを保護するソリューションはまだありません。
Q: クリックしたユーザーがデバイスのブラウザに移動しなければならない理由はありますか?
A: はい。保存されたクリックは7日間有効です。ユーザーがクリックした直後にアトリビューションをトリガーしないが、最初にそれについて考えたい場合を想定してみましょう。数時間後、または数日後に再接続する場合、ユーザーはブラウザにアクセスして、元のタブを検索したり、保存したブックマークを使ったり、検索プロバイダーを使って適切なウェブページを探したり、URLバーにウェブサイトのアドレスを直接入力したりすることが多いでしょう。保存されたクリックデータを、ユーザーがこのような方法で再エンゲージしたときにすぐに利用できるようにするためには、最初のクリックでユーザーをブラウザに誘導する必要があります。つまり、ユーザーのブラウザは、遅延クリックスルーの帰属が発生する可能性が最も高い場所なのです。
Q: PCMアプリからウェブへの使用には、AppTrackingTransparencyに従ってトラッキングの許可をアプリに与える必要がありますか?
A: いいえ。
Q: ユーザーは保存されたクリックをどのように削除するのですか?
A: 蓄積されたクリックは、ウェブサイトのデータを削除すると削除されます。
Q: ユーザーはPCMをオプトアウトできますか?
A: はい。プライバシー保護のための広告測定のための新しいSafariプライバシー設定があります。ユーザーがオプトアウトした場合、クリックメタデータは保存されず、アトリビューションレポートも送信されません。
Q: プライベートブラウジングモードでPCMは有効ですか?
A: いいえ。
Q: ソースWebサイトまたはソースアプリごとの並行広告キャンペーンの最大数は?
A: 256個ですが、実際の値は0~255の間です。
Q: 区別できるトリガーイベントの最大数は何個ですか?
A: 16個、実際の値は0~15個です。
Q: クリックしてからトリガーイベントが発生するまでの最大時間は何日ですか?
A: 7日間です。
Q: PCM app-to-webをWebViewsで使用できますか?
A: アプリがWebViewsをコントロールしすぎて、PCMのような機能ではデータを保護することができません。
Q: SFSafariViewController で PCM app-to-web を使用できますか?
A: これには興味がありますが、まだ解決策はありません。
Q: iOSやiPadOSの他のデフォルトブラウザでもPCM app-to-webに参加できますか?
A: 後日、そのようなAPIを追加したいと考えています。ご興味のある方はお知らせください。
Q: どこにフィードバックをすることができますか?
A: ウェブ上の問題や帰属報告メカニズムに関する問題は、WebKit: https://bugs.webkit.org まで直接ご連絡ください。UIKit API や Info.plist の統合に関する問題については、Feedback Assistant を使ってください: https://developer.apple.com/bug-reporting
attributeon
という属性が attribution
のtypoっぽく見えてたけど attribute on
を連結した文字なのね。
ざっくりweb側だけ要約すると
- web -> web、もしくは app -> web で開いたページに対して従来は Cookie を使ってコンバージョンを計測していたが、これはプライバシー的によくない
- 新しくPCM(Private Click Measurement)という方法を提案してる(Safariで試せるよ!)
- どこからどこに行ったかみたいな情報と広告を識別するための識別子をブラウザにため込んでおいて
-
/.well-known/private-click-measurement/trigger-attribution/[4-bit trigger data]/[optional 6-bit priority]
にきたら、24~48時間後にブラウザがスケジューリングしてCVを送るよ - CVを送る先は
/.known/private-click-measurement/report-attribution/
にPOSTでJSONが届くよ
そのためのwebとios側の実装の例を載せておくで
って感じかな???