Suivi des conversions d'application et remarketing – Spécifications concernant les demandes/réponses

User-agent de l'application

Dans le cadre de nos efforts plus généraux pour lutter contre le spam, nous avons développé une spécification standardisée pour l'en-tête User-Agent envoyé par un produit d'analyse ou publicitaire au nom d'un utilisateur d'application. L'User-Agent de l'application peut être dérivé du code natif pour respecter les spécifications suivantes :

name version (os_and_version; locale; device; build; Proxy)

Ces champs sont définis comme suit :

Composants de l'user-agent
name

Nom du produit Analytics/Ads. (Google AdMob)

Notez que si le user-agent est construit côté client, name doit être l'ID du bundle de l'application cliente.


Android
// Specified by API consumer.

iOS
// Specified by API consumer.
version

Version du produit Analytics/Ads. (7.10.1)


Android
// Specified by API consumer.

iOS
// Specified by API consumer.
os_and_version

Système d'exploitation et version du système d'exploitation sur lesquels l'application s'exécute. (Android 6.0 )


Android
String osAndVersion =
    "Android " + Build.VERSION.RELEASE;

iOS
UIDevice *uid =
  [UIDevice currentDevice];
NSString *osAndVersion =
  [NSString
    stringWithFormat:@"%@ %@",
    [uid systemName],
    [uid systemVersion]];
locale

Balise de paramètres régionaux IETF pour l'appareil, utilisant un code pays et de langue à deux lettres séparés par un trait de soulignement. (en_US)


Android
String locale = Locale.getDefault();

iOS
NSString *locale =
  [[NSLocale currentLocale]
    localeIdentifier]
device

Nom de l'appareil physique sur lequel le produit Analytics/Ads est exécuté. (iPhone9,1)


Android
String 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/" suivi du numéro de build du système d'exploitation. (Build/13D15)


Android
String 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];
}

N'incluez ; Proxy qu'à la fin de l'User-Agent de l'application lorsque vous construisez l'User-Agent de l'application côté serveur. Si l'user-agent de l'application est entièrement construit côté client, excluez ; Proxy. Voici un exemple d'User-Agent d'application :

  • 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)

Guide de demande de suivi des conversions

L'objectif des demandes de suivi des conversions est d'informer Google Ads d'un événement d'application qui doit être suivi en tant que conversion et/ou utilisé pour remplir une liste de remarketing, et de récupérer les métadonnées décrivant tout clic ayant précédé l'événement.

Tous les appels d'API sont effectués vers le domaine www.googleadservices.com. Les demandes de conversion sont des demandes POST via HTTPS sur le chemin d'accès suivant :

/pagead/conversion/app/version
version est la version prévue de l'API de suivi des conversions.

Une demande de conversion d'application standard contiendra les paramètres suivants pour l'API App Conversion v1.1.

Demande de suivi des conversions
dev_token

Obligatoire


Emplacement : requête


Jeton de développeur unique et statique émis pour l'utilisateur de l'API.

Z_eErE4DkvcKjDM1OVE4c4
link_id

Obligatoire


Emplacement : requête


Identifiant de lien associant le jeton de développeur du consommateur d'API à une application spécifique.

31FF8D67E5BB5DD5029DCC2734C2F884
app_event_type

Obligatoire


Emplacement : requête


Nom de l'événement d'application qui s'est produit. Ce champ est une énumération et n'accepte que les valeurs suivantes :

 • first_open
 • session_start
 • in_app_purchase
 • view_item_list
 • view_item
 • view_search_results
 • add_to_cart
 • ecommerce_purchase
 • custom

L'événement first_open doit toujours être envoyé pour attribuer les installations, et l'événement session_start doit toujours être envoyé pour réattribuer les sessions. Utilisez in_app_purchase pour les achats effectués via la plate-forme de téléchargement d'applications native et ecommerce_purchase pour tous les autres achats.

app_event_name

Obligatoire sous certaines conditions


Emplacement : requête


Nom de tout événement d'application personnalisé qui n'est pas accepté dans le champ app_event_type. Ce champ doit contenir entre 1 et 64 caractères Unicode (avec l'encodage UTF-8). Ce champ est obligatoire si app_event_type est défini sur custom.

level_achieved
Level Achieved

Ce champ ne doit contenir aucune des valeurs réservées à app_event_type. Si un nom d'événement réservé est utilisé, l'API renvoie une erreur APP_EVENT_NAME_RESERVED_VALUE.

app_event_data

Facultatif


Emplacement : Corps


Transmettez toutes les données d'événement enrichies supplémentaires sous la forme d'un simple objet JSON mappant les clés de chaîne aux valeurs. Seuls les chaînes et les tableaux de chaînes sont acceptés.

{"level": 5, "attempts": 20}
odm_info

Obligatoire lorsque vous utilisez la mesure intégrée des conversions sur iOS


Emplacement : requête


Valeur du paramètre de requête info, capturée lors de l'installation ou de la réinstallation de l'application iOS à partir du SDK Google On Device Measurement (ODM) : Event Data. Ce champ permet d'activer la mesure intégrée des conversions pour les campagnes pour applications iOS.

XYZr_AB8C-_zGtKjUhqtzPLeQ8lbJB5dADVR0tpZ9f-28sN5qN9GTZ_FztjL0OL
FzgxUJDhZr8w6lwGxAwPcxSwR5orjWepZiVP7sRRoCiaHerR-1TP17eJKtazgeSg
_CVEs13LllDTfrhVM8uWISqlg8dXobsLzmj8C7WrOlktHA5P_E23
id_type

Obligatoire


Type d'identifiant transmis dans le champ rdid.


Android

advertisingid
appsetid

iOS

idfa
idfv
rdid

Obligatoire


Emplacement : requête


Chaîne UUID valide représentant l'ID brut de l'appareil.

f10e1de2-e237-4f50-b6aa-843c45cc63d6

Si l'ID de l'appareil est manquant, par exemple l'ID d'un utilisateur ATT n'ayant pas donné son consentement, définissez-le sur zéro.

00000000-0000-0000-0000-000000000000
ctry_c

Obligatoire


Emplacement : requête


Code pays ISO à deux lettres indiquant le pays d'où provient la conversion.

Ce champ est obligatoire pour activer la mesure des conversions d'application sans les attribuer à un utilisateur spécifique sur iOS et Android.

US, IN
eea

Obligatoire sous certaines conditions


Emplacement : requête


Champ d'application EEE.

0 : les réglementations européennes ne s'appliquent pas à cet utilisateur ni à cette conversion.

1 : les réglementations européennes s'appliquent à cet utilisateur et à cette conversion. Par exemple, si un utilisateur se trouve dans l'EEE, il est soumis aux réglementations européennes applicables.


*Required to be sent when the value is known.

ad_personalization

Obligatoire sous certaines conditions


Emplacement : requête


Indicateurs pour les annonces personnalisées

0 : l'utilisateur final a refusé le consentement pour la personnalisation des annonces.

1 : l'utilisateur final a accordé le consentement pour la personnalisation des annonces.


*Required to be sent when the value is known.

ad_user_data

Obligatoire sous certaines conditions


Emplacement : requête


Indicateur de consentement pour l'utilisation des données utilisateur à des fins publicitaires

0 : l'utilisateur a refusé de transmettre ses données à Google à des fins publicitaires

1 : l'utilisateur a accepté de transmettre ses données à Google à des fins publicitaires


*Required to be sent when the value is known.

lat

Obligatoire


Emplacement : requête


État de la fonctionnalité "Limiter le suivi des annonces" pour l'appareil.

  • 0 : l'utilisateur n'a pas choisi de limiter le suivi des annonces.
  • 1 : l'utilisateur a choisi de limiter le suivi des annonces.

app_version

Obligatoire


Emplacement : requête


Version actuelle de l'application. Elle doit être standardisée comme suit.


Android

packageManager.getPackageInfo(packageName(),
  PackageManager.GET_META_DATA).versionName

iOS

[[[NSBundle mainBundle] infoDictionary]
  objectForKey:@"CFBundleShortVersionString"]

1.2.4
os_version

Obligatoire


Emplacement : requête


Version actuelle de l'OS hôte de l'application. Elle doit être standardisée comme suit.


Android

android.os.Build.VERSION.RELEASE

iOS

[[UIDevice currentDevice] systemVersion]
sdk_version

Obligatoire


Emplacement : requête


Version du SDK qui a mesuré l'événement. Comme il est principalement utilisé pour le débogage, il doit refléter la version publiée exactement telle qu'elle est publiée avec vos versions du SDK. Si l'application n'utilise pas de SDK, veuillez transmettre la même valeur que app_version.

1.9.5r6
timestamp

Obligatoire


Emplacement : requête


Code temporel UNIX de l'événement de conversion, en secondes avec une précision en microsecondes.

1432681913.123456
fot

Obligatoire


Emplacement : requête


Horodatage UNIX du first_open correspondant en secondes, avec une précision en microsecondes pour toutes les sessions et tous les événements après installation suivants.

1432681913.123456
value

Facultatif


Emplacement : requête


Valeur monétaire de l'événement, le cas échéant. Elle doit toujours être mise en forme en tant que valeur à virgule flottante lisible par une machine, en utilisant un point décimal pour séparer la partie entière et la partie fractionnaire de la valeur.

1.99
currency_code

Obligatoire sous certaines conditions


Emplacement : requête


Code de devise ISO 4217 pour le paramètre value. Ce champ est obligatoire si le value paramètre est fourni et n'est pas vide.

USD
gclid

Obligatoire sous certaines conditions


Emplacement : requête


Valeur du paramètre de requête gclid à partir d'une URL de lien profond qui a ouvert l'application.

Cj0KEQjw0dy4BRCuuL_e5M
market_referrer_gclid

Obligatoire sous certaines conditions


Emplacement : requête


Valeur du paramètre de requête gclid d'une URL de lien profond capturée à partir de la valeur install_referrer via l'API Play Install Referrer.

BX3QojHp4mY5MrJtFM_d1u
gclid_only_request

Obligatoire sous certaines conditions


Emplacement : requête


Identifiant pour l'attribution basée sur gclid dans les scénarios où rdid (advertisingid) est not disponible ou où tous les zeroes ET gclid ou market_referrer_gclid sont présents.

1
gbraid

Obligatoire sous certaines conditions


Emplacement : requête


Valeur gbraid "Dernière vue" envoyée via l'URL de lien profond qui a ouvert l'application. Notez que cette valeur doit être mise en cache dans l'application afin de pouvoir être envoyée avec les futures conversions qui se produiront dans l'application.

ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O
app_open_source

Obligatoire sous certaines conditions


Emplacement : requête


Valeur permettant d'identifier les liens profonds de clic sur une annonce ou les sessions d'application naturelles.

ad_click or organic
User-Agent

Obligatoire


Position : en-tête


User-agent de l'application, tel que défini dans la section précédente.

AdMob/7.10.1 (Android 6.0; en_US; SM-G900F; Build/MMB29M)
X-Forwarded-For

Obligatoire


Position : en-tête


Adresse IPv4 ou IPv6 publique de l'appareil sur lequel l'événement a été mesuré.

216.58.194.174

Toutes les requêtes doivent être envoyées via HTTPS. Les pings reçus via HTTP seront refusés.

Veuillez noter que si le corps de la requête est vide (dans les cas où aucune donnée d'événement enrichie n'est transmise dans la charge utile app_event_data), notre serveur exige que vous définissiez explicitement l'en-tête Content-Length: 0 dans votre requête.

Encodage des données d'événement

Pour le paramètre de corps app_event_data, veuillez utiliser les conventions suivantes pour les types de données primitifs :

  • Float

    • Utiliser le point comme séparateur décimal indépendamment de la localisation de l'application
    • Utilisez une précision décimale à deux chiffres pour représenter les valeurs monétaires (par exemple, 2,99).
    • N'utilisez pas la notation exponentielle (par exemple, 2E+9).
    • N'utilisez pas de virgule pour séparer les groupes de chiffres, par exemple 1,000,000.
    • Exemples valides :
      • -0.5
      • 2.99
      • 1000000.123
  • Entier

    • N'envoyez que des valeurs entières sans chiffres décimaux.
    • N'utilisez pas de virgule pour séparer les groupes de chiffres (par exemple, 1 000 000).
    • Exemples valides :
      • 1000
      • -11
      • 0
  • Date

    • Format de la date : aaaa-mm-jj
      • yyyy : année à quatre chiffres (par exemple, 2016)
      • mm = mois à deux chiffres (par exemple, 09 pour septembre)
      • dd : jour à deux chiffres (par exemple, 23 pour le 23e jour du mois)
    • Envoyez toujours le nombre de chiffres spécifié ci-dessus. Par exemple, si vous envoyez la valeur de "dd" pour le 5e jour du mois, envoyez 05.
    • Exemples valides :
      • "2016-09-23"
      • "1990-12-31"
  • Temporel

    • Format de l'heure : code temporel Unix/Epoch en secondes, défini dans le fuseau horaire UTC avec une précision en microsecondes
    • Exemples valides :
      • 1478713087 pour Wed, 09 Nov 2016 17:38:07 GMT
      • 1073513982.123000 pour le mercredi 7 janvier 2004 à 22:19:42.123 GMT
  • Tableaux

    • N'envoyez que des tableaux de valeurs primitives (chaînes, nombres et valeurs booléennes).
    • Exemples valides :
      • [123, 456, 789]
      • ["abc"]

Exemples de requêtes

Voici un exemple de demande de première ouverture �avec le SDK On Device Measurement: Event Data pour la mesure des conversions intégrées :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=first_open
       &odm_info=abcdEfadGdaf
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfv
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=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

Voici un exemple de requête de première ouverture sans le SDK On Device Measurement: Event Data pour la mesure des conversions intégrées :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=first_open
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfv
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=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

Voici un exemple de requête post-installation avec le SDK On Device Measurement: Event Data pour la mesure intégrée des conversions :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=first_open
       &odm_info=abcdEfadGdaf
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfv
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &&fot=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

Voici un exemple de demande de première ouverture sans le SDK On Device Measurement: Event Data :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=first_open
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfv
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=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

Voici un exemple de demande de première ouverture pour une conversion Android non déterministe pour ACAPI v1.1 :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=first_open
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=appsetid
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &ctry_c=IN
Host: www.googleadservices.com
User-Agent: MyAnalyticsCompany/1.0.0 (android 11; en-GB; RMX2040; Build/_; Proxy)
X-Forwarded-For: 216.58.194.174
Content-Type: application/json; charset=utf-8

Voici un exemple de demande de suivi des conversions valide avec un type d'événement non personnalisé et des informations sur les revenus :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=in_app_purchase
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfa
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &value=1.99
       &currency_code=USD
       &market_referrer_gclid=BX3QojHp4mY5MrJtFM_d1u
       &gclid=Cj0KEQjw0dy4BRCuuL_e5M
       &gclid_only_request=0
       &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O
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"]}}

Voici un exemple de demande de suivi des conversions valide avec un type d'événement non personnalisé et des informations sur les revenus lorsque rdid (advertisingid) n'est pas disponible :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=in_app_purchase
       &rdid=00000000-0000-0000-0000-000000000000
       &id_type=advertisingid
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=1
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &value=1.99
       &currency_code=USD
       &market_referrer_gclid=BX3QojHp4mY5MrJtFM_d1u
       &gclid=Cj0KEQjw0dy4BRCuuL_e5M
       &gclid_only_request=1
       &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O
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"]}}

Voici un exemple de requête session start valide :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=session_start
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfa
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &gclid=Cj0KEQjw0dy4BRCuuL_e5M
       &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O
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

Voici un exemple de demande de réattribution du début de session valide pour une session qui a commencé à partir du lien profond example://product/123?gclid=Cj0KEQjw0dy4BRCuuL_e5M :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=session_start
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfa
       &eea=0
       &ad_personalization=1
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &gclid=Cj0KEQjw0dy4BRCuuL_e5M
       &gbraid=ChEI8IixhgYQrufHkIjz3YWRARIzALev_G_O
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

Voici un exemple de demande de suivi des conversions valide pour un utilisateur de l'EEE ayant accordé son consentement pour les données utilisateur publicitaires, mais refusé la personnalisation des annonces :

POST /pagead/conversion/app/1.1
       ?dev_token=Z_eErE4DkvcKjDM1OVE4c4
       &link_id=31FF8D67E5BB5DD5029DCC2734C2F884
       &app_event_type=in_app_purchase
       &rdid=0F7AB11F-DA50-498E-B225-21AC1977A85D
       &id_type=idfa
       &eea=1
       &ad_personalization=0
       &ad_user_data=1
       &lat=0
       &app_version=1.2.4
       &os_version=9.3.2
       &sdk_version=1.9.5r6
       &timestamp=1432681913.123456
       &value=1.99
       &currency_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

Guide de réponse sur le suivi des conversions

La réponse du suivi des conversions se présente au format suivant :

{
  "ad_events": [<ad event objects>],
  "errors": [<error strings>],
  "attributed": true|false
}

Les tableaux ad_events et errors peuvent être vides.

Nous nous attendons à ce que les erreurs soient des codes d'erreur lisibles par machine, par exemple invalid_timestamp.

Codes d'erreur

  • invalid_timestamp : la requête ne comportait pas de code temporel valide.

  • eea_missing_or_invalid : la requête ne comportait pas le champ "eea" ou celui-ci n'était pas valide.

  • ad_user_data_missing : le champ de requête "ad_user_data" n'a pas été défini. Le champ "ad_user_data" est obligatoire pour toutes les demandes concernant la DMA.

  • ad_user_data_invalid : la valeur de la requête "ad_user_data" n'était pas valide. Le champ "ad_user_data" est obligatoire pour toutes les demandes concernant la DMA.

  • ad_personalization_missing_or_invalid : la demande ne comportait pas le champ "ad_personalization" ou il n'était pas valide. Le champ "ad_personalization" est obligatoire pour toutes les demandes DMA concernées.

Les événements d'annonce sont les objets principaux de l'attribution d'application. Ils contiennent les propriétés suivantes.

Remarques importantes concernant le comportement des réponses en fonction du consentement de l'utilisateur :
Si la conversion a obtenu le consentement de l'utilisateur pour les données publicitaires et que l'utilisateur a donné son consentement pour l'utilisation croisée dans ses paramètres utilisateur Google, Google Ads répondra avec un seul dernier clic dans tous ses CPS. Si l'utilisateur n'a pas donné son consentement pour l'utilisation croisée dans ses paramètres utilisateur Google, Google Ads répondra avec plusieurs derniers clics, sur une base de coût par souscription.

Si la conversion inclut certains CPS dans le consentement pour l'utilisation croisée sélectionné par l'utilisateur, mais pas d'autres, Google Ads répondra avec un seul dernier clic pour les CPS ayant obtenu le consentement pour l'utilisation croisée, mais avec plusieurs derniers clics, par CPS, pour ceux n'ayant pas obtenu le consentement pour l'utilisation croisée.

Réponse du suivi des conversions
ad_event_id

Toujours présent


chaîne


ad_event_id sert d'identifiant unique pour les événements publicitaires. Il est réutilisé dans la demande d'attribution multiréseau et doit être consigné/conservé à des fins de débogage.

Q2owS0VRancwZHk0QlJDdXVMX2U1TQ
conversion_metric

Toujours présent


chaîne


Métrique de conversion utilisée pour l'attribution. Dans un premier temps, nous n'accepterons qu'une seule métrique de conversion.

conversion
timestamp

Toujours présent


Total


Code temporel UNIX de l'événement publicitaire, en secondes avec une précision en microsecondes. Cette valeur doit être utilisée pour l'attribution au dernier clic.

1432681913.123456
campaign_type

Toujours présent


chaîne


Ce champ identifie le type de campagne qui a généré l'événement publicitaire. Voici les valeurs possibles :

ACI
ACE
ACPre
Search
Display
Video
Shopping
Hotel
Performance_Max
Other

ACI est l'abréviation de "Campagne pour applications axée sur les installations". ACE est l'abréviation de "Campagnes pour applications axées sur l'engagement".

campaign_id

Toujours présent


Total


ID numérique de la campagne ayant généré l'événement d'annonce. Cette valeur est unique.

123456789
campaign_name

Toujours présent


chaîne


Nom de la campagne défini par l'annonceur qui a généré l'événement publicitaire. Cette valeur n'est pas unique.

Occasional Gamers (Video)
ad_type

Toujours présent


chaîne


Type d'annonce ayant généré l'événement d'annonce. Cette valeur peut être utilisée pour distinguer différents types d'inventaire, comme suit.

Promotion d'applications
ClickToDownload
Engagement avec une application
AppDeepLink
Engagement dans l'application : flux d'installation et de poursuite
AppDeepLinkContinue
Valeur générique pour les autres valeurs
Unknown
external_customer_id

Toujours présent


Total


Identifiant de l'annonceur propriétaire de la campagne ayant généré l'événement publicitaire. Cette valeur peut être utilisée pour différencier les comptes Google Ads.

123456789
location

Toujours présent


Total


Code d'ID de l'emplacement géographique de l'événement publicitaire. Consultez la documentation de référence de l'API Google Ads pour interpréter les codes de localisation.

network_type

Toujours présent


chaîne


Ce champ identifie le réseau publicitaire Google Ads sur lequel l'événement d'annonce s'est produit. Voici les valeurs possibles :

Search
Display
YouTube
GoogleTv
cross-network
network_subtype

La valeur sera null lorsque campaign_type est ACI ou ACE et que network_type est Display.


chaîne


Ce champ identifie le "sous-type" du réseau publicitaire Google Ads sur lequel l'événement publicitaire s'est produit. Les valeurs possibles varient en fonction du type de réseau principal.


Recherche Google ordinaire
GoogleSearch
Partenaires du Réseau de Recherche de Google
SearchPartners

Écran

Éditeurs Web mobiles
mGDN
Éditeurs d'applications
Google AdMob

YouTube

Réseau de vidéos YouTube
YouTubeVideos
Réseau de Recherche YouTube
YouTubeSearch
Partenaires vidéo
VideoPartners

GoogleTv

Réseau de vidéos Google TV
GoogleTvVideos

multiréseau

Performance Max cross-network
cross-network
video_id

Fourni uniquement lorsque network_type est YouTube et que campaign_type n'est pas ACI et ACE.


chaîne


ID de la vidéo YouTube associée à l'événement publicitaire.

dQw4w9WgXcQ
keyword

Fourni uniquement lorsque network_type est Search et que campaign_type n'est pas ACI et ACE.


chaîne


Mot clé de recherche associé à l'événement publicitaire.

+food +delivery
match_type

Fourni uniquement lorsque network_type est Search et que campaign_type n'est pas ACI et ACE.


chaîne


Type de correspondance des mots clés pour le Réseau de Recherche.

Mot clé exact
e
Expression
p
Large
b
placement

Fourni uniquement lorsque network_type est Display et que campaign_type n'est pas ACI et ACE.


chaîne


Emplacement associé à l'événement publicitaire.

mobileapp::1-343200656
ad_group_id

Fourni uniquement lorsque campaign_type n'est pas Performance_Max.


Total


ID numérique du groupe d'annonces ayant généré l'événement d'annonce. Cette valeur est unique.

123456789
ad_group_name

Fourni uniquement lorsque campaign_type est défini sur ACI, ACE ou ACPRE.


chaîne


Nom du groupe d'annonces défini par l'annonceur et ayant généré l'événement d'annonce. Cette valeur n'est pas unique.

My App AdGroup
creative_id

Fourni uniquement lorsque campaign_type n'est pas ACI, ACE, ACPRE ou Performance_Max.


Total


ID numérique du bloc d'annonces de création qui a généré l'événement publicitaire. Cette valeur est unique.

123456789
interaction_type

Ce champ sera toujours défini sur "engagement".


chaîne

is_deterministic

Indique si la méthode d'attribution est déterministe ou non.


Booléen


true, false
device_model

Modèle de l'appareil qui a généré l'événement publicitaire.


Chaîne


sm-s936w, sm-3936w
os_version

Version majeure de l'OS ayant généré l'événement d'annonce.


Chaîne


14, 12
country

Code pays à deux lettres correspondant au pays où l'événement publicitaire s'est produit.


Chaîne


CA, US
city

Ville dans laquelle l'événement publicitaire a été généré.


Chaîne


san jose, london
region

État ou province où l'événement publicitaire s'est produit.


Chaîne


california, british columbia

Exemples de réponses

Voici un exemple de réponse pour une conversion déterministe :

{
  "ad_events": [{
    "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
    "conversion_metric": "conversion",
    "interaction_type": "engagement",
    "campaign_type": "ACI",
    "campaign_id": 123456789,
    "campaign_name": "My App Campaign",
    "network_type": null,
    "network_subtype": null,
    "ad_group_id": null,
    "ad_group_name": null,
    "is_deterministic": true
    "timestamp": 1234567.898765,
  }],
  "errors": [],
  "attributed": true
}

Voici un exemple de réponse pour une conversion non déterministe sur iOS :

{
  "ad_events": [{
    "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
    "conversion_metric": "conversion",
    "interaction_type": "engagement",
    "campaign_type": "ACI",
    "campaign_id": 123456789,
    "campaign_name": "My App Campaign",
    "network_type": null,
    "network_subtype": null,
    "ad_group_id": null,
    "ad_group_name": null,
    "is_deterministic": false
    },
    "device_info": {
        "device_model": "iphone12,3",
        "os_version": "14",
    },
    "timestamp": 1432681918.123456
    }],
  "errors": [],
  "attributed": true
}

Voici un exemple de réponse pour une conversion Android non déterministe :

{
  "ad_events": [
    {
      "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
      "conversion_metric": "conversion",
      "interaction_type": "click",
      "campaign_type": "ACI",
      "campaign_id": 123456789,
      "campaign_name": "My App Campaign",
      "network_type": null,
      "network_subtype": null,
      "ad_group_id": null,
      "ad_group_name": null,
      "is_deterministic": false
      "geo_info": {
        "city": "san jose"
        "country": "US"
        "region": "california"
      },
      "device_info": {
          "device_model": "sm-s926u",
          "os_version": "14",
      },
      "timestamp": 1432681918.123456
    },
    ],
    "errors": [],
    "warnings" [],
  }

Voici un exemple de réponse pour une conversion iOS/Android attribuée par gbraid :

{
  "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,
    "interaction_type": "engagement",
    "network_type": "NULL",
    "is_deterministic": true
    "timestamp": 0.000000,
  }],
  "errors": [],
  "attributed": true
  "warnings" [],
}

Voici un exemple de réponse de suivi des conversions lorsque la demande contenait des erreurs :

{
  "ad_events": [],
  "errors": ["INVALID_CURRENCY_CODE"],
  "attributed": false
}

Voici un exemple de réponse négative au suivi des conversions :

{
  "ad_events": [],
  "errors": [],
  "attributed": false
}

Une réponse de suivi des conversions sera renvoyée pour toutes les demandes de suivi des conversions.

Voici un exemple de réponse de suivi des conversions affirmative pour un utilisateur n'appartenant pas à l'EEE pour une campagne universelle pour applications :

{
  "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,
  "warnings": []
}

Voici un exemple de réponse de suivi des conversions affirmative pour un utilisateur hors EEE pour une campagne sur le Réseau de Recherche :

{
  "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,
  "warnings": []
}

Voici un exemple de réponse de suivi des conversions affirmative pour un utilisateur hors EEE pour une campagne 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,
  "warnings": []
}

Voici un exemple de réponse affirmative pour le suivi des conversions d'une campagne YouTube destinée à un utilisateur hors EEE :

{
  "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,
  "warnings": []
}
{
  "ad_events": [{
    "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
    "conversion_metric": "conversion",
    "interaction_type": "click",
    "campaign_type": "ACI",
    "campaign_id": 123456789,
    "campaign_name": "My App Campaign",
    "ad_type": "ClickToDownload",
    "external_customer_id": 123456789,
    "location": 21144,
    "network_type": "Display",
    "network_subtype": "",
    "video_id": null,
    "keyword": null,
    "match_type": null,
    "placement": null,
    "ad_group_id": null,
    "ad_group_name": "",
    "creative_id": null,
    "timestamp": 1432681913.123456
  },
  {
    "ad_event_id": "I8YUwWqxvOyqcwOcqBAkYZBMaOONSd",
    "conversion_metric": "conversion",
    "interaction_type": "click",
    "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": "",
    "video_id": null,
    "keyword": null,
    "match_type": null,
    "placement": null,
    "ad_group_id": null,
    "ad_group_name": "",
    "creative_id": null,
    "timestamp": 1432681913.123456
  },
  ],
  "errors": [],
  "warnings": [],
  "attributed": true
}
{
  "ad_events": [{
    "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
    "conversion_metric": "conversion",
    "interaction_type": "click",
    "campaign_type": "ACI",
    "campaign_id": 123456789,
    "campaign_name": "My App Campaign",
    "ad_type": "ClickToDownload",
    "external_customer_id": 123456789,
    "location": 21144,
    "network_type": "Display",
    "network_subtype": "",
    "video_id": null,
    "keyword": null,
    "match_type": null,
    "placement": null,
    "ad_group_id": null,
    "ad_group_name": "",
    "creative_id": null,
    "timestamp": 1432681913.123456
  },
  ],
  "errors": [],
  "warnings": [],
  "attributed": true
}
{
  "ad_events": [{
    "ad_event_id": "Q2owS0VRancwZHk0QlJDdXVMX2U1TQ",
    "conversion_metric": "conversion",
    "interaction_type": "click",
    "campaign_type": "ACI",
    "campaign_id": 123456789,
    "campaign_name": "My App Campaign",
    "ad_type": "ClickToDownload",
    "external_customer_id": 123456789,
    "location": 21144,
    "network_type": "Display",
    "network_subtype": "",
    "video_id": null,
    "keyword": null,
    "match_type": null,
    "placement": null,
    "ad_group_id": null,
    "ad_group_name": "",
    "creative_id": null,
    "timestamp": 1432681913.123456
  },
  {
    "ad_event_id": "I8YUwWqxvOyqcwOcqBAkYZBMaOONSd",
    "conversion_metric": "conversion",
    "interaction_type": "click",
    "campaign_type": "ACI",
    "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": null,
    "keyword": null,
    "match_type": null,
    "placement": null,
    "ad_group_id": null,
    "ad_group_name": "",
    "creative_id": null,
    "timestamp": 1432681913.123456
  },
  ],
  "errors": [],
  "warnings": [],
  "attributed": true
}


Demande d'attribution multiréseau

Lorsque Google Ads répond positivement à une demande de suivi des conversions, le consommateur de l'API doit informer Google Ads de sa décision d'attribution cross-réseau après avoir identifié le dernier clic.

La demande d'attribution cross-network est identique à la demande de suivi des conversions d'origine, mais avec un chemin de requête de :

/pagead/conversion/app/1.1/cross_network

et l'ajout de deux paramètres obligatoires :

Demande d'attribution multiréseau
ad_event_id

Obligatoire


Emplacement : requête


Identifiant ad_event_id de l'événement publicitaire associé à l'attribution dans la requête précédente.

attributed

Obligatoire


Emplacement : requête


Indique si Google Ads a reçu le crédit pour la conversion par le consommateur de l'API. 0 ou 1.

Voici un exemple de demande d'attribution multiréseau valide :

POST /pagead/conversion/app/1.1/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
       &timestamp=1432681913.123456
       &value=1.99
       &currency_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

Une demande d'attribution cross-canal valide recevra toujours une réponse 200 générique sans corps de réponse.