¿A quién está dirigido este artículo?
Esta publicación es una referencia técnica a la iteración actual de la API experimental de Protected Audience.
La API de Protected Audience es una descripción general menos técnica de la propuesta, y también tiene un glosario.
La demostración de Protected Audience brinda una explicación de un FLEDGE básico. de Google Workspace.
Video de demostración de Protected Audience se explica cómo funciona el código de demostración y se muestra cómo usar las Herramientas para desarrolladores de Chrome para la depuración de Protected Audience.
¿Qué es Protected Audience?
La API de Protected Audience es una propuesta de Privacy Sandbox que se publicará remarketing y públicos personalizados, diseñados para que terceros para realizar un seguimiento del comportamiento de navegación del usuario en los sitios. La API habilita las subastas integradas en el dispositivo el navegador, para elegir anuncios relevantes para los sitios web que el usuario visitó anteriormente.
Protected Audience es el primer experimento que se implementa en Chromium dentro del TURTLEDOVE.
En el siguiente diagrama, se proporciona una descripción general del ciclo de vida de FLEDGE:
![Ilustración que proporciona una descripción general de cada etapa del ciclo de vida de FLEDGE](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/fledgeblog1.png?authuser=8&hl=es)
¿Cómo puedo probar Protected Audience?
Demostración de Protected Audience
Puedes encontrar una explicación de la implementación básica de Protected Audience en sitios de anunciantes y publicadores en protected-audience-demo.web.app.
El video de demostración se explica cómo funciona el código de demostración y se muestra cómo usar las Herramientas para desarrolladores de Chrome para la depuración de Protected Audience.
Participa en una prueba de origen de Protected Audience
Se inició una prueba de origen de Relevancia y medición de Privacy Sandbox está disponible en Chrome Beta 101.0.4951.26 y versiones posteriores en computadoras para Protected Audience Topics y APIs de Attribution Reporting.
Si quieres participar, regístrate para obtener un token de prueba de origen.
Una vez que te hayas inscrito correctamente en la prueba, podrás probar la API de JavaScript de Protected Audience en las páginas que proporcionen un token de prueba válido; por ejemplo, para solicitar al navegador que se una a uno o más grupos de interés y, luego, ejecutar una subasta de anuncios para seleccionar y mostrar un anuncio.
La demostración de Protected Audience proporciona un ejemplo básico de una implementación de Protected Audience de extremo a extremo.
Proporciona un token de prueba para cada página en la que desees ejecutar el código de la API de Protected Audience:
Como metaetiqueta en la etiqueta <head>:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
Como encabezado HTTP:
Origin-Trial: TOKEN_GOES_HERE
Cuando proporcionas un token de manera programática, sucede lo siguiente:
const otMeta = document.createElement('meta'); otMeta.httpEquiv = 'origin-trial'; otMeta.content = 'TOKEN_GOES_HERE'; document.head.append(otMeta);
Un iframe que ejecuta código de Protected Audience, como una navigator.joinAdInterestGroup()
llamada del propietario de un grupo de interés, deberá proporcionar un token que coincida con su origen.
Detalles de la prueba de origen del primer público protegido propuesto Brinda más detalles sobre los objetivos de la primera prueba y explica las funciones compatibles.
Probar esta API
Puedes probar Protected Audience para un solo usuario en Chrome Beta 101.0.4951.26 y versiones posteriores en una computadora de escritorio:
- Habilitando todas las APIs de privacidad en los anuncios de
chrome://settings/adPrivacy
- Estableciendo marcas desde la línea de comandos
Renderiza anuncios en iframes o marcos vallados
Los anuncios se pueden renderizar en un <iframe>
o un <fencedframe>
.
según las marcas configuradas.
Si quieres usar <fencedframe>
para renderizar anuncios, haz lo siguiente:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames
Si quieres usar <iframe>
para renderizar anuncios, haz lo siguiente:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames
Incluye la marca BiddingAndScoringDebugReportingAPI
para habilitar los métodos temporales de generación de informes de pérdida/adquisición de la depuración.
Ejecutar Chromium con funciones experimentales se explica cómo configurar marcas cuando se ejecutan Chrome y otros navegadores basados en Chromium desde el comando línea. La lista completa de marcas de Protected Audience está disponible en Búsqueda de código de Chromium.
¿Qué funciones son compatibles con la versión más reciente de Chrome?
Protected Audience estará disponible detrás de marcas de función en Chromium por primera vez para probar las siguientes funciones de la propuesta de Protected Audience:
- Grupos de interés: Almacenados por el navegador, con metadatos asociados para configurar las ofertas de anuncios y la renderización.
- Ofertas integradas en el dispositivo por parte de compradores (DSP o anunciante): Se basan en indicadores y grupos de interés almacenados. del vendedor.
- Selección de anuncios en el dispositivo por parte del vendedor (SSP o publicador): Se basa en las ofertas de subasta y metadatos de los compradores.
- Renderización de anuncios en una versión de marcos vallados temporalmente flexibilizada: con acceso a la red y para la renderización de anuncios.
La explicación de la API proporciona más detalles sobre la compatibilidad y las restricciones de las funciones.
Permisos del grupo de interés
La configuración predeterminada en la implementación actual de Protected Audience es permitir llamar a joinAdInterestGroup()
desde
en cualquier lugar de una página, incluso en iframes multidominio. En el futuro, una vez que los propietarios de los sitios tengan tiempo
para ajustar sus políticas de permisos de iframe multidominio, el plan es deshabilitar las llamadas
iframes multidominio, como se describe en la explicación.
Servicio de par clave-valor
Como parte de una subasta de anuncios de Protected Audience, el navegador puede acceder a un servicio clave-valor que devuelve pares clave-valor simples para proporcionar información a un comprador de anuncios, como los presupuesto de la campaña. La propuesta de Protected Audience los mandatos que este servidor "no realiza registros a nivel del evento ni tiene otros efectos secundarios basados en estas solicitudes".
El código de servicio de clave-valor de Protected Audience ahora está disponible en un repositorio de GitHub de Privacy Sandbox. Los desarrolladores de Chrome y Android pueden usar este servicio. Consulta la entrada de blog del anuncio para ver la actualización del estado. Obtén más información sobre el servicio de par clave-valor de Protected Audience en la explicación de la API y en la explicación del modelo de confianza.
Para las pruebas iniciales, se usa el modelo “Trae tu propio servidor”. A largo plazo, las AdTech deberán usar los servicios de clave-valor de Protected Audience de código abierto que se ejecuten en entornos de ejecución de confianza para recuperar datos en tiempo real.
Para garantizar que el ecosistema tenga tiempo suficiente para realizar pruebas, no esperamos exigir el uso de servicios de par clave-valor de código abierto o TEE hasta algún tiempo después de la baja de las cookies de terceros. Enviaremos una notificación importante a los desarrolladores para que comiencen a realizar pruebas y adopción antes de que se lleve a cabo esta transición.
Cómo detectar la compatibilidad con funciones
Antes de usar la API, comprueba si es compatible con el navegador y si está disponible en el documento:
'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');
¿Cómo puedo inhabilitar Protected Audience?
Puedes bloquear el acceso a la API de Protected Audience como propietario del sitio o como usuario individual.
¿Cómo pueden los sitios controlar el acceso?
Con el tiempo, Protected Audience requerirá que los sitios establezcan una Política de Permisos. para permitir que esté disponible la funcionalidad de Protected Audience. Esto ayudará a garantizar que terceros arbitrarios no puedan usar la API sin la API conocimientos. Sin embargo, para facilitar las pruebas durante la primera prueba de origen, este requisito no se aplica de forma predeterminada. Los sitios que quieran inhabilitar explícitamente la funcionalidad de Protected Audience durante el período de prueba pueden usar la Política de Permisos correspondiente para bloquear el acceso.
Existen dos políticas de permisos de Protected Audience que se pueden establecer de forma independiente:
join-ad-interest-group
habilita o inhabilita la funcionalidad para agregar un navegador a los grupos de interésrun-ad-auction
habilita o inhabilita la funcionalidad para ejecutar una subasta integrada en el dispositivo
El acceso a las APIs de Protected Audience se puede inhabilitar por completo en contextos propios especificando lo siguiente de permisos en un encabezado de respuesta HTTP:
Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()
Puedes inhabilitar el uso de las APIs en un iframe agregando el siguiente atributo allow
a un
elemento iframe:
<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>
En la sección Política de Permisos de la Prueba de Origen de Protected Audience Propuestos, se proporcionan más detalles.
Rechazo de parte del usuario
Un usuario puede bloquear el acceso a la API de Protected Audience y a otras funciones de Privacy Sandbox mediante cualquiera de los los siguientes mecanismos:
- Inhabilita las pruebas de Privacy Sandbox en la configuración de Chrome: Configuración >
Seguridad y privacidad > Privacy Sandbox. También se puede acceder a ella en
chrome://settings/adPrivacy
. - Inhabilitar las cookies de terceros en la configuración de Chrome: Configuración > Seguridad y privacidad.
- Configura Cookies y otros datos de sitios en "Bloquear cookies de terceros". o "Bloquear todas las cookies"
desde
chrome://settings/cookies
. - Usa el modo Incógnito.
En la explicación de Protected Audience, se proporcionan más detalles sobre los elementos de diseño de la API y se describe cómo la API busca cumplir los objetivos de privacidad.
Depura los worklets de Protected Audience
A partir de Chrome Canary 98.0.4718.0, es posible depurar los worklets de Protected Audience en las Herramientas para desarrolladores de Chrome.
El primer paso es establecer los puntos de interrupción a través de una categoría nueva en el panel Event Listener Breakpoints en el panel Fuentes.
![Captura de pantalla de
Herramientas para desarrolladores en Chrome Canary, con el panel Event Listener Breakpoints destacado en el panel Sources.
El inicio de la fase de oferta del ofertante se selecciona en Worklet de subasta de anuncios.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/screenshot-devtools-f272e7a201571.png?authuser=8&hl=es)
Cuando se activa un punto de interrupción, la ejecución se pausa antes de la primera sentencia en el nivel superior de la de gcloud. Puedes usar puntos de interrupción habituales o comandos de pasos para acceder a las ofertas, la puntuación o los informes. su propia función.
Las secuencias de comandos del worklet en vivo también se mostrarán en el panel Threads.
![Captura de pantalla de
Herramientas para desarrolladores en Chrome Canary, en la que se destaca el panel Threads en el panel Sources y que se muestra el valor actual
secuencia de comandos del worklet que está en pausa.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/screenshot-devtools-chr-49c6b80c72f4a.png?authuser=8&hl=es)
Dado que algunos worklets pueden ejecutarse en paralelo, varios subprocesos pueden terminar en "pausados". ahí; puedes usar la lista de subprocesos para alternar entre ellos y reanudarlos o inspeccionarlos con más detalle lo que sea apropiado.
Observa los eventos de Protected Audience
En el panel Application de las Herramientas para desarrolladores de Chrome, puedes observar el grupo de interés y la subasta de Protected Audience eventos.
Si visitas el sitio de compras para la demostración de Protected Audience
en un navegador con Protected Audience habilitado, las Herramientas para desarrolladores mostrarán información sobre el evento join
.
![El
Panel de la aplicación de Herramientas para desarrolladores en Chrome Canary que muestra información sobre un grupo de interés de Protected Audience
unirse al evento.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/the-devtools-applicati-c7168a6021513.png?authuser=8&hl=es)
Ahora, si visitas el sitio para publicadores de demostración de Protected Audience
En un navegador con Protected Audience habilitado, las Herramientas para desarrolladores muestran información sobre los eventos bid
y win
.
![El
Panel de la aplicación de Herramientas para desarrolladores en Chrome Canary, que muestra información sobre la oferta de subasta de Protected Audience y
de eventos de éxito.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/the-devtools-applicati-33f68c41ad519.png?authuser=8&hl=es)
¿Cómo funciona la API de Protected Audience?
En este ejemplo, un usuario navega por el sitio web de un fabricante de bicicletas personalizado y, luego, visita un sitio web de noticias. y se le muestra un anuncio de una bicicleta nueva del fabricante de bicicletas.
1. Un usuario visita el sitio de un anunciante.
![Ilustración que muestra
una persona que visita el sitio de un fabricante de bicicletas personalizadas en un navegador desde su laptop.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-p-7cef347843604.png?authuser=8&hl=es)
Imagina que un usuario visita el sitio web de un fabricante de bicicletas personalizada (el anunciante de este ejemplo) y pasa algún tiempo en la página del producto de una bicicleta de acero hecha a mano. Esto proporciona la de bicicletas con una oportunidad de remarketing.
2. Se le solicita al navegador del usuario que agregue un grupo de interés
![Ilustración que muestra a una persona mirando un sitio en un navegador con su laptop. JavaScript
el código joinAdInterestGroup() se está ejecutando en el navegador.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-per-8856a700d6569.png?authuser=8&hl=es)
Sección de explicación: Los navegadores registran los grupos de interés
La plataforma orientada a la demanda (DSP) del anunciante (o el anunciante
sí mismo) llama a navigator.joinAdInterestGroup()
para pedirle al navegador que agregue un grupo de interés al
lista de grupos a los que pertenece el navegador. En este ejemplo, el grupo se llama custom-bikes
.
el propietario es dsp.example
. El propietario del grupo de interés (en este caso, la DSP) será un
comprador en la subasta de anuncios descrita en el paso 4.
La pertenencia a un grupo de interés se almacena en el navegador del dispositivo del usuario y no se comparte con el
proveedor del navegador o cualquier otra persona.
joinAdInterestGroup()
requiere el permiso de:
- El sitio que se está visitando
- El propietario del grupo de interés
Por ejemplo: no debe ser posible que malicious.example
llame.
joinAdInterestGroup()
con dsp.example
como propietario sin el permiso de
dsp.example
Permiso del sitio que se está visitando
Mismo origen: De forma predeterminada, el permiso se otorga de forma implícita para las llamadas joinAdInterestGroup()
de
origen del mismo que el sitio visitado, es decir, del mismo origen que el marco de nivel superior de la
página actual. Los sitios pueden usar un encabezado de política de permisos de Protected Audience
La directiva join-ad-interest-group
para inhabilitar las llamadas joinAdInterestGroup()
Entre orígenes: Llama a joinAdInterestGroup()
desde orígenes diferentes del actual
página solo tendrá éxito si el sitio que se está visitando ha establecido una política de permisos que permita que las llamadas a
joinAdInterestGroup()
de iframes de origen cruzado.
Permiso del propietario del grupo de interés
El permiso de propietario del grupo de interés se otorga de forma implícita llamando a joinAdInterestGroup()
.
desde un iframe con el mismo origen que el del propietario del grupo de interés. Por ejemplo, un objeto dsp.example
iframe puede llamar a joinAdInterestGroup()
para los grupos de intereses que pertenecen a dsp.example
.
La propuesta es que joinAdInterestGroup()
se pueda ejecutar en una página o en un iframe en el dominio del propietario.
se delegará a otros dominios proporcionados usando una lista en una URL .well-known
.
Cómo usar navigator.joinAdInterestGroup()
Este es un ejemplo de cómo se podría usar la 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);
El objeto interestGroup
que se pasa a la función no debe tener más de 50 kiB de tamaño; de lo contrario, el
la llamada fallará. El segundo parámetro especifica la duración del grupo de interés, con un límite de 30.
días. Las llamadas sucesivas reemplazan los valores almacenados con anterioridad.
Propiedades del grupo de interés
Propiedad | Obligatorio | Ejemplo | Rol |
---|---|---|---|
owner |
Obligatorio | 'https://dsp.example' |
Origen del propietario del grupo de interés. |
name |
Obligatorio | 'custom-bikes' |
Es el nombre del grupo de interés. |
biddingLogicUrl ** |
Opcional* | 'https://dsp.example/bid/custom-bikes/bid.js' |
URL para las ofertas de JavaScript ejecutada en worklet. |
biddingWasmHelperUrl ** |
Opcional* | 'https://dsp.example/bid/custom-bikes/bid.wasm' |
URL del código de WebAssembly generado desde biddingLogicUrl . |
dailyUpdateUrl ** |
Opcional | 'https://dsp.example/bid/custom-bikes/update' |
URL que muestra JSON para actualizar los atributos del grupo de interés. (Consulta Actualizar el grupo de interés). |
trustedBiddingSignalsUrl ** |
Opcional | 'https://dsp.example/trusted/bidding-signals' |
URL base para las solicitudes de pares clave-valor al servidor de confianza del ofertante. |
trustedBiddingSignalsKeys |
Opcional | ['key1', 'key2' ...] |
Claves para solicitudes al servidor de confianza de par clave-valor. |
userBiddingSignals |
Opcional | {...} |
Metadatos adicionales que el propietario puede usar durante la licitación |
ads |
Opcional* | [bikeAd1, bikeAd2, bikeAd3] |
Anuncios que se podrían renderizar para este grupo de interés. |
adComponents |
Opcional | [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] |
Componentes para anuncios compuestos por varios elementos. |
* Todas las propiedades son opcionales, excepto owner
y name
. biddingLogicUrl
y ads
Las propiedades son opcionales, pero se requieren para participar en una subasta. Puede haber casos de uso
crear un grupo de interés sin estas propiedades; por ejemplo, el propietario de un grupo de interés podría
agregar un navegador a un grupo de interés para una campaña que aún no se publica o para algunas
otros usos futuros, o es posible que se queden temporalmente sin presupuesto publicitario.
** Las URLs biddingLogicUrl
, biddingWasmHelperUrl
, dailyUpdateUrl
y trustedBiddingSignalsUrl
deben tener el mismo origen que el propietario. Las URLs ads
y adComponents
no tienen esa restricción.
Actualizar los atributos del grupo de interés
dailyUpdateUrl
especifica un servidor web que muestra JSON que define las propiedades del grupo de interés.
correspondiente al objeto del grupo de interés que se pasó a navigator.joinAdInterestGroup()
. Esta
proporciona un mecanismo para que el propietario del grupo actualice periódicamente los atributos de la
grupo de interés. En la implementación actual,
se pueden cambiar los siguientes atributos:
biddingLogicUrl
biddingWasmHelperUrl
trustedBiddingSignalsUrl
trustedBiddingSignalsKeys
ads
priority
Los campos que no se especifiquen en el archivo JSON no se reemplazarán; solo se obtendrán los campos especificados en el archivo JSON.
se actualizó, mientras que la llamada a navigator.joinAdInterestGroup()
reemplaza cualquier grupo de interés existente.
Las actualizaciones se realizan mediante el mejor esfuerzo y pueden fallar en las siguientes condiciones:
- Tiempo de espera de la solicitud de red (actualmente, 30 segundos).
- Otra falla de la red.
- Error de análisis de JSON.
Las actualizaciones también se pueden cancelar si se dedicó demasiado tiempo contiguo a estas actualizaciones. Sin embargo, esto no impone ningún límite de frecuencia a las actualizaciones canceladas (restantes). Las actualizaciones tienen un límite de frecuencia como máximo de una por día. Las actualizaciones que fallan debido a errores de red se vuelven a intentar después de una hora. las actualizaciones que fallan debido a la desconexión de Internet se reintentan inmediatamente tras volver a conectarse.
Actualizaciones manuales
Las actualizaciones a los grupos de intereses que pertenecen al origen del fotograma actual se pueden activar manualmente mediante
navigator.updateAdInterestGroups()
El límite de frecuencia evita que las actualizaciones se realicen con demasiada frecuencia:
Las llamadas repetidas a navigator.updateAdInterestGroups()
no realizan ninguna acción hasta el límite de frecuencia
(actualmente un día) haya transcurrido. El límite de frecuencia se restablece si
Se vuelve a llamar a navigator.joinAdInterestGroup()
para el mismo grupo de interés owner
y name
.
Actualizaciones automáticas
Todos los grupos de intereses que se cargaron para una subasta se actualizan automáticamente después de que esta finaliza,
sujeta a los mismos límites de frecuencia que las actualizaciones manuales. Para cada propietario con, al menos, un grupo de interés
participa en una subasta, es como si se llamara a navigator.updateAdInterestGroups()
desde un
iframe cuyo origen coincida con ese propietario.
Cómo especificar anuncios para un grupo de interés
Los objetos ads
y adComponents
incluyen una URL para una creatividad de anuncio y, opcionalmente,
que se pueden usar en el momento de la licitación. Por ejemplo:
{
renderUrl: 'https://cdn.example/.../bikeAd1.html',
metadata: bikeAd1metadata // optional
}
¿Cómo ofertan los compradores?
La secuencia de comandos de biddingLogicUrl
proporcionada por el propietario de un grupo de interés debe incluir una generateBid()
.
. Cuando un vendedor de espacio publicitario llama a navigator.runAdAuction()
, generatedBid()
función se llama una vez por cada grupo de interés al que pertenece el navegador, si el interés
propietario del grupo está invitado a ofertar. En otras palabras, se llama a generateBid()
una vez para cada candidato.
anuncio. El vendedor proporciona una propiedad decisionLogicUrl
en el parámetro de configuración de la subasta que se pasó.
a navigator.runAdAuction()
. El código de esta URL debe incluir una función scoreAd()
, que es
ejecutada para cada ofertante en la subasta, para calificar cada una de las ofertas que devuelve generateBid()
.
La secuencia de comandos en biddingLogicUrl
que proporciona un comprador de espacio publicitario debe incluir una función generateBid()
.
Esta función se llama una vez para cada anuncio candidato. runAdAuction()
Revisa individualmente cada anuncio, junto con la oferta y los metadatos asociados, y luego asigna al anuncio un
puntuación de deseabilidad numérica.
generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
...
return {
ad: adObject,
bid: bidValue,
render: renderUrl,
adComponents: [adComponentRenderUrl1, ...]
};
}
generateBid()
toma los siguientes argumentos:
interestGroup
de
El objeto que el comprador del anuncio pasa ajoinAdInterestGroup()
. (El grupo de interés se puede actualizar a través dedailyUpdateUrl
).auctionSignals
de
Una propiedad del argumento auction config que se pasa alnavigator.runAdAuction()
por el vendedor del espacio publicitario Proporciona información sobre el contexto de la página (como el tamaño del anuncio y el ID del publicador), el tipo de subasta (primer o segundo precio) y otros metadatos.perBuyerSignals
de
Al igual que conauctionSignals
, una propiedad de la configuración de subasta el argumento que pasó el vendedor anavigator.runAdAuction()
. Esto puede proporcionar contexto indicadores del servidor del comprador sobre la página, si el vendedor es una SSP que realiza una llamada de licitación en tiempo real a los servidores del comprador y canaliza la respuesta, o si el publicador se comunica directamente con el servidor del comprador. Si es así, tal vez sea conveniente que el comprador verifique firma de esos indicadores dentro de generateBid() como protección contra la manipulación.trustedBiddingSignals
de
Un objeto cuyas claves son eltrustedBiddingSignalsKeys
de la grupo de interés y cuyos valores se muestran en la solicitudtrustedBiddingSignals
.browserSignals
de
Un objeto construido por el navegador, que puede incluir información sobre la página contexto (como elhostname
de la página actual, que el vendedor podría falsificar) y datos para el grupo de interés (como un registro de cuándo el grupo ganó una subasta anteriormente, para permitir limitación de frecuencia en el dispositivo).
El objeto browserSignals
tiene las siguientes propiedades:
{
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). */
}
Para calcular un valor de bid
, el código en generateBid()
puede usar las propiedades de la función
parámetros. Por ejemplo:
function generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
return {
...
bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
...
}
}
generateBid()
muestra un objeto con cuatro propiedades:
ad
de
Metadatos arbitrarios sobre el anuncio, como información que el vendedor espera obtener sobre esta oferta o creatividad de anuncios. El vendedor](/privacy-sandbox/resources/glossary#ssp) usa esta información en la subasta y en la decisión que toma creatividad de anuncios. El vendedor usa esta información en su subasta y decisión lógica.bid
de
Es una oferta numérica que ingresará en la subasta. El vendedor debe estar en posición de comparar. ofertas de diferentes compradores; por lo tanto, las ofertas deben estar en alguna unidad elegida por el vendedor (por ejemplo, "USD por mil"). Si la oferta es cero o negativa, este grupo de interés no participará del del vendedor en absoluto. Con este mecanismo, el comprador puede implementar reglas del anunciante en las que se indique dónde sus anuncios pueden aparecer o no.render
de
Es una URL o una lista de URLs que se usará para renderizar la creatividad si esta oferta gana la subasta. (consulte la sección Anuncios compuestos por varias partes). en la explicación de la API). El valor debe coincidir con elrenderUrl
de uno de los los anuncios definidos para el grupo de interés.adComponents
de
Una lista opcional de hasta 20 componentes para anuncios compuestos por varios elementos, tomado de la propiedadadComponents
del argumento del grupo de interés pasado anavigator.joinAdInterestGroup()
.
Solicitar a un navegador que abandone un grupo de interés
El propietario del grupo de interés puede solicitar que se quite un navegador de un grupo de interés. En otro palabras, se solicita al navegador que elimine el grupo de interés de la lista de los grupos a los que pertenece.
navigator.leaveAdInterestGroup({
owner: 'https://dsp.example',
name: 'custom-bikes'
});
Si un usuario vuelve al sitio donde se le pidió al navegador que agregara un grupo de interés, el propietario del grupo de interés
Puedes llamar a la función navigator.leaveAdInterestGroup()
para solicitar al navegador que quite el grupo de interés.
El código de un anuncio también puede llamar a esta función para su grupo de interés.
3. El usuario visita un sitio que vende espacio publicitario.
![Ilustración que muestra a una persona visitando un sitio web de noticias en un navegador con su laptop. El sitio
tiene un espacio publicitario vacío.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-per-113f3bd8c69da.png?authuser=8&hl=es)
Más tarde, el usuario visita un sitio que vende espacio publicitario; en este ejemplo, un sitio web de noticias. El sitio tiene inventario de anuncios, el cual vende de forma programática con ofertas en tiempo real.
4. Se ejecuta una subasta de anuncios en el navegador.
![Ilustración que muestra a una persona mirando un sitio web de noticias en un navegador con su laptop. Un anuncio
subasta con la API de Protected Audience en curso.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-per-43194d760936b.png?authuser=8&hl=es)
Sección de explicación: Los vendedores ejecutan subastas integradas en el dispositivo
Es probable que la SSP del publicador ejecute la subasta de anuncios, o el mismo publicador. El propósito de la subasta es seleccionar el anuncio más adecuado para una espacio publicitario disponible en la página actual. La subasta tiene en cuenta los grupos de interés navegador y los datos de los compradores de espacios publicitarios y los vendedores de los servicios de par clave-valor.
El vendedor del espacio publicitario realiza una solicitud al navegador del usuario para iniciar una subasta de anuncios llamando
navigator.runAdAuction()
Por ejemplo:
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()
muestra una promesa que se resuelve en un URN (urn:uuid:<something>
) que representa la
resultado de la subasta de anuncios. El navegador solo puede decodificarlo cuando se pasa a un marco vallado.
para la renderización: La página del publicador no puede inspeccionar el anuncio ganador.
La secuencia de comandos decisionLogicUrl
considera cada anuncio individual, junto con su oferta y
metadatos, uno a la vez, y luego se le asigna una puntuación de deseabilidad numérica.
auctionConfig
propiedades
Propiedad | Obligatorio | Ejemplo | Rol |
---|---|---|---|
seller |
Obligatorio | 'https://ssp.example' |
Origen del vendedor |
decisionLogicUrl |
Obligatorio | 'https://ssp.example/auction-decision-logic.js' |
URL del worklet de subasta en JavaScript. |
trustedScoringSignalsUrl |
Opcional | 'https://ssp.example/scoring-signals' |
URL del servidor de confianza del vendedor. |
interestGroupBuyers* |
Obligatorio | ['https://dsp.example', 'https://buyer2.example', ...] |
Orígenes de todos los propietarios de grupos de interés a los que se les pidió ofertar en la subasta. |
auctionSignals |
Opcional | {...} |
Información del vendedor sobre el contexto de la página, el tipo de subasta, etcétera |
sellerSignals |
Opcional | {...} |
Información basada en la configuración del publicador, la realización de una solicitud de anuncio contextual, etcétera |
sellerTimeout |
Opcional | 100 |
Tiempo de ejecución máximo (ms) de la secuencia de comandos scoreAd() del vendedor. |
perBuyerSignals |
Opcional | {'https://dsp.example': {...}, |
Indicadores contextuales sobre la página de cada comprador específico desde su servidor |
perBuyerTimeouts |
Opcional | 50 |
Tiempo de ejecución máximo (ms) de las secuencias de comandos generateBid() de un comprador específico. |
componentAuctions |
Opcional | [{'seller': 'https://www.some-other-ssp.com', |
Configuraciones adicionales para las subastas de componentes. |
* El vendedor puede especificar interestGroupBuyers: '*'
para permitir que todos los grupos de interés oferten.
Los anuncios se aceptan o rechazan según criterios distintos de la inclusión del propietario del grupo de interés.
Por ejemplo, el vendedor puede revisar las creatividades de los anuncios para confirmar el cumplimiento de sus políticas.
** No se admite additionalBids
en la implementación actual de Protected Audience. Lea la subasta
Participantes en la
Explicación de Protected Audience para obtener más información.
¿Cómo se seleccionan los anuncios?
El código en decisionLogicUrl
(una propiedad del objeto de configuración de la subasta que se pasa a
runAdAuction()
) debe incluir una función scoreAd()
. Se publica una vez para cada anuncio
para determinar su conveniencia.
scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
...
return desirabilityScoreForThisAd;
}
scoreAd()
toma los siguientes argumentos:
adMetadata
de
Metadatos arbitrarios proporcionados por el comprador.bid
de
Es un valor numérico de la oferta.auctionConfig
de
El objeto de configuración de la subasta que se pasa anavigator.runAdAuction()
.trustedScoringSignals
de
Valores recuperados en el momento de la subasta del servidor de confianza del vendedor que representa la opinión del vendedor acerca del anuncio.browserSignals
de
Un objeto construido por el navegador, incluida la información que este sabe y cuál es la secuencia de comandos de subasta del vendedor que podría querer verificar:
{
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. */
}
Antes de que comience una subasta, el vendedor encuentra el mejor anuncio contextual para el espacio publicitario disponible. Parte de
su lógica de scoreAd()
es rechazar cualquier anuncio que no pueda superar al ganador contextual.
5. El vendedor y los compradores participantes reciben datos en tiempo real del servicio de par clave-valor.
![Ilustración que muestra a una persona mirando un sitio web de noticias en un navegador con su laptop. Un anuncio
una subasta con la API de Protected Audience, y un participante obtiene datos del servicio de par clave-valor.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-per-d80920d3014fe.png?authuser=8&hl=es)
Sección de explicación: Recupera datos en tiempo real del servicio de par clave-valor de Protected Audience.
Durante una subasta de anuncios, el vendedor del espacio publicitario puede obtener datos en tiempo real sobre creatividades de anuncios específicas. Para ello,
realizar una solicitud a un servicio de par clave-valor con la propiedad trustedScoringSignalsUrl
de
Se pasa el argumento de configuración de subasta a navigator.runAdAuction()
, junto con las claves.
de las propiedades renderUrl
de todas las entradas en los campos ads
y adComponents
de todas
grupos de interés en la subasta.
Del mismo modo, un comprador del espacio publicitario puede solicitar datos en tiempo real del servicio de par clave-valor a través de la
Propiedades trustedBiddingSignalsUrl
y trustedBiddingSignalsKeys
del argumento de grupo de interés
pasado a navigator.joinAdInterestGroup()
.
Cuando se llama a runAdAuction()
, el navegador realiza una solicitud al servidor de confianza de cada comprador de anuncios. El
La URL de la solicitud podría verse de la siguiente manera:
https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
- La URL base proviene de
trustedBiddingSignalsUrl
. - El navegador proporciona el
hostname
. - El valor
keys
se obtiene detrustedBiddingSignalsKeys
.
La respuesta a esta solicitud es un objeto JSON que proporciona valores para cada una de las claves.
6. Se muestra el anuncio ganador
![Ilustración que muestra a una persona mirando un sitio web de noticias en un navegador con su laptop. Un anuncio
de una bicicleta (20% de descuento), con un candado arriba para indicar que el anuncio aparece en una
marco vallado.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-per-54028ccec709f.png?authuser=8&hl=es)
Sección de explicación: Los navegadores renderizan el anuncio ganador
Como se describió anteriormente, la promesa que muestra runAdAuction()
se resuelve en un URN.
que se pasa a un marco vallado para su renderización, y el sitio muestra
el anuncio ganador.
7. Se informa el resultado de la subasta
Sección de explicación: Informes a nivel del evento (por ahora)
El vendedor informa el resultado
Sección de explicación: Informes de vendedores sobre el procesamiento
El JavaScript del vendedor que se proporcionó en decisionLogicUrl
(que también proporcionó scoreAd()
) puede
incluir una función reportResult()
para informar el resultado de la subasta.
reportResult(auctionConfig, browserSignals) {
...
return signalsForWinner;
}
Los argumentos que se pasan a esta función son los siguientes:
auctionConfig
de
El objeto de configuración de la subasta que se pasa anavigator.runAdAuction()
.browserSignals
Un objeto construido por el navegador que proporciona información sobre la subasta. Por ejemplo:{ 'topWindowHostname': 'publisher.example', 'interestGroupOwner': 'https://dsp.example', 'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn', 'bid:' <bidValue>, 'desirability': <winningAdScore> }
El valor que se muestra de esta función se usa como el argumento sellerSignals
para el valor del ofertante ganador
Función reportWin()
.
Resultado de los informes del ofertante ganador
Sección de explicación: Informes de compradores sobre el procesamiento y los eventos de anuncios
El JavaScript del ofertante ganador (que también proporcionó generateBid()
) puede incluir una
Función reportWin()
para informar el resultado de la subasta.
reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
...
}
Los argumentos que se pasan a esta función son los siguientes:
auctionSignals
yperBuyerSignals
Se pasan los mismos valores agenerateBid()
para el ofertante ganador.sellerSignals
de
El valor que se muestra dereportResult()
, que le da al vendedor la oportunidad de pasar información al comprador.browserSignals
de
Un objeto construido por el navegador que proporciona información sobre la subasta. Por ejemplo:{ 'topWindowHostname': 'publisher.example', 'seller': 'https://ssp.example', 'interestGroupOwner': 'https://dsp.example', 'interestGroupName': 'custom-bikes', 'renderUrl': 'https://cdn.example/winning-creative.wbn', 'bid:' <bidValue> }
Implementación de informes de pérdida/adquisición temporales
Hay dos métodos disponibles temporalmente en Chrome para los informes de subastas:
forDebuggingOnly.reportAdAuctionLoss()
forDebuggingOnly.reportAdAuctionWin()
Cada uno de estos métodos tiene un solo argumento: una URL para recuperar después de que se complete la subasta. Pueden
Se llamará varias veces, en scoreAd()
y generateBid()
, con diferentes argumentos de URL.
Chrome solo envía informes de pérdida/adquisición de depuración cuando se completa una subasta. Si se trata de una subasta cancelados (por ejemplo, debido a una nueva navegación), no se generarán informes.
Estos métodos están disponibles de forma predeterminada en Chrome. Para poder probar los métodos, habilita todas las APIs de privacidad en los anuncios que se encuentran en chrome://settings/adPrivacy
. Si usas Chrome con marcas de línea de comandos para habilitar Protected Audience, deberás hacer lo siguiente:
habilita explícitamente los métodos incluyendo la marca BiddingAndScoringDebugReportingAPI
. Si el botón
no está habilitada, los métodos seguirán estando disponibles, pero no hará nada.
8. Se registra un clic en el anuncio
![Ilustración que muestra
una persona haciendo clic en un anuncio de una bicicleta, dentro de un marco cercado, en un sitio web de noticias, con un informe
que se envían al vendedor y a los compradores.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-showing-p-0332a635e2724.png?authuser=8&hl=es)
Se registra un clic en un anuncio renderizado en un marco vallado. Para obtener más información sobre cómo podría funcionar, consulta Informes de anuncios de marcos vallados.
En el siguiente diagrama, se describe cada etapa de una subasta de anuncios de Protected Audience:
![Ilustración que proporciona una descripción general de cada etapa de una subasta de anuncios de Protected Audience](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/blog/illustration-providing-fda431ab192ee.png?authuser=8&hl=es)
¿Cuál es la diferencia entre Protected Audience y TURTLEDOVE?
Protected Audience es el primer experimento que se implementa en Chromium dentro de la familia de propuestas TURTLEDOVE.
Protected Audience sigue los principios de alto nivel de TURTLEDOVE. Parte de la publicidad en línea se basa en mostrar un anuncio a un usuario potencialmente interesado que ya interactuó con el anunciante o la red de publicidad. Históricamente, el anunciante reconoce a una persona específica mientras navega por los sitios web, una preocupación de privacidad principal en la Web actual.
El objetivo de TURTLEDOVE es ofrecer una nueva API para abordar este caso de uso y, al mismo tiempo, ofrecer algunos avances clave en materia de privacidad:
- El navegador, no el anunciante, conserva la información sobre lo que el anunciante considera que que le interesa a la persona.
- Los anunciantes pueden publicar anuncios en función de un interés, pero no pueden combinarlo con otro. información sobre una persona, en particular, quién es o qué página visita.
Protected Audience surgió de TURTLEDOVE y una colección de propuestas relacionadas de modificaciones para brindar un mejor servicio a los desarrolladores que usarían la API:
- En SPARROW: Criteo propuso agregar un Modelo de servicio (“Gatekeeper”) que se ejecuta en un entorno de ejecución confiable (TEE). Protected Audience incluye un uso más limitado de los TEE para la búsqueda de datos en tiempo real y los informes agregados.
- TERN de NextRoll y Magnite PARRROT describían los distintos roles que tenían los compradores y vendedores en la subasta integrada en el dispositivo. El flujo de ofertas y puntuación de anuncios de Protected Audience se basa en este trabajo.
- los objetivos basados en los resultados y TURTLEDOVE a nivel del producto Las modificaciones mejoraron el modelo de anonimato y las capacidades de personalización de la subasta integrada en el dispositivo.
- PARAKEET es Propuesta de Microsoft para un servicio de anuncios similar a TURTLEDOVE que se basa en un servidor proxy que se ejecuta en un TEE entre el navegador y los proveedores de AdTech para anonimizar las solicitudes de anuncios y aplicar propiedades. Protected Audience no adoptó este modelo de proxy. Incorporamos las APIs de JavaScript para PARAKEET y Protected Audience en la alineación, en apoyo del trabajo futuro para combinar aún más los mejores características de ambas propuestas.
Protected Audience aún no impide que la red de publicidad de un sitio web sepa qué anuncios ve una persona. Esperamos para modificar la API para que sea más privada con el paso del tiempo.
¿Qué configuración del navegador está disponible?
Para ajustar su participación en las pruebas de Privacy Sandbox en Chrome, los usuarios pueden habilitar o inhabilitar
la configuración de nivel superior en chrome://settings/adPrivacy
. Durante las pruebas iniciales,
usar este parámetro de configuración de Privacy Sandbox de alto nivel para inhabilitar Protected Audience. Chrome planea permitir
usuarios vean y administren la lista de grupos de intereses a los que se agregaron en la Web
los sitios que visitaron. Al igual que con las tecnologías de Privacy Sandbox, la configuración del usuario puede
y evolucionar con la retroalimentación
de los usuarios, los reguladores y otras personas.
Continuaremos actualizando los parámetros de configuración disponibles en Chrome a medida que avance la propuesta de Protected Audience, según sobre las pruebas y los comentarios. En el futuro, planeamos ofrecer parámetros de configuración más detallados para administrar Protected Audience y los datos asociados.
Los llamadores de API no pueden acceder a la membresía de grupo cuando los usuarios navegan en modo Incógnito y la membresía está se quita cuando los usuarios borran los datos del sitio.
Interactúa y comparte tus comentarios
- GitHub: Lee la propuesta. plantear preguntas y seguir el debate.
- W3C: Analizar casos de uso del sector en el módulo Cómo mejorar el negocio de la publicidad web Grupo.
- Asistencia para desarrolladores: Haz preguntas y únete a debates en el Repo de asistencia para desarrolladores de Privacy Sandbox.
- Lista de distribución de FLEDGE: fledge-api-announce proporciona anuncios y actualizaciones sobre la API.
- Únete a las llamadas programadas de Protected Audience (cada segunda semana). Todos son bienvenidos. Para participar, primero asegúrate de unirte al WICG. Puedes participar activamente o simplemente escuchar.
- Usa el formulario de comentarios de Privacy Sandbox para compartir comentarios de forma privada con el equipo de Chrome fuera de los foros públicos.
Obtenga asistencia
Para hacer preguntas sobre tu implementación, sobre la demostración o la documentación, haz lo siguiente:
- Abrir un nuevo problema en el repositorio privacy-sandbox-dev-support. Asegúrate de seleccionar la plantilla de problemas de Protected Audience.
- Informa un problema en el repositorio del código de demostración en GitHub.
- Si tienes preguntas más generales sobre cómo abordar tus casos de uso con la API, informar un problema en el repositorio de propuestas.
Para errores y problemas con la implementación de la API de Protected Audience en Chrome, haz lo siguiente: * Ver problemas existentes informados para la API. * Informa un problema nuevo en crbug.com/new.
Mantente al día
- Para recibir notificaciones de cambios de estado en la API, únete a la lista de distribución de desarrolladores.
- Para seguir de cerca todos los debates en curso sobre la API, haz clic en el botón Watch en la página de propuestas de GitHub. Esto requiere que tengas o crees un repositorio de GitHub cuenta de servicio.
- Para recibir actualizaciones generales sobre Privacy Sandbox, suscríbete al feed RSS [Progreso en Privacy Sandbox Sandbox].
Más información
- API de Protected Audience: Descripción general menos técnica de la propuesta.
- Demostración de Protected Audience: Explicación de una implementación básica de Protected Audience.
- El video de demostración de Protected Audience: se explica el código de demostración y se muestra cómo usar las Herramientas para desarrolladores de Chrome para la depuración de Protected Audience.
- Explicación técnica de la API de Protected Audience
- Profundización en Privacy Sandbox
- Intención de crear un prototipo
Foto de Ray Hennessy en Unsplash.