User agent de aplicativos
Como parte dos nossos esforços mais amplos para combater o spam, desenvolvemos uma especificação padrão para o cabeçalho do user agent enviada por um produto de análise/anúncios em nome de um usuário do app. O user agent do app pode ser derivado do código nativo para aderir à seguinte especificação:
name version (os_and_version; locale; device; build; Proxy)
A definição desses campos é a seguinte:
Componentes do user agent | |
---|---|
name | Nome do produto de análise/anúncios. ( Se o user agent for criado no lado do cliente, Android// Specified by API consumer. iOS// Specified by API consumer. |
version | A versão do produto de análise/anúncios.
( Android// Specified by API consumer. iOS// Specified by API consumer. |
os_and_version | O sistema operacional e a versão do sistema operacional em que o app está sendo executado. ( AndroidString osAndVersion = "Android " + Build.VERSION.RELEASE; iOSUIDevice *uid = [UIDevice currentDevice]; NSString *osAndVersion = [NSString stringWithFormat:@"%@ %@", [uid systemName], [uid systemVersion]]; |
locale | Uma tag de localidade IETF para o dispositivo, usando o código de duas letras do idioma e o país separados por um sublinhado.
( AndroidString locale = Locale.getDefault(); iOSNSString *locale = [[NSLocale currentLocale] localeIdentifier] |
device | O nome do dispositivo físico que executa o produto de análises/anúncios.
( AndroidString device = Build.MODEL; iOS@import Darwin.sys.sysctl; NSString *device(void) { size_t bufferSize = 64; NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; int status = sysctlbyname("hw.machine", buffer.mutableBytes, &bufferSize, NULL, 0); if (status != 0) { return nil; } return [[NSString alloc] initWithCString:buffer.mutableBytes encoding:NSUTF8StringEncoding]; } |
build | "Build/" seguido pelo número do build do sistema
operacional.
( AndroidString build = "Build/" + Build.ID; iOS@import Darwin.sys.sysctl; NSString *build(void) { size_t bufferSize = 64; NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; int status = sysctlbyname("kern.osversion", buffer.mutableBytes, &bufferSize, NULL, 0); if (status != 0) { return nil; } return [[NSString alloc] initWithCString:buffer.mutableBytes encoding:NSUTF8StringEncoding]; } |
Inclua ; Proxy
somente no final do user agent do app ao construir o
servidor do user agent do app. Se o user agent do app for totalmente construído no
lado do cliente, exclua ; Proxy
. Assim, um user agent de um app pode ser:
- Android:
AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M; Proxy)
- iOS:
AdMob/7.10.1 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy)
Solicitação de acompanhamento de conversões
O objetivo das solicitações de acompanhamento de conversões é notificar o Google Ads sobre um evento do app que deve ser rastreado como uma conversão e/ou usado para preencher uma lista de remarketing e recuperar metadados que descrevem qualquer clique anterior ao evento.
Todas as chamadas de API são feitas para o domínio www.googleadservices.com
. As solicitações de conversão são solicitações POST
via HTTPS no seguinte caminho:
/pagead/conversion/app/version, em que version é a versão pretendida da API de acompanhamento de conversões. No momento, a única versão válida é
1.0
.
Uma solicitação de conversão de app padrão conterá os seguintes parâmetros.
Solicitação de acompanhamento de conversões | |
---|---|
dev_token |
Obrigatório Local: consulta O token de desenvolvedor exclusivo e estático emitido para o consumidor de API. Z_eErE4DkvcKjDM1OVE4c4 |
link_id |
Obrigatório Local: consulta O identificador do link que vincula o token de desenvolvedor do consumidor da API a um aplicativo específico. 31FF8D67E5BB5DD5029DCC2734C2F884 |
app_event_type |
Obrigatório Local: consulta O nome do evento de app que ocorreu. Este campo é uma enumeração e aceita apenas os seguintes valores: • first_open • session_start • in_app_purchase • view_item_list • view_item • view_search_results • add_to_cart • ecommerce_purchase • custom O evento |
app_event_name |
Obrigatório em determinadas condições Local: consulta O nome de qualquer evento de aplicativo personalizado que não seja aceito no campo level_achieved Level Achieved O campo não pode conter nenhum dos valores reservados para
|
app_event_data |
Opcional Local: corpo Encaminhar dados de eventos avançados adicionais como uma simples chave de string de mapeamento de objeto JSON para valores. Os valores aceitáveis são strings e matrizes de strings. {"level": 5, "attempts": 20} |
rdid |
Obrigatório Local: consulta Uma string UUID válida que representa o ID bruto do dispositivo. f10e1de2-e237-4f50-b6aa-843c45cc63d6 Caso o ID do dispositivo esteja ausente, por exemplo, o ID de um usuário sem consentimento da ATT, defina-o como zero. 00000000-0000-0000-0000-000000000000 |
id_type |
Obrigatório Local: consulta O tipo de identificador armazenado no campo Androidadvertisingid iOSidfa |
lat |
Obrigatório Local: consulta Status de rastreamento de anúncios limitado pelo dispositivo.
|
app_version |
Obrigatório Local: consulta A versão atual do app. Deve ser padronizada da seguinte maneira. AndroidpackageManager.getPackageInfo(packageName(), PackageManager.GET_META_DATA).versionName iOS[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] 1.2.4 |
os_version |
Obrigatório Local: consulta A versão atual do SO host do app. Isso precisa ser padronizado da seguinte maneira. Androidandroid.os.Build.VERSION.RELEASE iOS[[UIDevice currentDevice] systemVersion] |
sdk_version |
Obrigatório Local: consulta A versão do SDK que mediu o evento. Como ela é usada principalmente
para depuração, precisa refletir a versão de lançamento exatamente como foi publicada
com as versões do SDK. Se o app não usar um SDK, transmita o mesmo
valor que 1.9.5r6 |
timestamp |
Obrigatório Local: consulta É o carimbo de data/hora UNIX de quando o evento de conversão ocorreu em segundos com precisão de até microssegundos. 1432681913.123456 |
value |
Opcional Local: consulta O valor monetário do evento, se houver. Ela precisa sempre ser formatada como um valor de ponto flutuante legível por máquina usando um ponto decimal para separar a parte inteira e fracionária do valor. 1.99 |
currency_code |
Obrigatório em determinadas condições Local: consulta É o código
de moeda ISO 4217 para o parâmetro USD |
gclid |
Obrigatório em determinadas condições Local: consulta O valor do parâmetro de consulta Cj0KEQjw0dy4BRCuuL_e5M |
market_referrer_gclid |
Obrigatório em determinadas condições Local: consulta O valor do parâmetro de consulta BX3QojHp4mY5MrJtFM_d1u |
gclid_only_request |
Obrigatório em determinadas condições Local: consulta Identificador para atribuição baseada em 1 |
gbraid |
Obrigatório em determinadas condições Local: consulta Última visualização: o valor ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O |
app_open_source |
Obrigatório em determinadas condições Local: consulta Valor para identificar link direto no clique no anúncio ou sessões orgânicas do aplicativo. ad_click or organic |
User-Agent |
Obrigatório Local: cabeçalho O user agent do app, conforme definido na seção anterior. AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M) |
X-Forwarded-For |
Obrigatório Local: cabeçalho O endereço IPv4 ou IPv6 público do dispositivo em que o evento foi medido. 216.58.194.174 |
Todas as solicitações precisam ser enviadas por HTTPS. Os pings recebidos por HTTP serão recusados.
Se o corpo da solicitação estiver vazio (nos casos em que nenhum dado de evento avançado é transmitido no payload app_event_data
), nosso servidor exigirá que você defina explicitamente o cabeçalho Content-Length: 0
na solicitação.
Exemplo de solicitação
Veja um exemplo de solicitação de acompanhamento de conversão válida com um tipo de evento não personalizado e as informações de receita:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=in_app_purchase &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
{"app_event_data":{"item_id":["Crayons","Markers"]}}
Veja um exemplo de solicitação de acompanhamento de conversão válida com um tipo de evento não personalizado e as informações de receita com o rdid (advertisingid) não disponível:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=in_app_purchase &rdid=00000000-0000-0000-0000-000000000000 &id_type=advertisingid &lat=1 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD &market_referrer_gclid=BX3QojHp4mY5MrJtFM_d1u &gclid=Cj0KEQjw0dy4BRCuuL_e5M &gclid_only_request=1 Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; Android,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
{"app_event_data":{"item_id":["Crayons","Markers"]}}
Veja um exemplo de solicitação válida de início de sessão:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=session_start &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
Veja a seguir um exemplo de solicitação válida de reatribuição de início de sessão para uma sessão
iniciada pelo link direto
example://product/123?gclid=Cj0KEQjw0dy4BRCuuL_e5M
:
POST /pagead/conversion/app/1.0 ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=session_start &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &gclid=Cj0KEQjw0dy4BRCuuL_e5M Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
Codificação de dados do evento
Para o parâmetro do corpo app_event_data
, use as seguintes convenções para os tipos de dados primitivos:
Ponto flutuante
- Use o caractere ponto como separador decimal, independentemente da localização do app
- Use uma precisão decimal de dois dígitos para representar valores monetários, por exemplo, 2,99
- Não use notação exponencial, por exemplo, 2E+9.
- Não use um caractere vírgula para separar grupos de dígitos, por exemplo, 1.000.000
- Exemplos válidos:
-0.5
2.99
1000000.123
Número inteiro
- Envie apenas valores inteiros inteiros sem dígitos decimais
- Não use caracteres curinga para separar grupos de dígitos, por exemplo, 1.000.000.
- Exemplos válidos:
1000
-11
0
Date
- Formato da data: aaaa-mm-dd
yyyy
= ano com quatro dígitos, por exemplo, 2016mm
= mês com dois dígitos, por exemplo, 09 para setembrodd
= dia com dois dígitos, por exemplo, 23 para o 23o dia do mês
- Sempre envie o número de dígitos especificados acima. Por exemplo, se enviar o valor de dd para o quinto dia do mês, envie
05
. - Exemplos válidos:
"2016-09-23"
"1990-12-31"
- Formato da data: aaaa-mm-dd
Carimbo de data/hora
- Formato de hora: carimbo de data/hora Unix/époch definido no fuso horário UTC com precisão de até microssegundos
- Exemplos válidos:
1478713087
para quarta-feira, 9 de novembro de 2016 17:38:07 GMT1073513982.123000
para quarta-feira, 7 de janeiro de 2004 22:19:42.123 GMT
Matrizes
- Envie apenas matrizes de valores primitivos (strings, números e booleanos)
- Exemplos válidos:
[123, 456, 789]
["abc"]
Resposta do acompanhamento de conversões
A resposta do acompanhamento de conversões tem o seguinte formato:
{ "ad_events": [<ad event objects>], "errors": [<error strings>], "attributed": true|false }
As matrizes ad_events e errors podem estar vazias.
Esperamos que os erros sejam códigos de erro legíveis por máquina, por exemplo, invalid_timestamp
.
Os eventos de anúncios são os principais objetos da atribuição de apps e conterão as seguintes propriedades.
Resposta do acompanhamento de conversões | |
---|---|
ad_event_id |
Sempre presente string
Q2owS0VRancwZHk0QlJDdXVMX2U1TQ |
conversion_metric |
Sempre presente string É a métrica de conversão usada para atribuição. Inicialmente, vamos oferecer suporte a uma métrica de conversão. conversion |
timestamp |
Sempre presente number É o carimbo de data/hora UNIX de eventos do anúncio em segundos com precisão de até microssegundos. Esse valor deve ser usado para a atribuição de último clique. 1432681913.123456 |
campaign_type |
Sempre presente string Esse campo identifica o tipo de campanha que produziu o evento de anúncio. Veja os valores possíveis a seguir. ACI ACE Search Display Video Shopping Hotel Performance_Max Other ACI é uma abreviação de "Campanha de apps para instalação". ACE é a abreviação de Campanhas de apps para engajamento. |
campaign_id |
Sempre presente number O ID numérico da campanha que produziu o evento de anúncio. Esse valor é garantido exclusivo. 123456789 |
campaign_name |
Sempre presente string Nome da campanha definida pelo anunciante da campanha que produziu o evento de anúncio. Não é garantido que esse valor seja único. Occasional Gamers (Video) |
ad_type |
Sempre presente string O tipo de anúncio que resultou no evento do anúncio. É possível usar esse valor para distinguir entre vários tipos de inventário, conforme mostrado a seguir. Promoção de appsClickToDownloadEngajamento de apps AppDeepLinkEngajamento de apps: fluxo de instalação e continuidade AppDeepLinkContinueOpção geral para outros valores Unknown |
external_customer_id |
Sempre presente number O identificador do anunciante proprietário da campanha que produziu o evento de anúncio. Esse valor pode ser usado para diferenciar contas do Google Ads. 123456789 |
location |
Sempre presente number O código do código de localização para a localização geográfica do evento de anúncio. Consulte a referência da API Google Ads para interpretar os códigos de local. |
network_type |
Sempre presente string Esse campo identifica a rede de publicidade do Google Ads em que o evento de anúncio ocorreu. Veja os valores possíveis: Search Display YouTube |
network_subtype |
Será string Esse campo identifica o "subtipo" da rede de publicidade do Google Ads em que o evento de anúncio ocorreu. Os valores possíveis variam de acordo com o tipo de rede principal. PesquisaPesquisa Google comumGoogleSearchParceiros de pesquisa do Google SearchPartners TelaEditores da Web para dispositivos móveismGDNEditores de apps Google AdMob YouTubeRede de vídeos do YouTubeYouTubeVideosRede de pesquisa do YouTube YouTubeSearchParceiros de vídeo VideoPartners |
video_id |
Fornecido apenas quando string ID do vídeo do YouTube associado ao evento de anúncio. dQw4w9WgXcQ |
keyword |
Fornecido apenas quando string Palavra-chave da rede de pesquisa associada ao evento de anúncio. +food +delivery |
match_type |
Fornecido apenas quando string O tipo de correspondência de palavras-chave da rede de pesquisa. ExataeFrase pAmpla b |
placement |
Fornecido apenas quando string Posição associada ao evento de anúncio. mobileapp::1-343200656 |
ad_group_id |
Sempre presente number O código numérico do grupo de anúncios que foi produzido com o evento do anúncio. Esse valor é garantido único. 123456789 |
ad_group_name |
Fornecido apenas quando string Nome do grupo de anúncios definido pelo anunciante que produziu o evento de anúncio. Não é garantido que esse valor seja único. My App AdGroup |
creative_id |
Fornecido apenas quando number O código numérico do bloco de anúncios do criativo que produziu o evento de anúncio. Esse valor é garantido único. 123456789 |
interaction_type |
Este campo será sempre de engajamento. string |
Exemplos de respostas
Veja a seguir um exemplo de resposta de acompanhamento de conversões quando a solicitação contém erros:
{ "ad_events": [], "errors": ["INVALID_CURRENCY_CODE"], "attributed": false }
Veja a seguir um exemplo de resposta de acompanhamento de conversões negativa:
{ "ad_events": [], "errors": [], "attributed": false }
Será retornada uma resposta de acompanhamento de conversões para todas as solicitações.
Um exemplo de resposta afirmativa do acompanhamento de conversões para uma campanha universal para apps é:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "ACI", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Search", "network_subtype": "GoogleSearch", "video_id": null, "keyword": null, "match_type": null, "placement": null, "ad_group_id": null, "ad_group_name": "", "creative_id": null, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true }
Um exemplo de uma resposta afirmativa de acompanhamento de conversões para uma campanha de pesquisa é:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Search", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Search", "network_subtype": "GoogleSearch", "video_id": null, "keyword": "+space +birds", "match_type": "b", "placement": null, "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true }
Um exemplo de resposta afirmativa do acompanhamento de conversões para uma campanha de display é:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Display", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "Display", "network_subtype": "mGDN", "video_id": null, "keyword": null, "match_type": null, "placement": "mobile-app::2-343200656", "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true }
Um exemplo de uma resposta afirmativa de acompanhamento de conversões para uma campanha do YouTube é:
{ "ad_events": [{ "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ", "conversion_metric": "conversion", "interaction_type": "engagement", "campaign_type": "Video", "campaign_id": 123456789, "campaign_name": "My App Campaign", "ad_type": "ClickToDownload", "external_customer_id": 123456789, "location": 21144, "network_type": "YouTube", "network_subtype": "YouTubeVideos", "video_id": "dQw4w9WgXcQ", "keyword": null, "match_type": null, "placement": null, "ad_group_id": 123456789, "ad_group_name": "My App AdGroup", "creative_id": 123456789, "timestamp": 1432681913.123456 }], "errors": [], "attributed": true }
Solicitação de atribuição de várias redes
Quando o Google Ads responde a uma solicitação de acompanhamento de conversões, o consumidor da API precisa notificar o Google Ads sobre a decisão de atribuição de várias redes depois de identificar o último clique.
A solicitação de atribuição de várias redes é idêntica à solicitação de acompanhamento de conversões original, mas com um caminho de solicitação de:
/pagead/conversion/app/1.0/cross_network
e dois parâmetros obrigatórios:
Solicitação de atribuição de várias redes | |
---|---|
ad_event_id |
Obrigatório Local: consulta É o identificador |
attributed |
Obrigatório Local: consulta Indica se o Google Ads recebeu ou não crédito pela conversão pelo consumidor da API. |
Veja um exemplo de solicitação de atribuição válida de várias redes:
POST /pagead/conversion/app/1.0/cross_network ?dev_token=Z_eErE4DkvcKjDM1OVE4c4 &link_id=31FF8D67E5BB5DD5029DCC2734C2F884 &app_event_type=custom &app_event_name=level_achieved &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D &id_type=idfa &lat=0 &app_version=1.2.4 &os_version=9.3.2 &sdk_version=1.9.5r6 ×tamp=1432681913.123456 &value=1.99 ¤cy_code=USD &ad_event_id=Q2owS0VRancwZHk0QlJDdXVMX2U1TQ &attributed=1 Host: www.googleadservices.com User-Agent: MyAnalyticsCompany/1.0.0 (iOS 10.0.2; en_US; iPhone9,1; Build/13D15; Proxy) X-Forwarded-For: 216.58.194.174 Content-Type: application/json; charset=utf-8
Uma solicitação de atribuição válida de várias redes sempre recebe uma resposta genérica 200 sem corpo de resposta.