Guide du développeur de l'API FLEDGE

À qui s'adresse cet article ?

Cet article est une référence technique sur l'itération actuelle de l'API Protected Audience expérimentale.

Qu'est-ce que Protected Audience ?

L'API Protected Audience est une proposition de la Privacy Sandbox qui cible une audience personnalisée et les cas de remarketing. Elle est conçue pour empêcher les tiers de suivre les habitudes de navigation de l'utilisateur sur les sites. L'API permet au navigateur d'organiser des enchères sur l'appareil afin de choisir des annonces pertinentes pour les sites Web que l'utilisateur a déjà visités.

Protected Audience est le premier test à être implémenté dans Chromium dans la famille de propositions TURTLEDOVE.

Le schéma ci-dessous présente une vue d'ensemble du cycle de vie de FLEDGE:

Illustration présentant chaque étape du cycle de vie de FLEDGE
Cycle de vie FLEDGE.

Comment puis-je essayer Protected Audience ?

Démonstration de Protected Audience

Une procédure de déploiement de base de Protected Audience sur les sites des annonceurs et des éditeurs est disponible sur protected-audience-demo.web.app.

La vidéo de démonstration explique le fonctionnement du code de démonstration et montre comment utiliser les outils pour les développeurs Chrome pour déboguer Protected Audience.

Participer à une phase d'évaluation de Protected Audience

Une phase d'évaluation de la pertinence et de la mesure de la Privacy Sandbox a été mise à disposition dans Chrome Bêta 101.0.4951.26 et versions ultérieures sur ordinateur pour les API Protected Audience, Topics et Attribution Reporting.

Pour participer, inscrivez-vous pour obtenir un jeton d'essai de l'origine.

Une fois que vous vous êtes inscrit au programme d'évaluation, vous pouvez tester l'API JavaScript Protected Audience sur les pages qui fournissent un jeton d'évaluation valide: par exemple, pour demander au navigateur de rejoindre un ou plusieurs groupes de centres d'intérêt, puis d'exécuter une mise aux enchères d'annonces afin de sélectionner et d'afficher une annonce.

La démo Protected Audience fournit un exemple de base de déploiement de Protected Audience de bout en bout.

Fournissez un jeton d'essai pour chaque page sur laquelle vous souhaitez exécuter du code de l'API Protected Audience:

  • En tant que balise Meta dans <head>:

    <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">

  • En tant qu'en-tête HTTP:

    Origin-Trial: TOKEN_GOES_HERE

  • En fournissant un jeton de manière programmatique:

    const otMeta = document.createElement('meta');
    otMeta.httpEquiv = 'origin-trial';
    otMeta.content = 'TOKEN_GOES_HERE';
    document.head.append(otMeta);
    

Un iframe exécutant du code Protected Audience (par exemple, un appel navigator.joinAdInterestGroup() par le propriétaire d'un groupe de centres d'intérêt) doit fournir un jeton correspondant à son origine.

Proposed First Protected Audience Origin Trial Details (Détails du premier test d'origine de l'API Protected Audience) fournit plus d'informations sur les objectifs du premier test et explique les fonctionnalités compatibles.

Tester cette API

Vous pouvez tester Protected Audience pour un seul utilisateur dans Chrome Bêta 101.0.4951.26 ou version ultérieure sur ordinateur:

  • En activant toutes les API de confidentialité des annonces sous chrome://settings/adPrivacy
  • En définissant des indicateurs à partir de la ligne de commande.

Afficher des annonces dans des iFrames ou des cadres cloisonnés

Les annonces peuvent être affichées dans un <iframe> ou un <fencedframe>, en fonction des indicateurs définis.

Pour utiliser <fencedframe> pour afficher des annonces:

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames

Pour utiliser <iframe> pour afficher des annonces:

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames

Incluez l'indicateur BiddingAndScoringDebugReportingAPI pour activer les méthodes de création de rapports de perte/victoire de débogage temporaires.

Exécuter Chromium avec des indicateurs explique comment définir des indicateurs lorsque vous exécutez Chrome et d'autres navigateurs basés sur Chromium à partir de la ligne de commande. La liste complète des flags Protected Audience est disponible sur la recherche de code Chromium.

Quelles fonctionnalités sont compatibles avec la dernière version de Chrome ?

Protected Audience est disponible derrière des flags de fonctionnalité dans Chromium pour la première fois afin de tester les fonctionnalités suivantes de la proposition Protected Audience:

  • Groupes d'intérêt: stockés par le navigateur, avec des métadonnées associées pour configurer les enchères et l'affichage des annonces.
  • Enchères sur l'appareil par les acheteurs (DSP ou annonceur): basées sur des groupes d'intérêts stockés et des signaux du vendeur.
  • Sélection d'annonces sur l'appareil par le vendeur (SSP ou éditeur): en fonction des enchères et des métadonnées des acheteurs.
  • Affichage d'annonces dans une version temporairement allégée de Fenced Frames: l'accès au réseau et la journalisation sont autorisés pour l'affichage des annonces.

La vidéo d'explication de l'API fournit plus d'informations sur la compatibilité des fonctionnalités et les contraintes.

Autorisations des groupes d'intérêt

Par défaut, dans l'implémentation actuelle de Protected Audience, l'appel de joinAdInterestGroup() est autorisé depuis n'importe quelle partie d'une page, même depuis des iFrames interdomaines. À l'avenir, une fois que les propriétaires de sites auront eu le temps d'ajuster leurs règles d'autorisation pour les iFrames interdomaines, il est prévu d'interdire les appels provenant d'iFrames interdomaines, comme indiqué dans la vidéo explicative.

Service clé-valeur

Dans le cadre d'une mise aux enchères d'annonces Protected Audience, le navigateur peut accéder à un service clés-valeurs qui renvoie des paires clé-valeur simples pour fournir des informations à un acheteur d'annonces, comme le budget de campagne restant. La proposition Protected Audience exige que ce serveur "n'effectue aucune journalisation au niveau des événements et n'implique aucun autre effet secondaire basé sur ces requêtes".

Le code du service de clé-valeur Protected Audience est désormais disponible dans un dépôt GitHub Privacy Sandbox. Ce service peut être utilisé par les développeurs Chrome et Android. Pour en savoir plus, consultez cet article de blog. Pour en savoir plus sur le service clé-valeur Protected Audience, consultez la présentation de l'API et la présentation du modèle de confiance.

Pour les tests initiaux, le modèle Bring Your Own Server (Apportez votre propre serveur) est utilisé. À long terme, les technologies publicitaires devront utiliser les services clé-valeur Open Source Protected Audience exécutés dans des environnements d'exécution sécurisés pour récupérer des données en temps réel.

Pour que l'écosystème ait suffisamment de temps pour effectuer des tests, nous ne prévoyons pas d'exiger l'utilisation des services de clés-valeurs ou des TEE open source avant la fin de la période d'abandon des cookies tiers. Nous leur donnerons un préavis suffisant pour qu'ils puissent commencer à tester et à adopter cette fonctionnalité avant cette transition.

Détecter la compatibilité des fonctionnalités

Avant d'utiliser l'API, vérifiez si elle est compatible avec le navigateur et disponible dans le document:

'joinAdInterestGroup' in navigator &&
  document.featurePolicy.allowsFeature('join-ad-interest-group') &&
  document.featurePolicy.allowsFeature('run-ad-auction') ?
  console.log('navigator.joinAdInterestGroup() is supported on this page') :
  console.log('navigator.joinAdInterestGroup() is not supported on this page');

Comment désactiver Protected Audience ?

Vous pouvez bloquer l'accès à l'API Protected Audience en tant que propriétaire de site ou en tant qu'utilisateur individuel.

Comment les sites peuvent-ils contrôler l'accès ?

À terme, Protected Audience exigera que les sites définissent une règle d'autorisation pour que la fonctionnalité Protected Audience soit disponible. Cela permet de s'assurer que des tiers arbitraires ne peuvent pas utiliser l'API à l'insu d'un site. Toutefois, pour faciliter les tests lors du premier test d'origine, cette exigence est levée par défaut. Les sites qui souhaitent désactiver explicitement la fonctionnalité Protected Audience pendant la période de test peuvent utiliser le règlement sur les autorisations approprié pour bloquer l'accès.

Vous pouvez définir deux règles d'autorisation Protected Audience indépendamment:

  • join-ad-interest-group active/désactive la fonctionnalité permettant d'ajouter un navigateur à des groupes de centres d'intérêt
  • run-ad-auction active/désactive la fonctionnalité permettant d'exécuter une mise aux enchères sur l'appareil.

L'accès aux API Protected Audience peut être complètement désactivé dans les contextes propriétaires en spécifiant la règle d'autorisation suivante dans un en-tête de réponse HTTP:

Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()

Vous pouvez désactiver l'utilisation des API dans un iFrame en ajoutant l'attribut allow suivant à un élément iFrame:

<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>

Pour en savoir plus, consultez la section Proposed First Protected Audience Origin Trial Permissions-Policy (Proposition de première règle permissions-policy pour la phase d'évaluation de l'origine Protected Audience).

Opposition expresse de l'utilisateur

Un utilisateur peut bloquer l'accès à l'API Protected Audience et à d'autres fonctionnalités de la Privacy Sandbox à l'aide de l'un des mécanismes suivants:

  • Désactivez les essais de la Privacy Sandbox dans les paramètres de Chrome: Paramètres > Sécurité et confidentialité > Privacy Sandbox. Vous pouvez également y accéder à l'adresse chrome://settings/adPrivacy.
  • Désactivez les cookies tiers dans les paramètres Chrome: Paramètres > Confidentialité et sécurité.
  • Définissez Cookies et autres données des sites sur "Bloquer les cookies tiers" ou "Bloquer tous les cookies" depuis chrome://settings/cookies.
  • Utilisez le mode navigation privée.

La présentation de Protected Audience fournit plus d'informations sur les éléments de conception de l'API et explique comment l'API cherche à atteindre des objectifs de confidentialité.

Déboguer les worklets Protected Audience

À partir de Chrome Canary 98.0.4718.0, vous pouvez déboguer les worklets Protected Audience dans les outils pour les développeurs Chrome.

La première étape consiste à définir des points d'arrêt via une nouvelle catégorie dans le volet Points d'arrêt de l'écouteur d'événements du panneau Sources.

Capture d&#39;écran de DevTools dans Chrome Canary, mettant en évidence le volet &quot;Points d&#39;arrêt de l&#39;écouteur d&#39;événements&quot; dans le panneau &quot;Sources&quot;.
   &quot;Début de la phase de définition d&#39;enchères de l&#39;enchérisseur&quot; est sélectionné sous &quot;Worklet d&#39;enchères publicitaires&quot;.

Lorsqu'un point d'arrêt se déclenche, l'exécution est interrompue avant la première instruction au niveau supérieur du script de worklet. Vous pouvez utiliser des points d'arrêt ou des commandes d'étape réguliers pour accéder à la fonction d'enchères/d'évaluation/de création de rapports elle-même.

Les scripts de worklet en cours d'exécution s'affichent également dans le panneau "Threads" (Fils de discussion).

Capture d&#39;écran de DevTools dans Chrome Canary, mettant en évidence le volet &quot;Threads&quot; (Fils) dans le panneau &quot;Sources&quot;, qui affiche le script de travaillet actuel qui a été mis en pause.

Étant donné que certains worklets peuvent s'exécuter en parallèle, plusieurs threads peuvent se retrouver dans l'état "suspendu". Vous pouvez utiliser la liste des threads pour passer d'un thread à l'autre, et les reprendre ou les inspecter de plus près si nécessaire.

Observer les événements Protected Audience

Dans le panneau "Application" des outils pour les développeurs Chrome, vous pouvez observer les événements de mise aux enchères et les groupes de centres d'intérêt Protected Audience.

Si vous accédez au site de démonstration de shopping Protected Audience dans un navigateur avec Protected Audience activé, DevTools affiche des informations sur l'événement join.

Panneau &quot;Application&quot; des outils pour les développeurs dans Chrome Canary, affichant des informations sur un événement de participation à un groupe de centres d&#39;intérêt Protected Audience.

Si vous accédez au site de l'éditeur de démonstration Protected Audience dans un navigateur avec Protected Audience activé, DevTools affiche des informations sur les événements bid et win.

Panneau &quot;Application&quot; des outils pour les développeurs dans Chrome Canary, affichant des informations sur les enchères et les événements de victoire des enchères Protected Audience.

Comment fonctionne l'API Protected Audience ?

Dans cet exemple, un utilisateur parcourt le site Web d'un fabricant de vélos personnalisés, puis visite un site d'actualités et voit une annonce pour un nouveau vélo de ce fabricant.

1. Un utilisateur consulte le site d'un annonceur

Illustration montrant une personne qui consulte le site Web d&#39;un fabricant de vélos personnalisés dans un navigateur sur son ordinateur portable.

Imaginons qu'un utilisateur visite le site Web d'un fabricant de vélos sur mesure (l'annonceur dans cet exemple) et passe un certain temps sur la page produit d'un vélo en acier fait main. Cela offre au fabricant de vélos une opportunité de remarketing.

2. Le navigateur de l'utilisateur est invité à ajouter un groupe d'intérêts

Illustration montrant une personne consultant un site dans un navigateur sur son ordinateur portable. Le code JavaScript joinAdInterestGroup() s&#39;exécute dans le navigateur.

Section d'explication:Les navigateurs enregistrent les groupes de centres d'intérêt

La plate-forme côté demande (DSP) de l'annonceur (ou l'annonceur lui-même) appelle navigator.joinAdInterestGroup() pour demander au navigateur d'ajouter un groupe de centres d'intérêt à la liste des groupes dont il est membre. Dans cet exemple, le groupe est nommé custom-bikes et le propriétaire est dsp.example. Le propriétaire du groupe d'intérêts (dans ce cas, la DSP) est un acheteur lors de l'enchère publicitaire décrite à l'étape 4. L'appartenance à un groupe de centres d'intérêt est stockée par le navigateur, sur l'appareil de l'utilisateur, et n'est pas partagée avec le fournisseur du navigateur ni avec un tiers.

joinAdInterestGroup() nécessite l'autorisation de:

  • Site consulté
  • Propriétaire du groupe d'intérêt

Par exemple, malicious.example ne doit pas pouvoir appeler joinAdInterestGroup() avec dsp.example comme propriétaire sans l'autorisation de dsp.example.

Autorisation du site consulté

Même origine: par défaut, l'autorisation est implicitement accordée pour les appels joinAdInterestGroup() provenant de la même origine que le site visité, c'est-à-dire de la même origine que le frame de niveau supérieur de la page actuelle. Les sites peuvent utiliser la directive join-ad-interest-group de l'en-tête de règles d'autorisation Protected Audience pour désactiver les appels joinAdInterestGroup().

Multi-origine: l'appel de joinAdInterestGroup() à partir d'origines différentes de la page actuelle ne peut aboutir que si le site visité a défini une stratégie d'autorisation qui autorise les appels à joinAdInterestGroup() à partir d'iFrames multi-origines.

Autorisation du propriétaire du groupe de centres d'intérêt

L'autorisation du propriétaire du groupe de centres d'intérêt est accordée implicitement en appelant joinAdInterestGroup() à partir d'un iframe ayant la même origine que celle du propriétaire du groupe de centres d'intérêt. Par exemple, un iframe dsp.example peut appeler joinAdInterestGroup() pour les groupes de centres d'intérêt appartenant à dsp.example.

La proposition est que joinAdInterestGroup() puisse s'exécuter dans une page ou une iFrame dans le domaine du propriétaire, ou être délégué à d'autres domaines fournis à l'aide d'une liste à une URL .well-known.

Utiliser navigator.joinAdInterestGroup()

Voici un exemple d'utilisation de l'API:

const interestGroup = {
  owner: 'https://dsp.example',
  name: 'custom-bikes',
  biddingLogicUrl: ...,
  biddingWasmHelperUrl: ...,
  dailyUpdateUrl: ...,
  trustedBiddingSignalsUrl: ...,
  trustedBiddingSignalsKeys: ['key1', 'key2'],
  userBiddingSignals: {...},
  ads: [bikeAd1, bikeAd2, bikeAd3],
  adComponents: [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2],
};

navigator.joinAdInterestGroup(interestGroup, 7 * kSecsPerDay);

L'objet interestGroup transmis à la fonction ne doit pas dépasser 50 ko, sinon l'appel échouera. Le deuxième paramètre spécifie la durée du groupe de centres d'intérêt, limitée à 30 jours. Les appels successifs écrasent les valeurs précédemment stockées.

Propriétés du groupe d'intérêt

Propriété Obligatoire Exemple Rôle
owner Obligatoire 'https://dsp.example' Origine du propriétaire du groupe d'intérêts.
name Obligatoire 'custom-bikes' Nom du groupe de centres d'intérêt.
biddingLogicUrl** Facultatif* 'https://dsp.example/bid/custom-bikes/bid.js' URL du code JavaScript d'enchères exécuté dans un worklet.
biddingWasmHelperUrl** Facultatif* 'https://dsp.example/bid/custom-bikes/bid.wasm' URL du code WebAssembly exécuté à partir de biddingLogicUrl.
dailyUpdateUrl** Facultatif 'https://dsp.example/bid/custom-bikes/update' URL qui renvoie un code JSON pour mettre à jour les attributs des groupes de centres d'intérêt. (voir Mettre à jour le groupe de centres d'intérêt).
trustedBiddingSignalsUrl** Facultatif 'https://dsp.example/trusted/bidding-signals' URL de base pour les requêtes de clés-valeurs adressées au serveur approuvé de l'enchérisseur.
trustedBiddingSignalsKeys Facultatif ['key1', 'key2' ...] Clés pour les requêtes envoyées au serveur approuvé de clés-valeurs.
userBiddingSignals Facultatif {...} Métadonnées supplémentaires que le propriétaire peut utiliser lors des enchères.
ads Facultatif* [bikeAd1, bikeAd2, bikeAd3] Annonces susceptibles d'être diffusées pour ce groupe de centres d'intérêt
adComponents Facultatif [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] Composants des annonces composées de plusieurs éléments.

* Toutes les propriétés sont facultatives, sauf owner et name. Les propriétés biddingLogicUrl et ads sont facultatives, mais obligatoires pour participer à une mise aux enchères. Il peut y avoir des cas d'utilisation pour créer un groupe de centres d'intérêt sans ces propriétés: par exemple, le propriétaire d'un groupe de centres d'intérêt peut vouloir ajouter un navigateur à un groupe de centres d'intérêt pour une campagne qui n'est pas encore diffusée, ou pour une autre utilisation future, ou il peut avoir temporairement épuisé son budget publicitaire.

** Les URL biddingLogicUrl, biddingWasmHelperUrl, dailyUpdateUrl et trustedBiddingSignalsUrl doivent avoir la même origine que le propriétaire. Les URL ads et adComponents ne sont pas soumises à cette contrainte.

Modifier les attributs des groupes de centres d'intérêt

dailyUpdateUrl spécifie un serveur Web qui renvoie un code JSON définissant les propriétés du groupe de centres d'intérêt, correspondant à l'objet de groupe de centres d'intérêt transmis à navigator.joinAdInterestGroup(). Cela permet au propriétaire du groupe de mettre à jour périodiquement les attributs du groupe de centres d'intérêt. Dans l'implémentation actuelle, les attributs suivants peuvent être modifiés:

  • biddingLogicUrl
  • biddingWasmHelperUrl
  • trustedBiddingSignalsUrl
  • trustedBiddingSignalsKeys
  • ads
  • priority

Aucun champ non spécifié dans le fichier JSON ne sera écrasé (seuls les champs spécifiés dans le fichier JSON seront mis à jour), tandis que l'appel de navigator.joinAdInterestGroup() écrase tout groupe de centres d'intérêt existant.

Les mises à jour sont effectuées dans la mesure du possible et peuvent échouer dans les cas suivants:

  • Délai avant expiration de la requête réseau (actuellement 30 secondes).
  • Autre erreur réseau.
  • Échec de l'analyse JSON.

Les mises à jour peuvent également être annulées si trop de temps consécutif a été consacré à la mise à jour, mais cela n'impose aucune limitation de débit aux mises à jour annulées (restantes). Les mises à jour sont limitées à une par jour. Les mises à jour qui échouent en raison d'erreurs réseau sont réessayées au bout d'une heure, et celles qui échouent en raison d'une déconnexion d'Internet sont réessayées immédiatement lors de la reconnexion.

Mises à jour manuelles

Les mises à jour des groupes de centres d'intérêt appartenant à l'origine du frame actuel peuvent être déclenchées manuellement via navigator.updateAdInterestGroups(). La limitation du débit empêche les mises à jour de se produire trop fréquemment : les appels répétés à navigator.updateAdInterestGroups() ne sont pas effectués tant que la période de limitation du débit (actuellement un jour) n'est pas écoulée. La limite de débit est réinitialisée si navigator.joinAdInterestGroup() est appelé à nouveau pour le même groupe de centres d'intérêt owner et name.

Mises à jour automatiques

Tous les groupes de centres d'intérêt chargés pour une mise aux enchères sont mis à jour automatiquement une fois la mise aux enchères terminée, et sont soumis aux mêmes limites de débit que les mises à jour manuelles. Pour chaque propriétaire disposant d'au moins un groupe de centres d'intérêt participant à une mise aux enchères, il est comme si navigator.updateAdInterestGroups() était appelé à partir d'un iFrame dont l'origine correspond à ce propriétaire.

Spécifier des annonces pour un groupe de centres d'intérêt

Les objets ads et adComponents incluent une URL pour une création publicitaire et, éventuellement, des métadonnées arbitraires pouvant être utilisées au moment des enchères. Exemple :

{
  renderUrl: 'https://cdn.example/.../bikeAd1.html',
  metadata: bikeAd1metadata // optional
}

Comment les acheteurs définissent-ils des enchères ?

Le script situé à biddingLogicUrl fourni par le propriétaire d'un groupe de centres d'intérêt doit inclure une fonction generateBid(). Lorsqu'un vendeur d'espace publicitaire appelle navigator.runAdAuction(), la fonction generatedBid() est appelée une fois pour chacun des groupes de centres d'intérêt dont le navigateur est membre, si le propriétaire du groupe de centres d'intérêt est invité à définir une enchère. En d'autres termes, generateBid() est appelé une fois pour chaque annonce candidate. Le vendeur fournit une propriété decisionLogicUrl sur le paramètre de configuration des enchères transmis à navigator.runAdAuction(). Le code de cette URL doit inclure une fonction scoreAd(), qui est exécutée pour chaque enchérisseur de l'enchère, afin d'évaluer chacune des enchères renvoyées par generateBid().

Le script situé à biddingLogicUrl fourni par un acheteur d'espace publicitaire doit inclure une fonction generateBid(). Cette fonction est appelée une fois pour chaque annonce candidate. runAdAuction() vérifie individuellement chaque annonce, ainsi que son enchère et ses métadonnées associées, puis attribue à l'annonce un score de désirabilité numérique.

generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  ...
  return {
    ad: adObject,
    bid: bidValue,
    render: renderUrl,
    adComponents: [adComponentRenderUrl1, ...]
   };
}

generateBid() utilise les arguments suivants :

  • interestGroup
    Objet transmis à joinAdInterestGroup() par l'acheteur d'annonces. (Le groupe de centres d'intérêt peut être mis à jour via dailyUpdateUrl.)

  • auctionSignals
    Propriété de l'argument config d'enchères transmise à navigator.runAdAuction() par le vendeur d'espace publicitaire. Il fournit des informations sur le contexte de la page (taille de l'annonce et ID de l'éditeur, par exemple), le type d'enchères (au premier ou au second prix) et d'autres métadonnées.

  • perBuyerSignals
    Comme pour auctionSignals, propriété de l'argument configuration des enchères transmise à navigator.runAdAuction() par le vendeur. Cela peut fournir des signaux contextuels du serveur de l'acheteur sur la page, si le vendeur est une SSP qui effectue un appel d'enchères en temps réel aux serveurs de l'acheteur et renvoie la réponse, ou si la page de l'éditeur contacte directement le serveur de l'acheteur. Si tel est le cas, l'acheteur peut souhaiter vérifier une signature cryptographique de ces signaux dans generateBid() pour se protéger contre la falsification.

  • trustedBiddingSignals
    Objet dont les clés sont les trustedBiddingSignalsKeys du groupe de centres d'intérêt et dont les valeurs sont renvoyées dans la requête trustedBiddingSignals.

  • browserSignals
    Objet construit par le navigateur, qui peut inclure des informations sur le contexte de la page (telles que l'hostname de la page actuelle, que le vendeur pourrait falsifier) et des données pour le groupe d'intérêt lui-même (telles qu'un enregistrement de la date à laquelle le groupe a remporté une mise aux enchères précédemment, pour permettre le plafonnement de la fréquence sur l'appareil).

L'objet browserSignals présente les propriétés suivantes:

{
  topWindowHostname: 'publisher.example',
  seller: 'https://ssp.example',
  joinCount: 3,
  bidCount: 17,
  prevWins: [[time1,ad1],[time2,ad2],...],
  wasmHelper: ... /* WebAssembly.Module object based on interest group's biddingWasmHelperUrl. */
  dataVersion: 1, /* Data-Version value from the buyer's Key/Value service response(s). */
}

Pour calculer une valeur bid, le code en generateBid() peut utiliser les propriétés des paramètres de la fonction. Exemple :

function generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  return {
    ...
    bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
    ...
  }
}

generateBid() renvoie un objet avec quatre propriétés:

  • ad
    Métadonnées arbitraires sur l'annonce, telles que les informations que le vendeur s'attend à obtenir sur cette enchère ou cette création publicitaire. Le vendeur](/resources/glossary#ssp) utilise ces informations dans ses enchères et sa décision concernant la création publicitaire. Le vendeur utilise ces informations dans sa logique d'enchères et de prise de décision.

  • bid
    Enchère numérique qui sera soumise aux enchères. Le vendeur doit pouvoir comparer les enchères de différents acheteurs. Par conséquent, les enchères doivent être exprimées dans une unité choisie par le vendeur (par exemple, "USD par mille"). Si l'enchère est nulle ou négative, ce groupe de centres d'intérêt ne participera pas du tout à la mise aux enchères du vendeur. Grâce à ce mécanisme, l'acheteur peut implémenter des règles d'annonceur pour déterminer où ses annonces peuvent ou non s'afficher.

  • render
    URL ou liste d'URL qui seront utilisées pour afficher la création si cette enchère remporte la mise aux enchères. (Voir la section Annonces composées de plusieurs éléments dans la présentation de l'API.) La valeur doit correspondre à l'renderUrl de l'une des annonces définies pour le groupe de centres d'intérêt.

  • adComponents
    Liste facultative de 20 composants maximum pour les annonces composées de plusieurs éléments, extraite de la propriété adComponents de l'argument de groupe d'intérêts transmis à navigator.joinAdInterestGroup().

Demander à un navigateur de quitter un groupe de centres d'intérêt

Le propriétaire d'un groupe de centres d'intérêt peut demander la suppression d'un navigateur de ce groupe. En d'autres termes, le navigateur est invité à supprimer le groupe de centres d'intérêt de la liste des groupes dont il est membre.

navigator.leaveAdInterestGroup({
  owner: 'https://dsp.example',
  name: 'custom-bikes'
});

Si un utilisateur revient sur le site qui a demandé au navigateur d'ajouter un groupe de centres d'intérêt, le propriétaire du groupe peut appeler la fonction navigator.leaveAdInterestGroup() pour demander au navigateur de supprimer le groupe. Le code d'une annonce peut également appeler cette fonction pour son groupe de centres d'intérêt.

3. L'utilisateur consulte un site qui vend de l'espace publicitaire.

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans un navigateur sur son ordinateur portable Le site comporte un emplacement publicitaire vide.

Plus tard, l'utilisateur consulte un site qui vend de l'espace publicitaire, par exemple un site d'actualités. Le site dispose d'un inventaire publicitaire, qu'il vend de façon programmatique à l'aide d'enchères en temps réel.

4. Une mise aux enchères publicitaires est effectuée dans le navigateur

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans un navigateur sur son ordinateur portable. Une mise aux enchères d&#39;annonces à l&#39;aide de l&#39;API Protected Audience est en cours.

Section d'explication:Les vendeurs exécutent des enchères sur l'appareil

L'enchère publicitaire est probablement gérée par le SSP de l'éditeur ou par l'éditeur lui-même. L'objectif de la mise aux enchères est de sélectionner l'annonce la plus appropriée pour un seul espace publicitaire disponible sur la page actuelle. Les enchères tiennent compte des groupes de centres d'intérêt auxquels le navigateur appartient, ainsi que des données des acheteurs d'espaces publicitaires et des vendeurs des services clé-valeur.

Le vendeur d'espace publicitaire envoie une requête au navigateur de l'utilisateur pour lancer une mise aux enchères d'annonces en appelant navigator.runAdAuction().

Exemple :

const auctionConfig = {
  seller: 'https://ssp.example',
  decisionLogicUrl: ...,
  trustedScoringSignalsUrl: ...,
  interestGroupBuyers: ['https://dsp.example', 'https://buyer2.example', ...],
  auctionSignals: {...},
  sellerSignals: {...},
  sellerTimeout: 100,
  perBuyerSignals: {
    'https://dsp.example': {...},
    'https://another-buyer.example': {...},
    ...
  },
  perBuyerTimeouts: {
    'https://dsp.example': 50,
    'https://another-buyer.example': 200,
    '*': 150,
    ...
  },
  componentAuctions: [
    {
      'seller': 'https://some-other-ssp.example',
      'decisionLogicUrl': ...,
      ...
    },
    ...
  ]
};

const auctionResultPromise = navigator.runAdAuction(auctionConfig);

runAdAuction() renvoie une promesse qui se résout en URN (urn:uuid:<something>) qui représente le résultat de l'enchère publicitaire. Le navigateur ne peut le décoder que lorsqu'il est transmis à un cadre clôturé pour l'affichage. La page de l'éditeur ne peut pas inspecter l'annonce gagnante.

Le script decisionLogicUrl examine chaque annonce individuelle, ainsi que son enchère et ses métadonnées associées, une par une, puis lui attribue un score de désirabilité numérique.

auctionConfig établissements

Propriété Obligatoire Exemple Rôle
seller Obligatoire 'https://ssp.example' Origine du vendeur.
decisionLogicUrl Obligatoire 'https://ssp.example/auction-decision-logic.js' URL du code JavaScript du worklet d'enchères.
trustedScoringSignalsUrl Facultatif 'https://ssp.example/scoring-signals' URL du serveur de confiance du vendeur.
interestGroupBuyers* Obligatoire ['https://dsp.example', 'https://buyer2.example', ...] Origines de tous les propriétaires de groupes de centres d'intérêt invités à définir une enchère lors de la mise aux enchères.
auctionSignals Facultatif {...} Informations sur le contexte de la page, le type d'enchères, etc.
sellerSignals Facultatif {...} Informations basées sur les paramètres de l'éditeur, sur l'envoi d'une demande d'annonce contextuelle, etc.
sellerTimeout Facultatif 100 Durée d'exécution maximale (ms) du script scoreAd() du vendeur.
perBuyerSignals Facultatif {'https://dsp.example': {...},
  'https://another-buyer.example': {...},
...}
Signaux contextuels sur la page pour chaque acheteur spécifique, à partir de son serveur.
perBuyerTimeouts Facultatif 50 Durée d'exécution maximale (en ms) des scripts generateBid() d'un acheteur spécifique.
componentAuctions Facultatif [{'seller': 'https://www.some-other-ssp.com',
  'decisionLogicUrl': ..., ...},
  ...]
Configurations supplémentaires pour les enchères de composants.

* Le vendeur peut spécifier interestGroupBuyers: '*' pour autoriser tous les groupes de centres d'intérêt à définir des enchères. Les annonces sont ensuite acceptées ou refusées en fonction d'autres critères que l'inclusion du propriétaire du groupe d'intérêt. Par exemple, le vendeur peut examiner les créations publicitaires pour vérifier qu'elles respectent ses règles.

** additionalBids n'est pas compatible avec l'implémentation actuelle de Protected Audience. Pour en savoir plus, consultez la section Participants aux enchères de la présentation de l'API Protected Audience.

Comment les annonces sont-elles sélectionnées ?

Le code de decisionLogicUrl (propriété de l'objet de configuration des enchères transmis à runAdAuction()) doit inclure une fonction scoreAd(). Cette opération est exécutée une fois pour chaque annonce afin de déterminer son attrait.

scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
  ...
  return desirabilityScoreForThisAd;
}

scoreAd() utilise les arguments suivants :

  • adMetadata
    Métadonnées arbitraires fournies par l'acheteur.
  • bid
    Valeur d'enchère numérique.
  • auctionConfig
    Objet de configuration des enchères transmis à navigator.runAdAuction().
  • trustedScoringSignals
    Valeurs récupérées au moment des enchères à partir du serveur approuvé du vendeur, représentant l'opinion du vendeur sur l'annonce.
  • browserSignals
    Objet créé par le navigateur, y compris les informations que le navigateur connaît et que le script d'enchères du vendeur peut vouloir vérifier:
{
  topWindowHostname: 'publisher.example',
  interestGroupOwner: 'https://dsp.example',
  renderUrl: 'https://cdn.example/render',
  adComponents: ['https://cdn.com/ad-component-1', ...],
  biddingDurationMsec: 12,
  dataVersion: 1 /* Data-Version value from the seller's Key/Value service response. */
}

Avant le début d'une mise aux enchères, le vendeur trouve la meilleure annonce contextuelle pour l'espace publicitaire disponible. Une partie de la logique scoreAd() consiste à rejeter toute annonce qui ne peut pas battre l'annonce gagnante basée sur le contexte.

5. Le vendeur et les acheteurs participants reçoivent des données en temps réel du service clés-valeurs.

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans un navigateur sur son ordinateur portable. Une mise aux enchères d&#39;annonces à l&#39;aide de l&#39;API Protected Audience a lieu, et un participant reçoit des données du service clés/valeurs.

Section d'explication:Récupérer des données en temps réel à partir du service clés-valeurs Protected Audience

Lors d'enchères publicitaires, le vendeur d'espaces publicitaires peut obtenir des données en temps réel sur des créations publicitaires spécifiques en envoyant une requête à un service clés-valeurs à l'aide de la propriété trustedScoringSignalsUrl de l'argument configuration des enchères transmis à navigator.runAdAuction(), ainsi que des clés des propriétés renderUrl de toutes les entrées des champs ads et adComponents de tous les groupes de centres d'intérêt de l'enchère.

De même, un acheteur d'espace publicitaire peut demander des données en temps réel au service clés-valeurs à l'aide des propriétés trustedBiddingSignalsUrl et trustedBiddingSignalsKeys de l'argument de groupe d'intérêts transmis à navigator.joinAdInterestGroup().

Lorsque runAdAuction() est appelé, le navigateur envoie une requête au serveur de confiance de chaque acheteur d'annonces. L'URL de la requête peut se présenter comme suit:

https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
  • L'URL de base provient de trustedBiddingSignalsUrl.
  • hostname est fourni par le navigateur.
  • La valeur keys est extraite de trustedBiddingSignalsKeys.

La réponse à cette requête est un objet JSON fournissant des valeurs pour chacune des clés.

6. L'annonce gagnante est diffusée

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans un navigateur sur son ordinateur portable. Une annonce pour un vélo (20% de remise) s&#39;affiche, avec un cadenas au-dessus pour indiquer qu&#39;elle s&#39;affiche dans un cadre délimité.

Section d'explication:Les navigateurs affichent l'annonce gagnante

Comme décrit précédemment, la promesse renvoyée par runAdAuction() se résout en URN, qui est transmise à un cadre clôturé pour le rendu, et le site affiche l'annonce gagnante.

7. Le résultat de l'enchère est enregistré

Section d'explication:Rapports au niveau des événements (pour le moment)

Résultat du rapport du vendeur

Section d'explication:Rapports sur le rendu pour les marchands

Le code JavaScript du vendeur fourni à decisionLogicUrl (qui a également fourni scoreAd()) peut inclure une fonction reportResult() pour signaler le résultat de l'enchère.

reportResult(auctionConfig, browserSignals) {
  ...
  return signalsForWinner;
}

Les arguments transmis à cette fonction sont les suivants:

  • auctionConfig
    Objet de configuration des enchères transmis à navigator.runAdAuction().

  • browserSignals
    Objet créé par le navigateur et fournissant des informations sur l'enchère. Par exemple:

    {
      'topWindowHostname': 'publisher.example',
      'interestGroupOwner': 'https://dsp.example',
      'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn',
      'bid:' <bidValue>,
      'desirability': <winningAdScore>
    }
    

La valeur renvoyée par cette fonction est utilisée comme argument sellerSignals pour la fonction reportWin() de l'enchérisseur gagnant.

Résultat du rapport sur l'enchérisseur gagnant

Section d'explication:Rapports de l'acheteur sur les événements de rendu et d'annonce

Le code JavaScript de l'enchérisseur gagnant (qui a également fourni generateBid()) peut inclure une fonction reportWin() pour signaler le résultat de l'enchère.

reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
  ...
}

Les arguments transmis à cette fonction sont les suivants:

  • auctionSignals et perBuyerSignals
    Les mêmes valeurs transmises à generateBid() pour l'enchérisseur gagnant.
  • sellerSignals
    Valeur renvoyée par reportResult(), qui permet au vendeur de transmettre des informations à l'acheteur.
  • browserSignals
    Objet créé par le navigateur et fournissant des informations sur l'enchère. Par exemple:

    {
      'topWindowHostname': 'publisher.example',
      'seller': 'https://ssp.example',
      'interestGroupOwner': 'https://dsp.example',
      'interestGroupName': 'custom-bikes',
      'renderUrl': 'https://cdn.example/winning-creative.wbn',
      'bid:' <bidValue>
    }
    

Implémentation temporaire des rapports sur les gains/pertes

Deux méthodes sont temporairement disponibles dans Chrome pour créer des rapports sur les enchères:

  • forDebuggingOnly.reportAdAuctionLoss()
  • forDebuggingOnly.reportAdAuctionWin()

Chacune de ces méthodes accepte un seul argument: une URL à extraire une fois l'enchère terminée. Ils peuvent être appelés plusieurs fois, à la fois dans scoreAd() et generateBid(), avec différents arguments d'URL.

Chrome n'envoie des rapports de débogage sur les pertes/gains que lorsqu'une enchère est exécutée jusqu'à son terme. Si une mise aux enchères est annulée (par exemple, en raison d'une nouvelle navigation), aucun rapport ne sera généré.

Ces méthodes sont disponibles par défaut dans Chrome. Pour pouvoir tester les méthodes, activez toutes les API de confidentialité des annonces sous chrome://settings/adPrivacy. Si vous exécutez Chrome avec des indicateurs de ligne de commande pour activer l'API Protected Audience, vous devez activer explicitement les méthodes en incluant l'indicateur BiddingAndScoringDebugReportingAPI. Si l'indicateur n'est pas activé, les méthodes restent disponibles, mais ne font rien.

8. Un clic sur une annonce est enregistré

Illustration montrant une personne cliquant sur une annonce pour un vélo, dans un cadre délimité, sur un site Web d&#39;actualités, avec des données de rapport envoyées au vendeur et aux acheteurs.

Un clic sur une annonce affichée dans un cadre délimité est enregistré. Pour en savoir plus sur le fonctionnement de ce processus, consultez la section Rapports sur les annonces avec cadres délimités.



Le schéma ci-dessous décrit chaque étape d'une enchère publicitaire Protected Audience:

Illustration présentant chaque étape d&#39;une mise aux enchères d&#39;annonces Protected Audience


Quelle est la différence entre Protected Audience et TURTLEDOVE ?

Protected Audience est le premier test à être implémenté dans Chromium dans la famille de propositions TURTLEDOVE.

Protected Audience suit les principes généraux de TURTLEDOVE. Certaines publicités en ligne sont basées sur la diffusion d'une annonce auprès d'une personne potentiellement intéressée qui a déjà interagi avec l'annonceur ou le réseau publicitaire. Historiquement, l'annonceur reconnaissait une personne spécifique lorsqu'elle naviguait sur des sites Web, ce qui constitue un problème de confidentialité majeur sur le Web d'aujourd'hui.

L'initiative TURTLEDOVE vise à proposer une nouvelle API pour répondre à ce cas d'utilisation, tout en offrant des avancées clés en matière de confidentialité:

  • C'est le navigateur, et non l'annonceur, qui détient les informations sur les centres d'intérêt supposés d'une personne.
  • Les annonceurs peuvent diffuser des annonces en fonction d'un centre d'intérêt, mais ne peuvent pas combiner ce centre d'intérêt avec d'autres informations sur une personne, en particulier son identité ou la page qu'elle consulte.

Protected Audience est né de TURTLEDOVE et d'un ensemble de propositions de modifications associées pour mieux servir les développeurs qui utiliseraient l'API:

  • Dans SPARROW, Criteo a proposé d'ajouter un modèle de service (appelé "Gatekeeper") exécuté dans un environnement d'exécution sécurisé (TEE). Protected Audience inclut une utilisation plus limitée des TEE, pour la recherche de données en temps réel et les rapports agrégés.
  • Les propositions TERN de NextRoll et PARRROT de Magnite décrivaient les différents rôles des acheteurs et des vendeurs dans les enchères sur l'appareil. Le flux d'enchères/d'évaluation des annonces de Protected Audience est basé sur ce travail.
  • Les modifications TURTLEDOVE basées sur les résultats et au niveau du produit de RTB House ont amélioré le modèle d'anonymat et les fonctionnalités de personnalisation des enchères sur l'appareil.
  • PARAKEET est la proposition de Microsoft pour un service publicitaire semblable à TURTLEDOVE qui s'appuie sur un serveur proxy exécuté dans un TEE entre le navigateur et les fournisseurs de technologie publicitaire, afin d'anonymiser les requêtes publicitaires et de mettre en œuvre des propriétés de confidentialité. Protected Audience n'a pas adopté ce modèle de proxy. Nous alignons les API JavaScript pour PARAKEET et Protected Audience afin de faciliter les futurs travaux visant à combiner davantage les meilleures fonctionnalités des deux propositions.

Protected Audience n'empêche pas encore le réseau publicitaire d'un site Web d'apprendre quelles annonces un utilisateur voit. Nous prévoyons de modifier l'API pour qu'elle devienne plus privée au fil du temps.

Quelle configuration de navigateur est disponible ?

Les utilisateurs peuvent ajuster leur participation aux essais de la Privacy Sandbox dans Chrome en activant ou en désactivant le paramètre de niveau supérieur dans chrome://settings/adPrivacy. Lors des tests initiaux, les utilisateurs pourront utiliser ce paramètre de la Privacy Sandbox de haut niveau pour désactiver Protected Audience. Chrome prévoit de permettre aux utilisateurs de consulter et de gérer la liste des groupes de centres d'intérêt auxquels ils ont été ajoutés sur les sites Web qu'ils ont consultés. Comme pour les technologies de la Privacy Sandbox elles-mêmes, les paramètres utilisateur peuvent évoluer en fonction des commentaires des utilisateurs, des autorités de régulation et d'autres personnes.

Nous continuerons de mettre à jour les paramètres disponibles dans Chrome à mesure que la proposition Protected Audience évoluera, en fonction des tests et des commentaires. À l'avenir, nous prévoyons de proposer des paramètres plus précis pour gérer Protected Audience et les données associées.

Les appelants d'API ne peuvent pas accéder à l'appartenance au groupe lorsque les utilisateurs naviguent en mode navigation privée. L'appartenance est supprimée lorsque les utilisateurs effacent leurs données de site.



Interagir et envoyer des commentaires

Obtenir de l'aide

Pour poser une question sur votre implémentation, la démo ou la documentation:

Pour les bugs et les problèmes liés à l'implémentation de l'API Protected Audience dans Chrome : * Affichez les problèmes existants signalés pour l'API. * Signalez un nouveau problème sur crbug.com/new.

Recevoir les dernières informations

  • Pour être informé des modifications d'état dans l'API, rejoignez la liste de diffusion pour les développeurs.
  • Pour suivre de près toutes les discussions en cours sur l'API, cliquez sur le bouton Follow (Suivre) sur la page de la proposition sur GitHub. Pour ce faire, vous devez disposer d'un compte GitHub ou en créer un.
  • Pour recevoir des informations générales sur la Privacy Sandbox, abonnez-vous au flux RSS [Progress in the Privacy Sandbox].

En savoir plus


Photo de Ray Hennessy sur Unsplash.