जब विज्ञापन टेक्नोलॉजी, मेज़रमेंट एपीआई (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
विज्ञापन टेक्नोलॉजी कंपनियों को पोस्ट कॉल के ज़रिए, 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) चाहिए होगा.
Aggrigation Service के GitHub रिपॉज़िटरी में, JavaScript का सैंपल कोड उपलब्ध है.
एग्रीगेट की जा सकने वाली रिपोर्ट के लिए, 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 फ़ॉर्मैट में बदल दिया जाएगा. आउटपुट डोमेन में, पहले से एलान की गई ऐसी कुंजियां शामिल होंगी जिन्हें एग्रीगेट की जा सकने वाली रिपोर्ट से इकट्ठा किया जाएगा और खास जानकारी वाली रिपोर्ट में लिखा जाएगा. एट्रिब्यूशन रिपोर्टिंग में मौजूद कुंजियों और निजी एग्रीगेशन में मौजूद कुंजियों के बारे में ज़्यादा जानें. आउटपुट डोमेन में फ़ील्ड बकेट होगी और बकेट वैल्यू आपकी बकेट कुंजी होगी.
डोमेन फ़ाइल को भी 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 हो जाएगा. इसके बाद, आपको आउटपुट डोमेन AVRO में जोड़ने के लिए, 559 को बाइट स्ट्रिंग में बदलना होगा

बैच रिपोर्ट
निजता बजट और एक साथ कई रिपोर्ट भेजने के बारे में ज़्यादा जानने के लिए, एक साथ कई रिपोर्ट भेजने की रणनीतियां दस्तावेज़ पर जाएं. साथ ही, ध्यान रखें कि एग्रीगेट की जा सकने वाली रिपोर्ट को सिर्फ़ तय समयसीमा के अंदर ही एक साथ भेजा जा सकता है. scheduled_report_time
और बैच के चलने की तारीख (फ़िलहाल 90 दिन) के बीच, रिपोर्ट की उम्र MAX_REPORT_AGE से ज़्यादा नहीं होनी चाहिए.
खास जानकारी वाली रिपोर्ट
बैच करने के बाद, एग्रीगेशन सेवा खास जानकारी वाली रिपोर्ट को 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_domain
AVRO फ़ाइल में उपलब्ध है