Qual é o público deste artigo?
Esta postagem é uma referência técnica à iteração atual da API Protected Audience experimental.
A API Protected Audience é uma visão geral menos técnica da proposta, e também tem um glossário.
A demonstração da Protected Audience apresenta um tutorial de um FLEDGE básico implantação do Google Workspace.
Vídeo de demonstração da Protected Audience explica como o código de demonstração funciona e mostra como usar o Chrome DevTools para depuração da Protected Audience.
O que é a API Protected Audience?
A API Protected Audience é uma proposta do Sandbox de privacidade a ser veiculada remarketing e públicos-alvo personalizados, criados para que não possam ser usados por o rastreamento do comportamento de navegação do usuário em sites. A API permite leilões no dispositivo navegador, para escolher anúncios relevantes para sites que o usuário já visitou.
A API Protected Audience foi o primeiro experimento implementado no Chromium nos TURTLEDOVE de propostas.
O diagrama abaixo fornece uma visão geral do ciclo de vida do FLEDGE:
Como posso testar a API Protected Audience?
Demonstração da API Protected Audience
Um tutorial de uma implantação básica da API Protected Audience nos sites do anunciante e do editor está disponível em protected-audience-demo.web.app.
O vídeo de demonstração explica como o código de demonstração funciona e mostra como usar o Chrome DevTools para depuração da Protected Audience.
Participe de um teste de origem da API Protected Audience
Um teste de origem de relevância e medição do Sandbox de privacidade foi disponibilizadas na versão Beta 101.0.4951.26 do Chrome e versões mais recentes em computadores para a API Protected Audience, Tópicos APIs Attribution Reporting.
Para participar, registre-se para receber um token de teste de origem.
Depois de se inscrever no teste, use a API Protected Audience JavaScript nas páginas. que forneçam um token de teste válido: por exemplo, para pedir que o navegador participe de um ou mais grupos de interesse; e fazer um leilão de anúncios para selecionar e exibir um anúncio.
A demonstração da Protected Audience oferece um exemplo básico de uma implantação completa da Protected Audience.
Forneça um token de teste para cada página em que você quer executar o código da API Protected Audience:
Como uma metatag em <head>:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
Como um cabeçalho HTTP:
Origin-Trial: TOKEN_GOES_HERE
Ao fornecer um token de maneira programática:
const otMeta = document.createElement('meta'); otMeta.httpEquiv = 'origin-trial'; otMeta.content = 'TOKEN_GOES_HERE'; document.head.append(otMeta);
Um iframe que executa o código da API Protected Audience, como navigator.joinAdInterestGroup()
.
por um proprietário de grupo de interesse, precisará fornecer um token que corresponda à sua origem.
Proposta de detalhes do teste de origem do primeiro público protegido fornece mais detalhes sobre os objetivos do primeiro teste e explica quais recursos são compatíveis.
Testar esta API
Você pode testar a API Protected Audience para um único usuário no Chrome Beta 101.0.4951.26 e versões mais recentes no computador:
- Ativando todas as APIs de privacidade de anúncios em
chrome://settings/adPrivacy
- Definindo sinalizações na linha de comando.
Renderizar anúncios em iframes ou frames delimitados
Os anúncios podem ser renderizados em <iframe>
ou <fencedframe>
.
dependendo das sinalizações definidas.
Para usar <fencedframe>
na renderização de anúncios:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames
Para usar <iframe>
na renderização de anúncios:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames
Inclua a flag BiddingAndScoringDebugReportingAPI
para ativar os métodos temporários de geração de relatórios de perda/vitória de depuração.
Executar o Chromium com flags explica como definir sinalizações ao executar o Google Chrome e outros navegadores baseados no Chromium a partir do comando linha A lista completa de sinalizações da API Protected Audience está disponível em Pesquisa de código do Chromium.
Quais recursos são compatíveis com a versão mais recente do Chrome?
A API Protected Audience será disponibilizada por trás das flags de recursos do Chromium como uma das primeiras edições. para testar os seguintes recursos da proposta da API Protected Audience:
- Grupos de interesse: armazenados pelo navegador, com metadados associados para configurar lances de anúncios. e renderização.
- Lances no dispositivo por compradores (DSP ou anunciante): com base em indicadores e grupos de interesse armazenados do vendedor.
- Seleção de anúncios no dispositivo pelo vendedor (SSP ou editor): com base nos lances de leilão e metadados dos compradores.
- Renderização de anúncios em uma versão temporariamente relaxada de Fenced Frames: com acesso à rede e geração de registros permitida para renderização de anúncios.
A explicação sobre a API fornece mais detalhes suporte a atributos e restrições.
Permissões do grupo de interesse
O padrão na implementação atual da API Protected Audience é permitir chamar joinAdInterestGroup()
usando
em qualquer lugar da página, até mesmo de iframes de vários domínios. No futuro, quando os proprietários de sites tiverem tempo
ajustar as políticas de permissões de iframe entre domínios, o plano é proibir chamadas de
de vários domínios, conforme a explicação.
Serviço de chave-valor
Como parte de um leilão de anúncios da API Protected Audience, o navegador pode acessar um serviço de chave-valor que retorna pares de chave-valor simples para fornecer informações ao comprador de anúncios, como o orçamento da campanha. a proposta da API Protected Audience exige que esse servidor "não execute nenhum registro em nível de evento e não tenha outros efeitos colaterais com base solicitações".
O código de serviço de chave-valor da API Protected Audience agora está disponível em um repositório do GitHub do Sandbox de privacidade (link em inglês). Esse serviço pode ser usado por desenvolvedores do Chrome e do Android. Confira o anúncio no blog (em inglês) para saber mais sobre a atualização do status. Saiba mais sobre o serviço de chave-valor da API Protected Audience na explicação da API e na explicação do modelo de confiança.
Para o teste inicial, é usado o modelo "traga seu próprio servidor". A longo prazo, as adtechs vão precisar usar os serviços de chave-valor de público-alvo protegido de código aberto em execução em ambientes de execução confiável para recuperar dados em tempo real.
Para garantir que o ecossistema tenha tempo suficiente para testes, não esperamos exigir o uso dos serviços de chave-valor de código aberto ou TEEs até algum tempo após a descontinuação dos cookies de terceiros. Antes dessa transição, vamos enviar avisos para os desenvolvedores começarem os testes e a adoção.
Detectar suporte a recursos
Antes de usar a API, verifique se ela é compatível com o navegador e está disponível no 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');
Como posso desativar a API Protected Audience?
É possível bloquear o acesso à API Protected Audience como proprietário do site ou como usuário individual.
Como os sites podem controlar o acesso?
A API Protected Audience vai exigir que os sites definam uma política de permissões. para que a funcionalidade da API Protected Audience fique disponível. Isso garante que terceiros arbitrários não possam usar a API sem a permissão conhecimento. No entanto, para facilitar o teste durante o primeiro teste de origem, esse requisito é isento por padrão. Os sites que quiserem desativar explicitamente a funcionalidade da API Protected Audience durante o período de teste podem usar a política de permissões relevante para bloquear o acesso.
Há duas políticas de permissões da API Protected Audience que podem ser definidas de forma independente:
- O
join-ad-interest-group
ativa/desativa a funcionalidade para adicionar um navegador aos grupos de interesse. - O
run-ad-auction
ativa/desativa a funcionalidade para fazer um leilão no dispositivo.
O acesso às APIs Protected Audience pode ser desativado completamente em contextos próprios especificando o seguinte: em um cabeçalho de resposta HTTP:
Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()
É possível desativar o uso das APIs em um iframe adicionando o seguinte atributo allow
a um
Elemento iframe:
<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>
A seção Permissões propostas de permissão de teste de origem do primeiro público-alvo protegido oferece mais detalhes.
Desativação do usuário
Um usuário pode bloquear o acesso à API Protected Audience e outros recursos do Sandbox de privacidade usando qualquer um mecanismos a seguir:
- Desative os testes do Sandbox de privacidade nas Configurações do Chrome: Configurações >
Segurança e privacidade > Sandbox de privacidade. Ele também pode ser acessado em
chrome://settings/adPrivacy
. - Desative cookies de terceiros nas configurações do Chrome: Configurações > Segurança e privacidade.
- Defina Cookies e outros dados do site como "Bloquear cookies de terceiros" ou "Bloquear todos os cookies"
de
chrome://settings/cookies
. - Usar o modo de navegação anônima.
A explicação da API Protected Audience oferece mais detalhes sobre os elementos de design da API e descreve como ela busca atender às metas de privacidade.
Depurar worklets da API Protected Audience
No Chrome Canary 98.0.4718.0, é possível depurar os worklets da Protected Audience no Chrome DevTools.
A primeira etapa é definir pontos de interrupção com uma nova categoria no painel Event Listener Breakpoints no painel Origens.
Quando um ponto de interrupção é acionado, a execução é pausada antes da primeira instrução no nível superior do script do worklet. Você pode usar pontos de interrupção regulares ou comandos de etapa para chegar à página de lances/pontuação/relatórios função em si.
Os scripts de worklet ativos também vão aparecer no painel Threads.
Como alguns worklets podem ser executados em paralelo, várias linhas de execução podem acabar na fase "pausada". estado lá; você pode usar a lista de linhas de execução para alternar entre as linhas e retomá-las ou inspecioná-las mais detalhadamente apropriados.
Observar eventos da API Protected Audience
No painel Application do Chrome DevTools, é possível observar o grupo de interesse e o leilão da Protected Audience eventos.
Acesse o site de compras de demonstração da API Protected Audience.
em um navegador com a API Protected Audience ativada, o DevTools vai mostrar informações sobre o evento join
.
Acesse o site do editor de demonstração da API Protected Audience
em um navegador com a API Protected Audience ativada, o DevTools mostra informações sobre os eventos bid
e win
.
Como a API Protected Audience funciona?
Neste exemplo, um usuário navega no site de uma montadora de bicicletas personalizada e depois visita um site de notícias e recebe um anúncio de uma bicicleta nova do fabricante.
1. Um usuário visita o site de um anunciante
Imagine que um usuário visite o site de um fabricante de bicicletas personalizada (o anunciante do neste exemplo) e passa algum tempo na página do produto de uma bicicleta feita de aço artesanal. Com isso, fabricante de bicicletas com uma oportunidade de remarketing.
2. O navegador do usuário precisa adicionar um grupo de interesse
Seção de explicação:Os navegadores registram grupos de interesse
A plataforma de demanda (DSP) do anunciante (ou o anunciante
chama navigator.joinAdInterestGroup()
para pedir que o navegador adicione um grupo de interesse ao
lista de grupos de que o navegador é membro. Neste exemplo, o grupo é chamado de custom-bikes
.
O proprietário é dsp.example
. O proprietário do grupo de interesse (neste caso, a DSP) será um
comprador no leilão de anúncios descrito na etapa 4.
A associação ao grupo de interesse é armazenada pelo navegador, no dispositivo do usuário e não é compartilhada com o
fornecedor do navegador ou de qualquer outra pessoa.
O app joinAdInterestGroup()
precisa da permissão de:
- o site que está sendo visitado;
- O proprietário do grupo de interesse
Por exemplo: não deve ser possível para malicious.example
chamar
joinAdInterestGroup()
com dsp.example
como proprietário sem a permissão de
dsp.example
Permissão do site que está sendo visitado
Mesma origem: por padrão, a permissão é concedida implicitamente para chamadas joinAdInterestGroup()
de
tenha a mesma origem do site visitado, ou seja, da mesma origem do frame de nível superior do
página atual. Os sites podem usar um cabeçalho da política de permissões da API Protected Audience
Diretiva join-ad-interest-group
para desativar chamadas joinAdInterestGroup()
.
Origem cruzada: chamar joinAdInterestGroup()
de origens diferentes das atuais
só poderá ter êxito se o site visitado tiver definido uma política de permissões que permita chamadas para
joinAdInterestGroup()
de iframes de origem cruzada.
Permissão do proprietário do grupo de interesse
A permissão do proprietário do grupo de interesse é concedida implicitamente ao chamar joinAdInterestGroup()
de um iframe com a mesma origem do proprietário do grupo de interesse. Por exemplo, uma dsp.example
O iframe pode chamar joinAdInterestGroup()
para grupos de interesse de dsp.example
.
A proposta é que joinAdInterestGroup()
possa ser executado em uma página ou iframe no domínio do proprietário.
ser delegadas a outros domínios fornecidos usando uma lista em um URL .well-known
.
Como usar o Navigator.joinAdInterestGroup()
Aqui está um exemplo de como a API pode ser usada:
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);
O objeto interestGroup
transmitido para a função não pode ter mais de 50 kiB de tamanho, caso contrário o
falhará. O segundo parâmetro especifica a duração do grupo de interesse, com um limite de 30
dias. Chamadas sucessivas substituem os valores armazenados anteriormente.
Propriedades do grupo de interesse
Propriedade | Obrigatório | Exemplo | Papel |
---|---|---|---|
owner |
Obrigatório | 'https://dsp.example' |
Origem do proprietário do grupo de interesse. |
name |
Obrigatório | 'custom-bikes' |
Nome do grupo de interesse. |
biddingLogicUrl ** |
Opcional* | 'https://dsp.example/bid/custom-bikes/bid.js' |
URL para lances em JavaScript executado no worklet. |
biddingWasmHelperUrl ** |
Opcional* | 'https://dsp.example/bid/custom-bikes/bid.wasm' |
URL do código do WebAssembly gerado por biddingLogicUrl . |
dailyUpdateUrl ** |
Opcional | 'https://dsp.example/bid/custom-bikes/update' |
URL que retorna JSON para atualizar os atributos do grupo de interesse. Consulte Atualizar o grupo de interesse. |
trustedBiddingSignalsUrl ** |
Opcional | 'https://dsp.example/trusted/bidding-signals' |
URL de base para solicitações de chave-valor ao servidor confiável do bidder. |
trustedBiddingSignalsKeys |
Opcional | ['key1', 'key2' ...] |
Chaves para solicitações ao servidor confiável de chave-valor. |
userBiddingSignals |
Opcional | {...} |
Metadados adicionais que o proprietário pode usar durante os lances. |
ads |
Opcional* | [bikeAd1, bikeAd2, bikeAd3] |
Anúncios que podem ser renderizados para este grupo de interesse. |
adComponents |
Opcional | [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] |
Componentes de anúncios compostos por várias partes. |
* Todas as propriedades são opcionais, exceto owner
e name
. biddingLogicUrl
e ads
são opcionais, mas obrigatórias para participar de um leilão. Pode haver casos de uso para
criar um grupo de interesse sem essas propriedades. Por exemplo, o proprietário de um grupo de interesse
desejar adicionar um navegador a um grupo de interesse para uma campanha que ainda não está em exibição ou para alguns
outro uso futuro ou eles podem ter ficado temporariamente sem orçamento de publicidade.
** Os URLs biddingLogicUrl
, biddingWasmHelperUrl
, dailyUpdateUrl
e trustedBiddingSignalsUrl
precisam ter a mesma origem que o proprietário. Os URLs ads
e adComponents
não têm essa restrição.
Atualizar os atributos do grupo de interesse
dailyUpdateUrl
especifica um servidor da Web que retorna JSON que define as propriedades do grupo de interesse.
que corresponde ao objeto do grupo de interesse transmitido para navigator.joinAdInterestGroup()
. Isso
fornece um mecanismo para o proprietário do grupo atualizar periodicamente os atributos da
grupo de interesse. Na implementação atual,
os seguintes atributos podem ser alterados:
biddingLogicUrl
biddingWasmHelperUrl
trustedBiddingSignalsUrl
trustedBiddingSignalsKeys
ads
priority
Qualquer campo não especificado no JSON não será substituído. Somente os campos especificados no JSON
atualizado, enquanto chamar navigator.joinAdInterestGroup()
substitui qualquer grupo de interesse existente.
As atualizações são feitas da melhor maneira possível e podem falhar nas seguintes condições:
- Tempo limite da solicitação de rede (atualmente 30 segundos).
- Outra falha de rede.
- Falha na análise de JSON.
As atualizações também podem ser canceladas se muito tempo contíguo tiver sido gasto atualizando, embora isso não impõe nenhuma limitação de taxa em atualizações canceladas (restantes). As atualizações têm limitação de taxa para um no máximo um por dia. As atualizações que falham devido a erros de rede são repetidas após uma hora. as atualizações que falham devido à desconexão da Internet são repetidas imediatamente após a reconexão.
Atualizações manuais
As atualizações em grupos de interesse pertencentes à origem do frame atual podem ser acionadas manualmente por
navigator.updateAdInterestGroups()
: A limitação de taxa impede que as atualizações aconteçam com muita frequência:
Chamadas repetidas para navigator.updateAdInterestGroups()
não fazem nada até que a limitação de taxa
(atualmente um dia) tiver passado. O limite de taxa será redefinido se
navigator.joinAdInterestGroup()
é chamado novamente para o mesmo grupo de interesse owner
e name
.
Atualizações automáticas
Todos os grupos de interesse carregados para um leilão são atualizados automaticamente após a conclusão dele.
sujeitos aos mesmos limites de taxa das atualizações manuais. Para cada proprietário com pelo menos um grupo de interesse
participa de um leilão, é como se navigator.updateAdInterestGroups()
fosse chamado de um
iframe cuja origem corresponde ao proprietário.
Especificar anúncios para um grupo de interesse
Os objetos ads
e adComponents
incluem um URL para um criativo de anúncio e, opcionalmente, valores arbitrários
metadados que podem ser usados no momento dos lances. Exemplo:
{
renderUrl: 'https://cdn.example/.../bikeAd1.html',
metadata: bikeAd1metadata // optional
}
Como os compradores dão lances?
O script em biddingLogicUrl
fornecido pelo proprietário de um grupo de interesse precisa incluir um generateBid()
função. Quando um vendedor de espaço publicitário chama navigator.runAdAuction()
, o generatedBid()
é chamada uma vez para cada um dos grupos de interesse do qual o navegador é membro, se o interesse
o proprietário do grupo foi convidado a fazer um lance. Em outras palavras, generateBid()
é chamado uma vez para cada candidato.
anúncio. O vendedor fornece uma propriedade decisionLogicUrl
no parâmetro de configuração do leilão transmitido.
para navigator.runAdAuction()
. O código neste URL deve incluir uma função scoreAd()
, que é
realizadas para cada bidder no leilão para pontuar cada um dos lances retornados por generateBid()
.
O script em biddingLogicUrl
fornecido por um comprador de espaço publicitário precisa incluir uma função generateBid()
.
Essa função é chamada uma vez para cada anúncio candidato. runAdAuction()
verifica individualmente cada anúncio, juntamente com seu lance e metadados associados, e atribui ao anúncio um
e uma pontuação de desejabilidade numérica.
generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
...
return {
ad: adObject,
bid: bidValue,
render: renderUrl,
adComponents: [adComponentRenderUrl1, ...]
};
}
generateBid()
usa os seguintes argumentos:
interestGroup
e
O objeto transmitido parajoinAdInterestGroup()
pelo comprador de anúncios. O grupo de interesse podem ser atualizados emdailyUpdateUrl
.auctionSignals
e
Uma propriedade do argumento auction config transmitida paranavigator.runAdAuction()
pelo vendedor de espaços publicitários. Fornece informações sobre o contexto da página (como o tamanho do anúncio e o ID do editor), o tipo de leilão (primeiro ou segundo preço) e outros metadados.perBuyerSignals
e
Assim como emauctionSignals
, uma propriedade da configuração do leilão passado paranavigator.runAdAuction()
pelo vendedor. Isso pode fornecer dados contextuais sinais do servidor do comprador sobre a página, se o vendedor for uma SSP que realiza uma chamada de lances em tempo real para os servidores do comprador e canaliza a resposta de volta, ou se o editor entra em contato diretamente com o servidor do comprador. Nesse caso, o comprador pode querer verificar assinatura desses sinais em generateBid() como proteção contra adulterações.trustedBiddingSignals
e
Um objeto cujas chaves são otrustedBiddingSignalsKeys
do grupo de interesse e cujos valores são retornados na solicitaçãotrustedBiddingSignals
.browserSignals
e
Um objeto construído pelo navegador, que pode incluir informações sobre a página contexto (como ohostname
da página atual, que o vendedor poderia falsificar de outra forma) e dados para o próprio grupo de interesse (como um registro de quando o grupo venceu um leilão anteriormente, para permitir limite de frequência no dispositivo).
O objeto browserSignals
tem as seguintes propriedades:
{
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 um valor de bid
, o código em generateBid()
pode usar as propriedades do elemento
parâmetros. Exemplo:
function generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
return {
...
bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
...
}
}
generateBid()
retorna um objeto com quatro propriedades:
ad
e
Metadados arbitrários sobre o anúncio, como informações que o vendedor espera ter acesso a esse lance ou criativo do anúncio. O vendedor](/privacy-sandbox/resources/glossary#ssp) usa essas informações no leilão e na decisão. criativo do anúncio. O vendedor usa essas informações no leilão e na decisão. lógica.bid
e
Um lance numérico que entrará no leilão. O vendedor precisa conseguir fazer comparações de diferentes compradores. Sendo assim, os lances devem estar em alguma unidade escolhida pelo vendedor (por exemplo, "USD por mil"). Se o lance for zero ou negativo, esse grupo de interesse não participará do o leilão do vendedor. Com esse mecanismo, o comprador pode implementar qualquer regra de anunciante para onde seus anúncios podem ou não ser exibidos.render
e
Um URL ou uma lista de URLs que será usado para renderizar o criativo se o lance vencer o leilão. Consulte Anúncios compostos de várias peças na explicação sobre a API. O valor precisa corresponder aorenderUrl
de um dos anúncios definidos para o grupo de interesse.adComponents
e
Uma lista opcional de até 20 componentes para compostos por várias partes, Extraído da propriedadeadComponents
do argumento do grupo de interesse passado paranavigator.joinAdInterestGroup()
.
Pedir para um navegador sair de um grupo de interesse
O proprietário do grupo de interesse pode solicitar que um navegador seja removido de um grupo de interesse. Em outras palavras, o navegador recebe uma solicitação para remover o grupo de interesse da lista de membros.
navigator.leaveAdInterestGroup({
owner: 'https://dsp.example',
name: 'custom-bikes'
});
Se um usuário retornar ao site que solicitou ao navegador a adição de um grupo de interesse, o proprietário do grupo de interesse
pode chamar a função navigator.leaveAdInterestGroup()
para solicitar que o navegador remova o grupo de interesse.
O código de um anúncio também pode chamar essa função para seu grupo de interesse.
3. O usuário visita um site que vende espaço publicitário.
Mais tarde, o usuário visita um site que vende espaço publicitário, neste exemplo, um site de notícias. O site tem inventário de anúncios, que vende de maneira programática usando lances em tempo real.
4. Um leilão de anúncios é realizado no navegador
Seção explicativa: os vendedores realizam leilões no dispositivo
o leilão de anúncios provavelmente será realizado pela SSP do editor; ou pelo próprio editor. O objetivo do leilão é selecionar o anúncio mais apropriado para um único espaço de anúncio disponível na página atual. O leilão considera os grupos de interesse navegador faz parte, além de dados de compradores de espaços publicitários e vendedores dos serviços de chave-valor.
O vendedor do espaço publicitário faz uma solicitação ao navegador do usuário para iniciar um leilão de anúncios chamando
navigator.runAdAuction()
Exemplo:
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()
retorna uma promessa que é resolvida em um URN (urn:uuid:<something>
) que representa o
do leilão de anúncios. Só pode ser decodificado pelo navegador quando transmitido para um frame isolado.
para renderização: a página do editor não pode inspecionar o anúncio vencedor.
O script decisionLogicUrl
considera cada anúncio individual, junto com o lance associado a ele e
metadados, um de cada vez, e atribui a eles uma pontuação de desejabilidade numérica.
auctionConfig
propriedades
Propriedade | Obrigatório | Exemplo | Papel |
---|---|---|---|
seller |
Obrigatório | 'https://ssp.example' |
Origem do vendedor. |
decisionLogicUrl |
Obrigatório | 'https://ssp.example/auction-decision-logic.js' |
URL para JavaScript do worklet de leilão. |
trustedScoringSignalsUrl |
Opcional | 'https://ssp.example/scoring-signals' |
URL do servidor confiável do vendedor. |
interestGroupBuyers* |
Obrigatório | ['https://dsp.example', 'https://buyer2.example', ...] |
Origens de todos os proprietários de grupos de interesse que solicitaram lances no leilão. |
auctionSignals |
Opcional | {...} |
Informações do vendedor sobre o contexto da página, o tipo de leilão etc. |
sellerSignals |
Opcional | {...} |
Informações com base nas configurações do editor, como fazer uma solicitação de anúncio contextual etc. |
sellerTimeout |
Opcional | 100 |
Tempo de execução máximo (ms) do script scoreAd() do vendedor. |
perBuyerSignals |
Opcional | {'https://dsp.example': {...}, |
Indicadores de contexto sobre a página de cada comprador específico do servidor. |
perBuyerTimeouts |
Opcional | 50 |
Tempo de execução máximo (ms) dos scripts generateBid() de um comprador específico. |
componentAuctions |
Opcional | [{'seller': 'https://www.some-other-ssp.com', |
Configurações adicionais para leilões de componentes. |
* O vendedor pode especificar interestGroupBuyers: '*'
para permitir que todos os grupos de interesse deem lances.
Os anúncios são então aceitos ou rejeitados com base em critérios diferentes da inclusão do proprietário do grupo de interesse.
Por exemplo, o vendedor pode revisar criativos de anúncios para confirmar a conformidade com as políticas.
** additionalBids
não é compatível com a implementação atual da API Protected Audience. Leia o leilão
Participantes no
explicação sobre a API Protected Audience para mais informações.
Como os anúncios são selecionados?
O código em decisionLogicUrl
, uma propriedade do objeto de configuração de leilão transmitido para o
runAdAuction()
) precisam incluir uma função scoreAd()
. É executado uma vez para cada anúncio
para determinar sua atratividade.
scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
...
return desirabilityScoreForThisAd;
}
scoreAd()
usa os seguintes argumentos:
adMetadata
e
Metadados arbitrários fornecidos pelo comprador.bid
e
Um valor de lance numérico.auctionConfig
e
O objeto de configuração do leilão transmitido paranavigator.runAdAuction()
.trustedScoringSignals
e
valores recuperados no momento do leilão do servidor confiável do vendedor; que representam a opinião do vendedor sobre o anúncio.browserSignals
e
Um objeto construído pelo navegador, incluindo informações que o navegador sabe e qual script de leilão do vendedor pode 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 do início de um leilão, ele encontra o melhor anúncio contextual para o espaço de anúncio disponível. Parte de
A lógica scoreAd()
é rejeitar qualquer anúncio que não possa vencer o vencedor contextual.
5. O vendedor e os compradores participantes recebem dados em tempo real do serviço de chave-valor.
Seção de explicação:Como buscar dados em tempo real do serviço de chave-valor da API Protected Audience.
Durante um leilão de anúncios, o vendedor do espaço publicitário pode receber dados em tempo real sobre criativos de anúncios específicos
fazer uma solicitação para um serviço de chave-valor usando a propriedade trustedScoringSignalsUrl
de
o argumento de configuração do leilão transmitido para navigator.runAdAuction()
, com as chaves
das propriedades renderUrl
de todas as entradas nos campos ads
e adComponents
de todas
grupos de interesse no leilão.
Da mesma forma, um comprador de espaço publicitário pode solicitar dados em tempo real do serviço de chave-valor usando o método
Propriedades trustedBiddingSignalsUrl
e trustedBiddingSignalsKeys
do argumento do grupo de interesse.
passados para navigator.joinAdInterestGroup()
.
Quando runAdAuction()
é chamado, o navegador faz uma solicitação ao servidor confiável de cada comprador de anúncios. A
O URL da solicitação pode ter esta aparência:
https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
- O URL de base vem de
trustedBiddingSignalsUrl
. - O
hostname
é fornecido pelo navegador. - O valor
keys
é extraído detrustedBiddingSignalsKeys
.
A resposta a essa solicitação é um objeto JSON que fornece valores para cada uma das chaves.
6. O anúncio vencedor é exibido
Seção de explicação:Os navegadores renderizam o anúncio vencedor
Conforme descrito anteriormente: a promessa retornada por runAdAuction()
é resolvida em uma URN
que é passado para um frame cercado para renderização, e o site exibe
o anúncio vencedor.
7. O resultado do leilão é informado
Seção explicativa: relatórios no nível do evento (por enquanto)
O vendedor informa o resultado
Seção de explicação:Relatórios do vendedor sobre renderização
O JavaScript do vendedor fornecido em decisionLogicUrl
(que também forneceu scoreAd()
) pode
inclua uma função reportResult()
para informar o resultado do leilão.
reportResult(auctionConfig, browserSignals) {
...
return signalsForWinner;
}
Os argumentos passados para essa função são:
auctionConfig
e
O objeto de configuração do leilão transmitido paranavigator.runAdAuction()
.
debrowserSignals
Um objeto construído pelo navegador que fornece informações sobre o leilão. Por exemplo:{ 'topWindowHostname': 'publisher.example', 'interestGroupOwner': 'https://dsp.example', 'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn', 'bid:' <bidValue>, 'desirability': <winningAdScore> }
O valor de retorno dessa função é usado como o argumento sellerSignals
para o lance
função reportWin()
.
O bidder vencedor informa o resultado
Seção de explicação:Relatórios de compradores sobre eventos de renderização e anúncio
O JavaScript do bidder vencedor (que também forneceu generateBid()
) pode incluir um
reportWin()
para informar o resultado do leilão.
reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
...
}
Os argumentos passados para essa função são:
auctionSignals
eperBuyerSignals
Os mesmos valores foram transmitidos paragenerateBid()
do bidder vencedor.sellerSignals
e
O valor de retorno dereportResult()
, que dá ao vendedor um de transmitir informações ao comprador.browserSignals
e
Um objeto construído pelo navegador que fornece informações sobre o leilão. Por exemplo:{ 'topWindowHostname': 'publisher.example', 'seller': 'https://ssp.example', 'interestGroupOwner': 'https://dsp.example', 'interestGroupName': 'custom-bikes', 'renderUrl': 'https://cdn.example/winning-creative.wbn', 'bid:' <bidValue> }
Implementação temporária de relatórios de perda/vitória
Há dois métodos disponíveis temporariamente no Chrome para relatórios de leilão:
forDebuggingOnly.reportAdAuctionLoss()
forDebuggingOnly.reportAdAuctionWin()
Cada um desses métodos usa um único argumento: um URL a ser buscado após a conclusão do leilão. Eles podem
ser chamado várias vezes, em scoreAd()
e generateBid()
, com diferentes argumentos de URL;
O Chrome só envia relatórios de perda/vitória de depuração quando um leilão é concluído. Se um leilão for cancelado (por exemplo, devido a uma nova navegação), nenhum relatório será gerado.
Esses métodos estão disponíveis por padrão no Chrome. Para testar os métodos, ative todas as APIs de privacidade de anúncios em chrome://settings/adPrivacy
. Se você estiver usando o Chrome com sinalizações de linha de comando para ativar a API Protected Audience, será necessário
ativar explicitamente os métodos incluindo a sinalização BiddingAndScoringDebugReportingAPI
. Se o
não estiver ativada, os métodos ainda estarão disponíveis, mas não farão nada.
8. Um clique no anúncio é registrado
Um clique em um anúncio renderizado em um frame isolado é informado. Para saber mais sobre como isso pode funcionar, consulte Relatórios de anúncios de frame isolado.
O diagrama abaixo descreve cada etapa de um leilão de anúncios da API Protected Audience:
Qual é a diferença entre Protected Audience e TURTLEDOVE?
A API Protected Audience é o primeiro experimento implementado no Chromium na família de propostas TURTLEDOVE.
A API Protected Audience segue os princípios gerais da TURTLEDOVE. Algumas publicidades on-line têm como base a exibição de um anúncio a uma pessoa potencialmente interessada que já interagiu com o anunciante ou a rede de publicidade. Historicamente, isso tem funcionado porque o anunciante reconhece uma pessoa específica enquanto ela navega em sites, uma questão importante de privacidade na Web atual.
O objetivo da iniciativa TURTLEDOVE é oferecer uma nova API para lidar com esse caso de uso, além de oferecer alguns avanços importantes na privacidade:
- O navegador, não o anunciante, detém as informações sobre o que o anunciante pensa que um pessoa está interessada.
- Os anunciantes podem veicular anúncios com base em interesses, mas não podem combiná-los com outros informações sobre uma pessoa, em especial quem ela é ou qual página está visitando.
A Protected Audience surgiu com o TURTLEDOVE e uma coleção de propostas relacionadas de modificações para atender melhor aos desenvolvedores que usam a API:
- Em SPARROW: A Criteo propôs a adição de uma Modelo de serviço ("Gatekeeper") executado em um ambiente de execução confiável (TEE). A API Protected Audience inclui um uso mais limitado de TEEs para pesquisa de dados em tempo real e geração de relatórios agregados.
- TERN e Magnite do NextRoll PADRÃO as propostas descreviam as diferentes funções que compradores e vendedores desempenham no leilão no dispositivo. O fluxo de pontuação/lances de anúncios da API Protected Audience é baseado nesse trabalho.
- os recursos Com base em resultados e Nível do produto TURTLEDOVE as modificações melhoraram o modelo de anonimato e os recursos de personalização do leilão no dispositivo
- PARAKEET é A proposta da Microsoft para um serviço de anúncios do tipo TURTLEDOVE que depende de um servidor proxy em execução em um TEE entre o navegador e os provedores de adtech, para anonimizar solicitações de anúncios e reforçar a privacidade. propriedades. A API Protected Audience não adotou esse modelo de proxy. Estamos disponibilizando as APIs JavaScript a PARAKEET e a Protected Audience em alinhamento, em apoio ao trabalho futuro para combinar ainda mais as melhores dos recursos das duas propostas.
A API Protected Audience ainda não impede que a rede de publicidade de um site saiba quais anúncios uma pessoa vê. Esperamos para que a API fique mais particular ao longo do tempo.
Qual configuração de navegador está disponível?
Os usuários podem ajustar a participação em testes do Sandbox de privacidade no Chrome ativando ou desativando
a configuração de nível superior em chrome://settings/adPrivacy
. Durante os testes iniciais, as pessoas serão
pode usar essa configuração de alto nível do Sandbox de privacidade para desativar a API Protected Audience. O Chrome planeja permitir
que os usuários vejam e gerenciem a lista de grupos de interesse a que foram adicionados em toda a web
sites visitados. Assim como acontece com as tecnologias do Sandbox de privacidade, as configurações do usuário podem
e evoluir com o feedback de usuários, reguladores e outros.
Vamos continuar atualizando as configurações disponíveis no Chrome à medida que a proposta da API Protected Audience avança, com base sobre testes e feedback. No futuro, planejamos oferecer configurações mais granulares para gerenciar a API Protected Audience e os dados associados.
Os autores das chamadas de API não podem acessar a associação a grupos quando os usuários navegam no modo de navegação anônima, e a associação está removidos quando os usuários limpam os dados do site.
Interaja e compartilhe feedback
- GitHub: leia a proposta. fazer perguntas e acompanhar a discussão.
- W3C: discuta casos de uso do setor na seção Como melhorar os negócios de publicidade na Web Grupo.
- Suporte ao desenvolvedor: faça perguntas e participe de discussões no Repositório de suporte ao desenvolvedor do Sandbox de privacidade.
- Lista de e-mails do FLEDGE: fledge-api-announce faz anúncios e atualizações sobre a API.
- Participe das chamadas programadas para a API Protected Audience (todos segunda semana). Todos estão convidados a participar. Para participar, primeiro inscreva-se no WICG (link em inglês). É possível participar ativamente ou apenas ouvir.
- Use o formulário de feedback do Sandbox de privacidade. para compartilhar feedback de forma particular com a equipe do Chrome fora de fóruns públicos.
Receber suporte
Para fazer uma pergunta sobre sua implementação, sobre a demonstração ou sobre a documentação:
- Abrir um novo problema no repositório privacy-sandbox-dev-support. Selecione o modelo de problema para a API Protected Audience.
- Informe um problema no repositório de códigos de demonstração no GitHub (link em inglês).
- Para perguntas mais gerais sobre como atender aos seus casos de uso com a API, registre um problema no repositório da proposta.
Para bugs e problemas com a implementação da API Protected Audience no Chrome: * Ver problemas existentes relatados para a API. * Informe um novo problema em crbug.com/new.
Receber atualizações
- Para receber notificações sobre alterações de status na API, inscreva-se na lista de e-mails de desenvolvedores de aplicativos.
- Para acompanhar todas as discussões em andamento sobre a API, clique no botão Assistir na página da proposta em GitHub. Isso requer que você tenha ou crie um padrão.
- Para receber atualizações gerais sobre o Sandbox de privacidade, inscreva-se no feed RSS [Progresso na privacidade Sandbox].
Saiba mais
- API Protected Audience: uma visão geral menos técnica da proposta.
- Demonstração da API Protected Audience: tutorial de uma implantação básica da API Protected Audience.
- Vídeo de demonstração da Protected Audience: explica o código de demonstração e mostra como usar o Chrome DevTools para depuração da Protected Audience.
- Explicação técnica da API Protected Audience
- Conheça o Sandbox de privacidade
- Intenção de prototipar
Foto de Ray Hennessy no Unsplash.