Ce document est un guide de démarrage rapide pour l'utilisation du stockage partagé et de l'agrégation privée. Vous devez comprendre les deux API, car le stockage partagé stocke les valeurs et Private Aggregation crée les rapports agrégables.
Audience cible:fournisseurs de technologies publicitaires et de solutions de mesure.
Essayer la version de démonstration
Essayez la démonstration en direct. Suivez les étapes des instructions de la démonstration pour activer les API Privacy Sandbox. L'ouverture des outils pour les développeurs Chrome vous permet de visualiser les résultats de différents cas d'utilisation. Cas d'utilisation disponibles dans la démonstration:
- Agrégation privée
- Mesure de la couverture unique
- Mesure des données démographiques
- Mesure de fréquence K+
- Utilisation générale
- Mesurer les événements de survol au-dessus dans des cadres cloisonnés
- Navigation de premier niveau
- Contrôle où les tiers peuvent écrire
Afficher le stockage partagé
Pour afficher les informations stockées dans le stockage partagé, utilisez les outils pour les développeurs Chrome. Les données stockées se trouvent dans Application -> Shared Storage
.
Afficher les rapports sur l'agrégation privée
Pour afficher les rapports agrégables envoyés, accédez à chrome://private-aggregation-internals
. Lorsque le mode débogage est activé, un rapport est envoyé immédiatement (sans délai) à [[YOUR_ORIGIN]]/.well-known/private-aggregation/debug/report-shared-storage
, avec le rapport en différé à envoyer à [[YOUR_ORIGIN]]/.well-known/private-aggregation/report-shared-storage
.
Pour activer le débogage, suivez les instructions de la section Débogage.
API Shared Storage
Pour empêcher le suivi intersites, les navigateurs ont commencé à partitionner toutes les formes de stockage, y compris le stockage local, les cookies, etc. Toutefois, dans certains cas, un stockage non partitionné est nécessaire. L'API Shared Storage fournit un accès en écriture illimité sur différents sites de premier niveau, avec un accès en lecture protégeant la confidentialité.
Le stockage partagé est limité à l'origine du contexte (l'appelant de sharedStorage
).
Shared Storage présente une limite de capacité par origine, chaque entrée étant limitée à un nombre maximal de caractères. Si la limite est atteinte, aucune autre entrée n'est stockée. Les limites de stockage de données sont décrites dans la présentation du stockage partagé.
Appeler le stockage partagé
Les technologies publicitaires peuvent écrire sur du stockage partagé à l'aide de JavaScript ou d'en-têtes de réponse. La lecture à partir d'un stockage partagé ne s'effectue que dans un environnement JavaScript isolé appelé "Worklet".
Utiliser JavaScript Les technologies publicitaires peuvent exécuter des fonctions spécifiques de stockage partagé, telles que la définition, l'ajout et la suppression de valeurs en dehors d'un worklet JavaScript. Toutefois, les fonctions telles que la lecture de stockage partagé et l'exécution de l'agrégation privée doivent être effectuées via un worklet JavaScript. Les méthodes utilisables en dehors d'un worklet JavaScript sont disponibles dans la section Proposition de la surface d'API - À l'extérieur du worklet.
Les méthodes utilisées dans le worklet lors d'une opération sont disponibles dans Proposed API Surface - In the worklet (Surface d'API proposée : dans le worklet).
Utiliser des en-têtes de réponse
Comme pour JavaScript, seules des fonctions spécifiques, telles que la définition, l'ajout et la suppression de valeurs dans le stockage partagé, peuvent être effectuées à l'aide d'en-têtes de réponse. Pour utiliser le stockage partagé dans un en-tête de réponse,
Shared-Storage-Writable: ?1
doit être inclus dans l'en-tête de requête.Pour lancer une requête à partir du client, exécutez le code suivant, en fonction de la méthode choisie:
Utiliser
fetch()
fetch("https://a.example/path/for/updates", {sharedStorageWritable: true});
Utiliser une balise
iframe
ouimg
<iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>
Utiliser un attribut IDL avec une balise
iframe
ouimg
let iframe = document.getElementById("my-iframe"); iframe.sharedStorageWritable = true; iframe.src = "https://a.example/path/for/updates";
Pour en savoir plus, consultez la page Stockage partagé: en-têtes de réponse.
Écrire des données dans un stockage partagé
Pour écrire dans le stockage partagé, appelez sharedStorage.set()
à l'intérieur ou à l'extérieur d'un worklet JavaScript. Si elles sont appelées en dehors du worklet, les données sont écrites dans l'origine du contexte de navigation à partir duquel l'appel a été effectué. Si elles sont appelées depuis le worklet, les données sont écrites dans l'origine du contexte de navigation qui a chargé le worklet. Les clés définies ont une date d'expiration de 30 jours à compter de la dernière mise à jour.
Le champ ignoreIfPresent
est facultatif. Si elle est présente et définie sur true
, la clé n'est pas mise à jour si elle existe déjà. L'expiration de la clé est renouvelée pour une durée de 30 jours à compter de l'appel set()
, même si la clé n'est pas mise à jour.
Si vous accédez plusieurs fois au stockage partagé lors du même chargement de page avec la même clé, la valeur de la clé est écrasée. Il est recommandé d'utiliser sharedStorage.append()
si la clé doit conserver la valeur précédente.
En utilisant JavaScript
En dehors du worklet:
window.sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true }); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: true }); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: false }); // Shared Storage: {'myKey': 'myValue2'}
De même, dans le worklet:
sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
Utiliser des en-têtes de réponse
Vous pouvez également écrire sur du stockage partagé à l'aide d'en-têtes de réponse. Pour ce faire, utilisez
Shared-Storage-Write
dans l'en-tête de réponse ainsi que les commandes suivantes:Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present
Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0
Plusieurs éléments peuvent être séparés par une virgule et combiner
set
,append
,delete
etclear
.Shared-Storage-Write : set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
Ajouter une valeur
Vous pouvez ajouter une valeur à une clé existante à l'aide de la méthode "append". Si la clé n'existe pas, l'appel de append()
crée la clé et définit la valeur. Pour ce faire, vous pouvez utiliser du code JavaScript ou des en-têtes de réponse.
En utilisant JavaScript
Pour mettre à jour les valeurs de clés existantes, utilisez
sharedStorage.append()
à l'intérieur ou à l'extérieur du worklet.window.sharedStorage.append('myKey', 'myValue1'); // Shared Storage: {'myKey': 'myValue1'} window.sharedStorage.append('myKey', 'myValue2'); // Shared Storage: {'myKey': 'myValue1myValue2'} window.sharedStorage.append('anotherKey', 'hello'); // Shared Storage: {'myKey': 'myValue1myValue2', 'anotherKey': 'hello'}
Pour ajouter des éléments à l'intérieur du worklet:
sharedStorage.append('myKey', 'myValue1');
Utiliser des en-têtes de réponse
Comme pour définir une valeur dans le stockage partagé, vous pouvez utiliser
Shared-Storage-Write
dans l'en-tête de réponse pour transmettre la paire clé/valeur.Shared-Storage-Write : append;key="myKey";value="myValue2"
Lire des données depuis un stockage partagé
Vous ne pouvez lire des données depuis le stockage partagé qu'à partir d'un worklet.
await sharedStorage.get('mykey');
L'origine du contexte de navigation à partir duquel le module de worklet a été chargé détermine dont le stockage partagé est lu.
Suppression du stockage partagé
Vous pouvez effectuer des suppressions de stockage partagé à l'aide de JavaScript à l'intérieur ou à l'extérieur du worklet, ou à l'aide d'en-têtes de réponse avec delete()
.
Pour supprimer toutes les clés à la fois, utilisez clear()
à partir de l'une ou l'autre de ces méthodes.
En utilisant JavaScript
Pour supprimer du stockage partagé depuis l'extérieur du worklet:
window.sharedStorage.delete('myKey');
Pour supprimer du stockage partagé à partir du worklet:
sharedStorage.delete('myKey');
Pour supprimer toutes les clés en même temps en dehors du worklet:
window.sharedStorage.clear();
Pour supprimer toutes les clés en même temps à partir du worklet:
sharedStorage.clear();
Utiliser des en-têtes de réponse
Pour supprimer des valeurs à l'aide d'en-têtes de réponse, vous pouvez également utiliser
Shared-Storage-Write
dans l'en-tête de réponse pour transmettre la clé à supprimer.delete;key="myKey"
Pour supprimer toutes les clés à l'aide d'en-têtes de réponse:
clear;
Changement de contexte
Les données de stockage partagé sont écrites dans l'origine (par exemple, https://example.adtech.com) du contexte de navigation d'où provient l'appel.
Lorsque vous chargez le code tiers à l'aide d'une balise <script>
, le code est exécuté dans le contexte de navigation de l'outil d'intégration. Par conséquent, lorsque le code tiers appelle sharedStorage.set()
, les données sont écrites dans le stockage partagé de l'élément intégré. Lorsque vous chargez le code tiers dans un iFrame, celui-ci reçoit un nouveau contexte de navigation dont l'origine est celle de l'iFrame. Par conséquent, l'appel sharedStorage.set()
effectué à partir de l'iFrame stocke les données dans le stockage partagé de l'origine de l'iFrame.
Contexte propriétaire
Si une page propriétaire intègre du code JavaScript tiers qui appelle sharedStorage.set()
ou sharedStorage.delete()
, la paire clé-valeur est stockée dans le contexte propriétaire.
Contexte tiers
La paire clé-valeur peut être stockée dans le contexte de la technologie publicitaire ou d'un tiers en créant un iFrame, puis en appelant set()
ou delete()
dans le code JavaScript à partir de l'iFrame.
API Private Aggregation
Pour mesurer les données agrégables stockées dans Shared Storage, vous pouvez utiliser l'API Private Aggregation.
Pour créer un rapport, appelez contributeToHistogram()
dans un worklet avec un bucket et une valeur. Le bucket est représenté par un entier non signé de 128 bits qui doit être transmis à la fonction en tant que BigInt
. La valeur doit être un entier positif.
Pour protéger la confidentialité, la charge utile du rapport, qui contient le bucket et la valeur, est chiffrée en transit. Elle ne peut être déchiffrée et agrégée qu'à l'aide du service d'agrégation.
Le navigateur limite également les contributions qu'un site peut apporter à une requête de sortie. Plus précisément, le budget de contribution limite le total de tous les rapports d'un même site pour un navigateur donné dans une période donnée et sur tous les buckets. Si le budget actuel est dépassé, aucun rapport n'est généré.
privateAggregation.contributeToHistogram({
bucket: BigInt(myBucket),
value: parseInt(myBucketValue)
});
Exécuter le stockage partagé et l'agrégation privée
Dans l'iFrame de l'annonce, chargez le module de Worklet en appelant addModule()
.
Pour exécuter la méthode enregistrée dans le fichier de worklet sharedStorageWorklet.js
, appelez sharedStorage.run()
dans le même code JavaScript iFrame d'annonce.
await window.sharedStorage.worklet.addModule('modules/sharedStorageWorklet.js');
await window.sharedStorage.worklet.run('shared-storage-report', {
data: { campaignId: '1234' },
});
Dans le script de worklet, vous devez créer une classe avec une méthode run
asynchrone. register
cette classe à exécuter dans l'iFrame de l'annonce.
Dans sharedStorageWorklet.js
:
class SharedStorageReportOperation {
async run(data) {
// Other code goes here.
bucket = getBucket(...);
value = getValue(...);
privateAggregation.contributeToHistogram({
bucket: bucket,
value: value
});
}
}
register('shared-storage-report',
SharedStorageReportOperation);
Débogage
Pour activer le débogage, appelez la méthode JavaScript enableDebugMode()
dans le même contexte que celui où sont utilisés le stockage partagé et l'agrégation privée. Cette information s'appliquera aux futurs rapports du même contexte.
privateAggregation.enableDebugMode();
Pour associer les rapports aux contextes qui les ont déclenchés, vous pouvez définir une clé de débogage (entier) non signée de 64 bits qui est transmise à l'appel JavaScript. debugKey
est de type BigInt
.
privateAggregation.enableDebugMode({debugKey: 1234});
Déboguer le stockage partagé
Shared Storage renvoie un message d'erreur générique:
Promise is rejected without and explicit error message
Vous pouvez déboguer le stockage partagé en encapsulant les appels avec des blocs try-catch.
try {
privateAggregation.contributeToHistogram({bucket, value});
} catch (e){
console.log(e);
}
Déboguer l'agrégation privée
Les rapports sont envoyés à /.well-known/private-aggregation/report-shared-storage
et /.well-known/private-aggregation/debug/report-shared-storage
.
Les rapports de débogage reçoivent une charge utile semblable au JSON suivant. Cette charge utile définit le champ api
sur "shared-storage".
{
"aggregation_coordinator_identifier": "aws-cloud",
"aggregation_service_payloads": [ {
"debug_cleartext_payload": "omRkYXRhgaJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAEfV32BFWlvcGVyYXRpb25paGlzdG9ncmFt",
"key_id": "9bc4afa7-2934-4779-99ff-999d91b137ec",
"payload": "bqOFO/cHCdwefU2W4FjMYRMSLoGHPWwZbgVF4aa/ji2YtwFz+jb6v2XCwQUdmvYcZSRPKosGRpKELJ0xAFv+VBYvCiv3FXP6jjAHQD+XAJUz17A39aXijk6JnEAu86+DfTSbXYn1fWhGzIG9xH/Y"
} ],
"debug_key": "1234",
"shared_info": "{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"93f86829-cdf7-4ecd-b16d-4e415a3ee063\",\"reporting_origin\":\"https://small-free-wealth.glitch.me\",\"scheduled_report_time\":\"1681319668\",\"version\":\"0.1\"}"
}
Déboguer la charge utile en texte clair
Le debug_cleartext_payload
est encodé au format CBOR Base64. Vous pouvez afficher le bucket et la valeur à l'aide du décodeur ou du code JavaScript disponible dans le décodeur de stockage partagé.
Étapes suivantes
Les pages suivantes décrivent des aspects importants des API Shared Storage et Private Aggregation.
- Présentation du stockage partagé (Chrome pour les développeurs)
- Cas d'utilisation du stockage partagé (Chrome pour les développeurs)
- Présentation de l'agrégation privée (Chrome pour les développeurs)
- Explication sur le stockage partagé (GitHub)
- Private Aggregation Explainer (GitHub)
- Démonstration du stockage partagé et de l'agrégation privée
Une fois familiarisé avec les API, vous pouvez commencer à collecter les rapports, qui sont envoyés en tant que requête POST aux points de terminaison suivants au format JSON dans le corps de la requête.
- Rapports de débogage -
context-origin/.well-known/private-aggregation/debug/report-shared-storage
- Rapports -
context-origin/.well-known/private-aggregation/report-shared-storage
Une fois les rapports collectés, vous pouvez effectuer des tests à l'aide de l'outil de test local ou configurer l'environnement d'exécution sécurisé pour le service d'agrégation afin d'obtenir les rapports agrégés.
Envoyer des commentaires
Vous pouvez nous faire part de vos commentaires sur les API et la documentation sur GitHub.