जब विज्ञापन टेक्नोलॉजी, मेज़रमेंट एपीआई (Attribution Reporting API या Private Aggregation API) को ट्रिगर करती हैं, तब एन्क्रिप्ट की गई रिपोर्ट, Chrome ब्राउज़र / क्लाइंट साइड से विज्ञापन टेक्नोलॉजी के रिपोर्टिंग एंडपॉइंट को भेजी जाती हैं. यह विज्ञापन टेक्नोलॉजी के रिपोर्टिंग ऑरिजिन वाला .well-known यूआरएल होता है. रिपोर्टिंग एंडपॉइंट को विज्ञापन से जुड़ी टेक्नोलॉजी होस्ट करती है, ताकि एन्क्रिप्ट (सुरक्षित) की गई रिपोर्ट इकट्ठा की जा सकें.
हर एपीआई के लिए एंडपॉइंट यहां दिए गए हैं:
Private Aggregation
- डीबग करें
[reporting-origin]/.well-known/private-aggregation/debug/report-shared-storage - लाइव
[reporting-origin]/.well-known/private-aggregation/report-shared-storageया/.well-known/private-aggregation/report-protected-audience
- डीबग करें
Attribution Reporting
- डीबग करें
[reporting-origin]/.well-known/attribution-reporting/debug/report-aggregate-attribution - मौजूदा स्थिति,
[reporting-origin]/.well-known/attribution-reporting/report-aggregate-attribution
- डीबग करें
विज्ञापन टेक्नोलॉजी से जुड़ी कंपनियों को, POST कॉल के ज़रिए JSON फ़ॉर्मैट में रिपोर्ट मिलेंगी. विज्ञापन से जुड़ी टेक्नोलॉजी कंपनियां, इन JSON रिपोर्ट को इकट्ठा करेंगी. इसके बाद, उन्हें AVRO फ़ॉर्मैट में बदलेंगी. इस फ़ॉर्मैट का इस्तेमाल, एग्रीगेशन सेवा में किया जाता है. कन्वर्ट होने के बाद, AVRO रिपोर्ट को विज्ञापन टेक्नोलॉजी कंपनी के क्लाउड स्टोरेज में सेव किया जाता है, ताकि बाद में उन्हें बैच किया जा सके.
जब विज्ञापन टेक्नोलॉजी, बैचिंग के लिए तैयार हो जाती है, तब विज्ञापन टेक्नोलॉजी, एग्रीगेशन सेवा के ज़रिए एग्रीगेशन जॉब का अनुरोध ट्रिगर करेगी. इसमें रिपोर्ट, विज्ञापन टेक्नोलॉजी के क्लाउड स्टोरेज से वापस पाई जाती हैं. Aggregation Service, विज्ञापन टेक्नोलॉजी कंपनी के क्लाउड स्टोरेज पर होस्ट की जाती है. साथ ही, इसमें अनुमति वाली इमेज होनी चाहिए.
हमें इस तरह की रिपोर्ट मिली हैं:
Private Aggregation API
{
"aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
"aggregation_service_payloads": [ {
"key_id": "1a2baa3f-5d48-46cf-91f0-772633c12640",
"payload": "8Cjr1s3FVkCYkjzBvyzJn14yardVjd5N4vLCA69LQAPbIkJ0B58hAqUGBCNXpvTjW9ZpIoZbCSiUOsUDuoA/S+tqVolLMkame6sWC07cfUmZcVsbU+La3pzTMtCgdtNc8MIWgD3C63CMw7rWroRlechewVUajvAYVK/0HJq0YyGrTiFZZm36zi0jjyHLAXKV8p1Lvy1d0o/wnBxC5oVo5BV6LPkxqQEcoYS2GyixUuht6wD0RzuH+BxxuH6vY/ynp2xDrnwftjvqwDUAxUWLFTunthM6BXZVxlrvOBim1h2dvPqWSyKZ5gafo+MgW9EM4SraavNM3XzZSCjdtAfSMJMrynSu2j0opyAq+9e1jq1xeYN00yZrJ0Y/GTI45IGjgCnVmvmuoI9ucW2SnXP31CQBwHqk4gtUgMsYGFSUYfhtnAQ/8TSbaXyS2LX+cQW87LqkvIraWw6o37O24VFBreFoFFXpu3IUeCZfji+Sr4/ykfZuHeMzQbBavyNnHKzPZlbLSXMiucx4/vWzYyOzHeIlbtupXVvbi40V2PieDShaSbjI266kGgFkeCk6z51AaAGebDPtRT1lhBpcoQ6JdF0Yp5VWSnyFARKFtCZ1aEBrlUlrEHLUQY/pFtmDxJQiicRz1YPjR8jRr3C7hlRhWwov0dMocqnMz5209hHGVZWSsaGc9kWjtxREW2ULXfoIwOGbX+WZsyFW2RhXksQPJ5fhyNc4ROkAzUthLb68gC5e0yZHvmLIAU4hcWe0UanJv+jRljn8PAPaJHKFUxQNJyBA7mTbn5mkpycxGrX6T3ZYdPHqvckqt9llJZWjr8NneizzZFRuJk423BDs38fXkvcTAsAckd2Zu0u2KC45WR93sN2/CWrqB7/QU9BsgNdonl/ehAWhU1LbcRRvBTcR9+0wL7vRL7cv5LG3+gRYRKsWI6U2nDSWp0cNpo9+HU0JNiifa5X0cguihqU2bSk6ABozgRtCZ7m+7eqWXMLSzBdmc1CPUoQppo6Wmf6ujdNqI6v2S6pDH781lph8Z2v7ZpxGdhVVPEL51cVn"
} ],
"debug_key": "1234",
"shared_info": "{\"api\":\"shared-storage\",\"report_id\":\"05e3b948-cb8d-4404-be29-bfeac7ad9710\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707784729\",\"version\":\"0.1\"}"
}
Attribution Reporting API
{
"aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
"aggregation_service_payloads": [ {
"key_id": "2dee0f3f-2aee-4a4a-8238-9154ed3d6f72",
"payload": "pHvTHhcxvNKaCmnLpvYQsXlJpiNRuFO5Zj1QqUlqgWPOfuoHLfiXiFjmpvY8a53/OYnS4bKwHwJReFcofldsu8E9BzTTJ3CEk+B7vbEjnDPaljhpIBMTuQXy3QHGK4slWR/yNZVm2uXRWR/DVVzXziBoTDjN7qaPstRoLKUUMdfY2u8oq4tnLY00Y+NDZttZ4wJvC7hPmvY3lqHjdl14JPD2ytZZ4NViYzno3WKdH/oZc0jhGK4zI38lAM0qpahF/B9yb4zOu7IRIjQpNx73P8naDyddxLldoVlW/qHpO04FguWymscvI/8i6NwUR6Kj8seRlWS0iIUhETt/ai3lilKUHUb+uz0YG2kxjoXq7Ldk+MP56nNl67ZRNi2YZ7bOGI/okYWoT/wt2uWPe/5xAEMmadxl0hQQrG7YXHRSD8rDnaVPXo+AKIxdg727yJeB1ZENZvovl/kIevdRAmdBe2h1U3J6Uz6psly/46fvjgkj5QD+kO2uaYirzvmwS19luJsN/Qvh/R3ZO4qlJIQI0nDJPWwUJ4ODpyVmj4a0xQp3t2ESEnf4EmY7+khn3xpF5+MwEWKES2ZeDf7SHalR99pvZA8G3Fr8M0PWFmT00cmKCBwpQgZyd3Eay70UlqdkbFEedxiCVWKNNOUz41m5KG/7K3aR+dYx57l57Wct4gOFQg3jiUEBJWrFIVCXf12BT5iz5rBQh1N1CUt2oCOhYL/sPuBl6OV5GWHSIj8FUdpoDolqKXWINXfE88MUijE2ghNRpJN25BXIErUQtO9wFQv7zotC6d2BIaF0x8AkKg/7yzBQRySX/FZP3H3lMkpOz9rQMV8DjZ2lz7nV4k6CFo8qhT6cpYJD7GpYl81xJbglNqcJt5Pe5YUHrdBMyAFsTh3yoJvYnhQib/0xVN/a93lbYccxsd0yi375n4Xz0i1HUoe2ps+WlU8XysAUA1agG936eshaY1anTtbJbrcoaH+BNSacKiq4saprgUGl4eDjaR/uBhvUnO52WkmAGon8De3EFMZ/kwpPBNSXi7/MIAMjotsSKBc19bfg"
} ],
"shared_info": "{\"api\":\"attribution-reporting\",\"attribution_destination\":\"https://privacy-sandbox-demos-shop.dev\",\"report_id\":\"5b052748-f5fb-4f14-b291-de03484ed59e\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707786751\",\"source_registration_time\":\"0\",\"version\":\"0.1\"}",
"source_debug_key": "123456789",
"trigger_debug_key": "123456789"
}
JSON फ़ॉर्मैट वाली रिपोर्ट को AVRO फ़ॉर्मैट में बदलना
बैचिंग करते समय, एग्रीगेट की जा सकने वाली रिपोर्ट AVRO फ़ॉर्मैट में होनी चाहिए. AVRO रिपोर्ट बनाने के लिए, आपको रिपोर्ट का AVRO स्कीमा (AVSC) चाहिए होगा.
सैंपल JavaScript कोड, Aggregation Service GitHub रिपॉज़िटरी पर उपलब्ध है.
एग्रीगेट की जा सकने वाली रिपोर्ट के लिए, AVRO स्कीमा यहां दिया गया है. रिपोर्ट के लिए अलग-अलग फ़ील्ड payload, key_id, और shared_info हैं.
{
"type": "record",
"name": "AggregatableReport",
"fields": [
{
"name": "payload",
"type": "bytes"
},
{
"name": "key_id",
"type": "string"
},
{
"name": "shared_info",
"type": "string"
}
]
}
| पैरामीटर | टाइप | ब्यौरा |
|---|---|---|
payload |
बाइट |
लाइव / प्रोडक्शन रिपोर्ट के लिए, पेलोड को base64 से डिकोड करना होगा और payload से बाइट ऐरे में बदलना होगा.
|
debug_cleartext_payload |
बाइट |
डीबग रिपोर्ट के लिए, पेलोड को base64 से डिकोड करना होगा और debug_cleartext_payload से बाइट ऐरे में बदलना होगा.
|
key_id |
स्ट्रिंग | यह रिपोर्ट में मौजूद key_id स्ट्रिंग होगी. key_id, 128 बिट का यूनीवर्सली यूनीक आइडेंटिफ़ायर होगा. |
shared_info |
स्ट्रिंग | यह ऐसी स्ट्रिंग होगी जिसमें कोई बदलाव नहीं किया गया है. यह रिपोर्ट के shared_info फ़ील्ड में मौजूद होती है. |
यह रिपोर्ट के JSON का उदाहरण है:
{
"aggregation_coordinator_identifier": "aws-cloud",
"aggregation_service_payloads": [{
"debug_cleartext_payload": "omRkYXhgaJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAAAAAAFWW1vcGVyYX",
"key_id": "3c6e2850-edf6-4886-eb70-eb3f2a7a7596",
"payload": "oapYz92Mb1yam9YQ2AnK8dduTt2RwFUSApGcKqXnG1q+aGXfJ5DGpSxMj0NxdZgp7Cq"
}],
"debug_key": "1234",
"shared_info":
"{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"b029b922-93e9-4d66-a8c6-8cdeec762aed\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1719251997\",\"version\":\"0.1\"}"
}
आउटपुट डोमेन AVRO
एग्रीगेशन सेवा का इस्तेमाल करके खास जानकारी वाली रिपोर्ट जनरेट करने के लिए, विज्ञापन टेक्नोलॉजी कंपनी को एग्रीगेट की जा सकने वाली रिपोर्ट और डोमेन फ़ाइल की ज़रूरत होती है. एग्रीगेट की जा सकने वाली रिपोर्ट, JSON फ़ॉर्मैट में होंगी. ये रिपोर्ट, रिपोर्टिंग ऑरिजिन को मिलेंगी और इन्हें AVRO फ़ॉर्मैट में बदला जाएगा. आउटपुट डोमेन में, पहले से तय की गई कुंजियां शामिल होंगी. इन्हें आपकी एग्रीगेट की जा सकने वाली रिपोर्ट से इकट्ठा किया जाएगा और खास जानकारी वाली रिपोर्ट में लिखा जाएगा. Attribution Reporting में मौजूद कुंजियों और Private Aggregation में मौजूद कुंजियों के बारे में ज़्यादा जानें. आउटपुट डोमेन में फ़ील्ड बकेट शामिल होगा और बकेट की वैल्यू आपकी बकेट कुंजी होगी.
डोमेन फ़ाइल भी AVRO फ़ॉर्मैट में होनी चाहिए. इसके लिए, इस स्कीमा का इस्तेमाल करें:
{
"type": "record",
"name": "AggregationBucket",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "A single bucket that appears in the aggregation service output. 128-bit integer encoded as a 16-byte big-endian bytestring."
}
]
}
बकेट की
बकेट की कुंजी, बकेट की कुंजी की हेक्स बाइटस्ट्रिंग होनी चाहिए. इसके लिए, डेसिमल में 1369 की कुंजी का होना ज़रूरी है. इसे हेक्स में बदलने पर, यह 559 होगा. इसके बाद, आपको 559 को बाइटस्ट्रिंग में बदलना होगा, ताकि इसे आउटपुट डोमेन AVRO में जोड़ा जा सके
बैच रिपोर्ट
प्राइवसी बजट और बैचिंग के बारे में ज़्यादा जानने के लिए, बैचिंग की रणनीतियां वाला दस्तावेज़ पढ़ें. यह भी ध्यान रखें कि एग्रीगेट की जा सकने वाली रिपोर्ट को सिर्फ़ एक तय समयसीमा के अंदर बैच किया जा सकता है. किसी रिपोर्ट की उम्र, scheduled_report_time और बैच रन की तारीख के बीच MAX_REPORT_AGE से ज़्यादा नहीं होनी चाहिए. फ़िलहाल, यह 90 दिन है.
खास जानकारी वाली रिपोर्ट
बैच बनाने के बाद, एग्रीगेशन सेवा, खास जानकारी वाली रिपोर्ट को AVRO फ़ॉर्मैट में बनाती है. खास जानकारी वाली रिपोर्ट में, results.avsc स्कीमा का इस्तेमाल किया जाता है.
खास जानकारी वाली रिपोर्ट, createJob अनुरोध में बताए गए output_data_bucket_name बकेट के output_data_blob_prefix में मौजूद होगी.
जिन एग्रीगेशन सेवा बैच के लिए debug_run चालू है उनके लिए, यह दो रिपोर्ट बनाता है. खास जानकारी वाली रिपोर्ट और डीबग की खास जानकारी वाली रिपोर्ट. डीबग की खास जानकारी वाली रिपोर्ट, output_data_blob_prefix/debug फ़ोल्डर में मौजूद होगी.
जनरेट की गई डीबग रिपोर्ट में, debug_results.avsc स्कीमा का इस्तेमाल किया जाता है.
खास जानकारी और डीबग रिपोर्ट, दोनों का नाम [output_data_blob_prefix]-1-of-1.avro होगा. अगर आपका output_data_blob_prefix summary/summary.avro है, तो रिपोर्ट, summary-1-of-1.avro नाम वाले खास जानकारी फ़ोल्डर में होगी.
results.avsc
{
"type": "record",
"name": "AggregatedFact",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "Histogram bucket used in aggregation. 128-bit integer encoded as a 16-byte big-endian bytestring. Leading 0-bits will be left out."
},
{
"name": "metric",
"type": "long",
"doc": "Metric associated with the bucket"
}
]
}
debug_results.avsc
{
"type": "record",
"name": "DebugAggregatedFact",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "Histogram bucket used in aggregation. 128-bit integer encoded as a 16-byte big-endian bytestring. Leading 0-bits will be left out."
},
{
"name": "unnoised_metric",
"type": "long",
"doc": "Unnoised metric associated with the bucket."
},
{
"name": "noise",
"type": "long",
"doc": "The noise applied to the metric in the regular result."
}
{
"name":"annotations",
"type": {
"type": "array",
"items": {
"type":"enum",
"name":"bucket_tags",
"symbols":["in_domain","in_reports"]
}
}
]
}
बदलने के बाद, आपकी खास जानकारी वाली रिपोर्ट, उदाहरण results.json की तरह दिखेगी. debug_run चालू होने पर, डीबग की खास जानकारी वाली रिपोर्ट में, उदाहरण debug_results.json के जैसा कुछ दिखता है.
results.json (उदाहरण)
एग्रीगेशन सेवा से मिलने वाली AVRO रिपोर्ट एक जैसी दिख सकती हैं. इनमें बकेट की और बकेट की वैल्यू में जोड़ा गया नॉइज़ के साथ खास जानकारी / एग्रीगेट वैल्यू होती है.
{
"bucket": "\u0005Y",
"metric": 26308
}
debug_results.json (उदाहरण)
एग्रीगेशन सेवा से आने वाली AVRO रिपोर्ट को डीबग करने पर, आपको कुछ इस तरह की जानकारी दिखेगी. इसमें आपको बकेट की, unnoised_metric (नॉइज़ के बिना बकेट की की खास जानकारी), और unnoised_metric में जोड़ी गई नॉइज़ की जानकारी मिलेगी.
{
"bucket": "\u0005Y",
"unnoised_metric": 128,
"noise": -17948,
"annotations": [
"in_reports",
"in_domain"
]
}
एनोटेशन में in_reports और / या in_domain भी शामिल होंगे. इनका मतलब यह है:
in_reports: बकेट कुंजी, एग्रीगेट की जा सकने वाली रिपोर्ट में उपलब्ध हैin_domain: बकेट की,output_domainAVRO फ़ाइल में उपलब्ध है