Usuario-agente de la app
Como parte de nuestras iniciativas más amplias a fin de combatir el spam, desarrollamos una especificación estándar para el encabezado de usuario-agente que envía un producto de estadísticas o anuncios en nombre de un usuario de la app. El usuario-agente de la app puede derivar del código nativo para cumplir con la siguiente especificación:
name version (os_and_version; locale; device; build; Proxy)
La definición de estos campos es la siguiente:
Componentes de usuario-agente | |
---|---|
name | Es el nombre del producto de estadísticas o anuncios. ( Ten en cuenta que, si el usuario-agente se construye del lado del cliente, Android// Specified by API consumer. iOS// Specified by API consumer. |
version | Es la versión del producto de estadísticas/anuncios.
( Android// Specified by API consumer. iOS// Specified by API consumer. |
os_and_version | El sistema operativo y la versión del sistema operativo en los que se ejecuta la app ( AndroidString osAndVersion = "Android " + Build.VERSION.RELEASE; iOSUIDevice *uid = [UIDevice currentDevice]; NSString *osAndVersion = [NSString stringWithFormat:@"%@ %@", [uid systemName], [uid systemVersion]]; |
locale | Una etiqueta de configuración regional IETF para el dispositivo, con un código de país y un idioma de dos letras separados por un guion bajo.
( AndroidString locale = Locale.getDefault(); iOSNSString *locale = [[NSLocale currentLocale] localeIdentifier] |
device | Es el nombre del dispositivo físico que ejecuta el producto de estadísticas o anuncios.
( 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 del número de compilación del sistema operativo.
( 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]; } |
Solo debes incluir ; Proxy
al final del usuario-agente de la app cuando construyas el servidor del usuario-agente de la app. Si el usuario-agente de la app se construyó por completo en el lado del cliente, excluye ; Proxy
. Por lo tanto, un usuario-agente de la aplicación podría 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)
Solicitud de seguimiento de conversiones
El propósito de las solicitudes de seguimiento de conversiones es notificar a Google Ads sobre un evento de aplicación que se debe registrar como una conversión o usarse para propagar una lista de remarketing y recuperar metadatos que describan cualquier clic anterior al evento.
Todas las llamadas a la API se realizan en el dominio www.googleadservices.com
. Las solicitudes de conversión son solicitudes POST
a través de HTTPS en la siguiente ruta:
/pagead/conversion/app/versionen la que version es la versión deseada de la API de seguimiento de conversiones. Actualmente, la única versión válida es
1.0
.
Una solicitud de conversión de aplicación estándar contendrá los siguientes parámetros.
Solicitud de seguimiento de conversiones | |
---|---|
dev_token |
Obligatorio Ubicación: Consulta El token de desarrollador estático y único que se emitió al consumidor de la API. Z_eErE4DkvcKjDM1OVE4c4 |
link_id |
Obligatorio Ubicación: Consulta El identificador del vínculo que vincula el token de desarrollador del consumidor de la API con una app específica. 31FF8D67E5BB5DD5029DCC2734C2F884 |
app_event_type |
Obligatorio Ubicación: Consulta El nombre del evento de la app que se produjo. Este campo es una enumeración y solo aceptará los siguientes valores: • first_open • session_start • in_app_purchase • view_item_list • view_item • view_search_results • add_to_cart • ecommerce_purchase • custom El evento |
app_event_name |
Obligatorio en determinadas condiciones Ubicación: Consulta El nombre de cualquier evento de app personalizado que no se acepte en el campo level_achieved Level Achieved Este campo no debe contener ninguno de los valores reservados para |
app_event_data |
Opcional Ubicación: Cuerpo Reenvía cualquier dato de evento enriquecido adicional como un objeto JSON simple que asigna claves de string a los valores. Los valores aceptables son strings y arreglos de strings. {"level": 5, "attempts": 20} |
rdid |
Obligatorio Ubicación: Consulta Una string de UUID válida que representa el ID de dispositivo sin procesar. f10e1de2-e237-4f50-b6aa-843c45cc63d6 En caso de que falte ese ID de dispositivo, como el de un usuario que no otorgó su consentimiento, establece el valor como cero. 00000000-0000-0000-0000-000000000000 |
id_type |
Obligatorio Ubicación: Consulta El tipo de identificador almacenado en el campo Androidadvertisingid iOSidfa |
lat |
Obligatorio Ubicación: Consulta Limita el estado del seguimiento de anuncios del dispositivo.
|
app_version |
Obligatorio Ubicación: Consulta La versión actual de la app. Se debe estandarizar de la siguiente manera. AndroidpackageManager.getPackageInfo(packageName(), PackageManager.GET_META_DATA).versionName iOS[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] 1.2.4 |
os_version |
Obligatorio Ubicación: Consulta La versión actual del SO host de la app. Esto se debe estandarizar de la siguiente manera. Androidandroid.os.Build.VERSION.RELEASE iOS[[UIDevice currentDevice] systemVersion] |
sdk_version |
Obligatorio Ubicación: Consulta Es la versión del SDK que midió el evento. Debido a que esto se usa principalmente para la depuración, debe reflejar la versión de lanzamiento tal como se publica con las versiones de SDK. Si la app no usa un SDK, pasa el mismo valor que 1.9.5r6 |
timestamp |
Obligatorio Ubicación: Consulta La marca de tiempo de UNIX que produjo el evento de conversión, en segundos con una precisión de hasta microsegundos. 1432681913.123456 |
value |
Opcional Ubicación: Consulta El valor monetario del evento, si lo hubiera. Siempre debe tener el formato de un valor de punto flotante apto para la lectura automática con un punto decimal a fin de separar la parte entera y la fracción del valor. 1.99 |
currency_code |
Obligatorio en determinadas condiciones Ubicación: Consulta Es el código de moneda ISO 4217 para el parámetro USD |
gclid |
Obligatorio en determinadas condiciones Ubicación: Consulta El valor del parámetro de búsqueda Cj0KEQjw0dy4BRCuuL_e5M |
market_referrer_gclid |
Obligatorio en determinadas condiciones Ubicación: Consulta El valor del parámetro de búsqueda BX3QojHp4mY5MrJtFM_d1u |
gclid_only_request |
Obligatorio en determinadas condiciones Ubicación: Consulta Es el identificador de la atribución basada en 1 |
gbraid |
Obligatorio en determinadas condiciones Ubicación: Consulta El valor ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O |
app_open_source |
Obligatorio en determinadas condiciones Ubicación: Consulta Valor para identificar el vínculo directo de clic en el anuncio o las sesiones de aplicaciones orgánicas. ad_click or organic |
User-Agent |
Obligatorio Ubicación: Encabezado El usuario-agente de la app, como se definió en la sección anterior AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M) |
X-Forwarded-For |
Obligatorio Ubicación: Encabezado La dirección IPv4 o IPv6 pública del dispositivo en el que se midió el evento. 216.58.194.174 |
Todas las solicitudes se deben enviar a través de HTTPS. Se rechazarán los pings recibidos a través de HTTP.
Ten en cuenta que si el cuerpo de la solicitud está vacío (en los casos en que no se pasan datos de eventos enriquecidos en la carga útil app_event_data
), nuestro servidor requiere que configures de forma explícita el encabezado Content-Length: 0
en tu solicitud.
Solicitud de muestra
A continuación, se muestra un ejemplo de una solicitud de seguimiento de conversiones válida con un tipo de evento no personalizado y la información de ingresos:
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"]}}
A continuación, se incluye un ejemplo de una solicitud de seguimiento de conversiones válida con un tipo de evento no personalizado y la información de ingresos con un rdid (advertisingid) no disponible:
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"]}}
A continuación, se muestra un ejemplo de una solicitud de inicio de sesión válida:
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
A continuación, se muestra un ejemplo de una solicitud de reatribución válida para el inicio de sesión de una sesión que se inició desde el vínculo directo 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
Codificación de datos de eventos
En el parámetro del cuerpo app_event_data
, usa las siguientes convenciones para los tipos de datos primitivos:
Flotante
- Usa un carácter de punto como separador decimal, independientemente de la localización de la app
- Usa una precisión decimal de dos dígitos para representar valores monetarios, p. ej., 2.99
- No uses la notación exponencial, p. ej., 2E+9.
- No uses un carácter de coma para separar grupos de dígitos, p. ej., 1,000,000.
- Ejemplos válidos:
-0.5
2.99
1000000.123
Número entero
- Enviar solo números enteros no decimales
- No use comas para separar los grupos de dígitos, p. ej., 1,000,000.
- Ejemplos válidos:
1000
-11
0
Fecha
- Formato de fecha: aaaa-mm-dd
yyyy
= año de cuatro dígitos, p.ej., 2016mm
= mes de dos dígitos, p.ej., 09 para septiembredd
= día de dos dígitos, p.ej., 23 para el día 23 del mes
- Siempre envía la cantidad de dígitos especificada anteriormente, p. ej., si envías el valor de dd para el 5.o día del mes, envía
05
. - Ejemplos válidos:
"2016-09-23"
"1990-12-31"
- Formato de fecha: aaaa-mm-dd
Marca de tiempo
- Formato de tiempo: Marca de tiempo Unix/Époch definida en la zona horaria UTC con una precisión de hasta microsegundos
- Ejemplos válidos:
1478713087
para el miércoles 9 de noviembre de 2016 a las 17:38:07 GMT1073513982.123000
para el miércoles 7 de enero de 2004 a las 22:19:42.123 GMT
Arreglos
- Enviar solo arreglos de valores primitivos (strings, números y booleanos)
- Ejemplos válidos:
[123, 456, 789]
["abc"]
Respuesta del seguimiento de conversiones
La respuesta del seguimiento de conversiones tiene el siguiente formato:
{ "ad_events": [<ad event objects>], "errors": [<error strings>], "attributed": true|false }
Es posible que los arreglos ad_events y errors estén vacíos.
Se espera que los errores sean códigos de error procesables, p.ej., invalid_timestamp
.
Los eventos de anuncios son los objetos principales de la atribución de apps y contendrán las siguientes propiedades.
Respuesta del seguimiento de conversiones | |
---|---|
ad_event_id |
Siempre presente string
Q2owS0VRancwZHk0QlJDdXVMX2U1TQ |
conversion_metric |
Siempre presente string Es la métrica de conversión utilizada para la atribución. Inicialmente, admitimos una métrica de conversión. conversion |
timestamp |
Siempre presente número Es la marca de tiempo UNIX que produjo el evento de anuncio, en segundos y con una precisión de hasta microsegundos. Este valor debe usarse para la atribución de último clic. 1432681913.123456 |
campaign_type |
Siempre presente string Este campo identificará el tipo de campaña que produjo el evento de anuncio. Los valores posibles son los siguientes. ACI ACE Search Display Video Shopping Hotel Performance_Max Other ACI es la abreviatura de "Campaña para instalación de aplicación". ACE es la abreviatura de campañas de participación en la aplicación. |
campaign_id |
Siempre presente número Es el ID numérico de la campaña que produjo el evento de anuncio. Este valor se garantiza como único. 123456789 |
campaign_name |
Siempre presente string Es el nombre de la campaña definida por el anunciante de la campaña que produjo el evento de anuncio. No se garantiza que este valor sea único. Occasional Gamers (Video) |
ad_type |
Siempre presente string Indica el tipo de anuncio que generó el evento de anuncio. Este valor se puede usar para distinguir entre varios tipos de inventario de la siguiente manera. Promoción de aplicaciónClickToDownloadParticipación en la aplicación AppDeepLinkParticipación en la aplicación: Flujo de instalación y continuación AppDeepLinkContinueAproveche el resto de los valores Unknown |
external_customer_id |
Siempre presente número Es el identificador del anunciante que posee la campaña que produjo el evento de anuncio. Este valor se puede usar para diferenciar las cuentas de Google Ads. 123456789 |
location |
Siempre presente número Es el código de ID de ubicación para la ubicación geográfica del evento del anuncio. Consulta la referencia de la API de Google Ads para interpretar los códigos de ubicación. |
network_type |
Siempre presente string Este campo identificará la red de publicidad de Google Ads en la que se produjo el evento de anuncio. Los valores posibles son los siguientes. Search Display YouTube |
network_subtype |
Será string Este campo identificará el “subtipo” de la red de publicidad de Google Ads en la que se produjo el evento de anuncio. Los valores posibles varían según el tipo de red principal. BúsquedaBúsqueda de Google comúnGoogleSearchSocios de Búsqueda de Google SearchPartners PantallaPublicadores web móvilesmGDNPublicadores de aplicaciones Google AdMob YouTubeRed de videos de YouTubeYouTubeVideosRed de búsqueda de YouTube YouTubeSearchSocios de video VideoPartners |
video_id |
Solo se proporciona cuando string Es el ID de video de YouTube asociado con el evento de anuncio. dQw4w9WgXcQ |
keyword |
Solo se proporciona cuando string La palabra clave de búsqueda asociada con el evento del anuncio. +food +delivery |
match_type |
Solo se proporciona cuando string Es el tipo de concordancia para las palabras clave de la Búsqueda. ExactaeFrase pAmplia b |
placement |
Solo se proporciona cuando string Es la posición asociada con el evento del anuncio. mobileapp::1-343200656 |
ad_group_id |
Siempre presente número Es el ID numérico del grupo de anuncios que produjo el evento de anuncio. Este valor se garantiza como único. 123456789 |
ad_group_name |
Solo se proporciona cuando string Es el nombre del grupo de anuncios definido por el anunciante que produjo el evento de anuncio. No se garantiza que este valor sea único. My App AdGroup |
creative_id |
Solo se proporciona cuando número Es el ID numérico del bloque de anuncios de la creatividad que produjo el evento de anuncio. Este valor se garantiza como único. 123456789 |
interaction_type |
Este campo siempre será participación. string |
Ejemplos de respuesta
Este es un ejemplo de una respuesta del seguimiento de conversiones cuando la solicitud contenía errores:
{ "ad_events": [], "errors": ["INVALID_CURRENCY_CODE"], "attributed": false }
Este es un ejemplo de una respuesta del seguimiento de conversiones negativa:
{ "ad_events": [], "errors": [], "attributed": false }
Se mostrará una respuesta del seguimiento de conversiones para todas las solicitudes del seguimiento de conversiones.
Este es un ejemplo de una respuesta afirmativa del seguimiento de conversiones para una Campaña universal de aplicaciones:
{ "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 }
A continuación, se muestra un ejemplo de una respuesta afirmativa del seguimiento de conversiones para una campaña de Búsqueda:
{ "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 }
A continuación, se muestra un ejemplo de una respuesta afirmativa del seguimiento de conversiones para una campaña 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 }
A continuación, se muestra un ejemplo de una respuesta afirmativa del seguimiento de conversiones para una campaña de 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 }
Solicitud de atribución de varias redes
Cuando Google Ads responde a una solicitud de seguimiento de conversiones de manera afirmativa, el consumidor de la API debe notificar a Google Ads sobre su decisión de atribución de varias redes después de identificar el último clic.
La solicitud de atribución de varias redes es idéntica a la solicitud de seguimiento de conversiones original, pero tiene la siguiente ruta de solicitud:
/pagead/conversion/app/1.0/cross_network
y la adición de dos parámetros obligatorios:
Solicitud de atribución de varias redes | |
---|---|
ad_event_id |
Obligatorio Ubicación: Consulta El identificador |
attributed |
Obligatorio Ubicación: Consulta Indica si Google Ads recibió crédito por la conversión o no por el consumidor de la API. |
Este es un ejemplo de una solicitud de atribución de varias redes válida:
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
Una solicitud de atribución de varias redes válida siempre recibirá una respuesta 200 genérica sin cuerpo de respuesta.