Lorsque les technologies publicitaires déclenchent des API de mesure (API Attribution Reporting ou API Private Aggregation), les rapports chiffrés sont envoyés depuis le navigateur Chrome / le côté client vers le point de terminaison de reporting de la technologie publicitaire, qui est une URL .well-known avec l'origine du reporting de la technologie publicitaire. Le point de terminaison de reporting est hébergé par la technologie publicitaire pour collecter les rapports chiffrés.
Voici les points de terminaison par API :
Private Aggregation
- Déboguer
[reporting-origin]/.well-known/private-aggregation/debug/report-shared-storage [reporting-origin]/.well-known/private-aggregation/report-shared-storageou/.well-known/private-aggregation/report-protected-audience
- Déboguer
Rapports sur l'attribution
- Déboguer
[reporting-origin]/.well-known/attribution-reporting/debug/report-aggregate-attribution - Affluence à
[reporting-origin]/.well-known/attribution-reporting/report-aggregate-attribution
- Déboguer
Les ad techs recevront les rapports au format JSON via un appel POST. Les ad techs collectent ces rapports JSON et les convertissent ensuite au format AVRO utilisé dans le service d'agrégation. Une fois convertis, les rapports AVRO sont stockés dans l'espace de stockage cloud de l'ad tech pour être regroupés ultérieurement.
Une fois la technologie publicitaire prête pour le traitement par lot, elle déclenche une demande de tâche d'agrégation via le service d'agrégation, où les rapports sont récupérés à partir du stockage cloud de la technologie publicitaire. Le service d'agrégation est hébergé sur le stockage cloud de l'ad tech et doit disposer d'une image autorisée.
Les rapports reçus ressemblent à ce qui suit :
API Private Aggregation
{
"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\"}"
}
API Attribution Reporting
{
"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"
}
Convertir des rapports JSON au format AVRO
Lorsque vous regroupez des rapports, ceux qui peuvent être agrégés doivent être au format AVRO. Pour créer un rapport AVRO, vous aurez besoin du schéma AVRO du rapport (AVSC).
Un exemple de code JavaScript est disponible dans le dépôt GitHub du service d'agrégation.
Vous trouverez ci-dessous le schéma AVRO pour les rapports agrégables. Les différents champs des rapports sont payload, key_id et shared_info.
{
"type": "record",
"name": "AggregatableReport",
"fields": [
{
"name": "payload",
"type": "bytes"
},
{
"name": "key_id",
"type": "string"
},
{
"name": "shared_info",
"type": "string"
}
]
}
| Paramètre | Type | Description |
|---|---|---|
payload |
Octets |
La charge utile devra être décodée en base64 et convertie en tableau d'octets à partir de payload pour les rapports en direct / de production.
|
debug_cleartext_payload |
Octets |
La charge utile devra être décodée en base64 et convertie en tableau d'octets à partir de debug_cleartext_payload pour les rapports de débogage.
|
key_id |
Chaîne | Il s'agit de la chaîne key_id figurant dans le rapport. key_id sera un identifiant unique universel de 128 bits. |
shared_info |
Chaîne | Il s'agit de la chaîne non modifiée qui se trouve dans le champ "shared_info" du rapport. |
Voici un exemple de fichier JSON de rapport :
{
"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 du domaine de sortie
Pour générer des rapports récapitulatifs à l'aide du service d'agrégation, la technologie publicitaire a besoin des rapports agrégables et du fichier de domaine. Les rapports agrégables seront les rapports JSON reçus dans l'origine des rapports et convertis au format AVRO. Les domaines de sortie contiendront les clés prédéclarées qui seront collectées à partir de vos rapports agrégables et écrites dans les rapports récapitulatifs. En savoir plus sur les clés dans Attribution Reporting et les clés dans Private Aggregation Le domaine de sortie contiendra le bucket de champ et la valeur du bucket sera votre clé de bucket.
Le fichier de domaine devra également être au format AVRO et utiliser le schéma suivant :
{
"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."
}
]
}
Clé du bucket
La clé du bucket doit être une chaîne d'octets hexadécimaux. Par exemple, une clé de 1369 en décimal. Lorsqu'il est converti en hexadécimal, il devient 559. Vous devrez ensuite convertir 559 en bytestring pour l'ajouter au domaine de sortie AVRO.
Rapports par lot
Pour en savoir plus sur les budgets de confidentialité et le regroupement, consultez la documentation sur les stratégies de regroupement. N'oubliez pas non plus qu'un rapport agrégable ne peut être regroupé que pendant une certaine période. Un rapport ne doit pas dépasser MAX_REPORT_AGE entre le scheduled_report_time et la date d'exécution du lot (actuellement 90 jours).
Rapports récapitulatifs
Après le regroupement, le service d'agrégation crée le rapport récapitulatif au format AVRO. Le rapport récapitulatif utilise le schéma results.avsc.
Le rapport récapitulatif se trouve dans output_data_blob_prefix, dans le bucket output_data_bucket_name indiqué dans la requête createJob.
Pour les lots du service d'agrégation pour lesquels debug_run est activé, deux rapports sont créés. le rapport récapitulatif et le rapport récapitulatif de débogage. Le rapport récapitulatif de débogage se trouve dans le dossier output_data_blob_prefix/debug.
Le rapport de débogage généré utilise le schéma debug_results.avsc.
Les rapports récapitulatifs et de débogage seront nommés [output_data_blob_prefix]-1-of-1.avro. Si votre output_data_blob_prefix est summary/summary.avro, le rapport se trouvera dans le dossier "summary" (récapitulatif) et portera le nom 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"]
}
}
]
}
Une fois converti, votre rapport récapitulatif ressemblera à l'exemple results.json. Lorsque debug_run est activé, le rapport récapitulatif de débogage renvoie un résultat semblable à l'exemple debug_results.json.
results.json (exemple)
Les rapports AVRO provenant du service d'agrégation peuvent se ressembler. Ils contiennent la clé du bucket et la valeur récapitulative / agrégée avec le bruit ajouté aux valeurs du bucket.
{
"bucket": "\u0005Y",
"metric": 26308
}
debug_results.json (exemple)
Les rapports AVRO de débogage provenant du service d'agrégation doivent ressembler à ce qui suit, où vous recevez vos clés de bucket, unnoised_metric (résumé des clés de bucket sans bruit) et le bruit ajouté à unnoised_metric.
{
"bucket": "\u0005Y",
"unnoised_metric": 128,
"noise": -17948,
"annotations": [
"in_reports",
"in_domain"
]
}
Les annotations contiendront également in_reports et / ou in_domain, ce qui signifie :
in_reports: la clé de bucket est disponible dans les rapports agrégables.in_domain: la clé du bucket est disponible dans le fichier AVROoutput_domain.