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. ( Notez que si le user-agent est construit côté client, Android// Specified by API consumer. iOS// Specified by API consumer. |
version | Version du produit Analytics/Ads.
( 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. ( AndroidString osAndVersion = "Android " + Build.VERSION.RELEASE; iOSUIDevice *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.
( AndroidString locale = Locale.getDefault(); iOSNSString *locale = [[NSLocale currentLocale] localeIdentifier] |
device | Nom de l'appareil physique sur lequel le produit Analytics/Ads est exécuté.
( 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/" suivi du numéro de build du système d'exploitation.
( 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]; } |
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)
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
1.0
.
Une demande de conversion d'application standard contient les paramètres suivants.
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 |
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 level_achieved Level Achieved Ce champ ne doit contenir aucune des valeurs réservées à |
app_event_data |
Facultatif Emplacement : corps Transmettez toutes les données d'événement enrichi 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} |
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 |
id_type |
Obligatoire Emplacement : requête Type d'identifiant stocké dans le champ Androidadvertisingid iOSidfa |
eea |
Obligatoire sous certaines conditions Emplacement : requête Champ d'application EEA.
|
ad_personalization |
Obligatoire sous certaines conditions Emplacement : requête Indicateurs pour les annonces personnalisées
|
ad_user_data |
Obligatoire sous certaines conditions Emplacement : requête Indicateur de consentement pour l'utilisation des données utilisateur à des fins publicitaires
|
lat |
Obligatoire Emplacement : requête État de la fonctionnalité "Limiter le suivi des annonces" pour l'appareil.
|
app_version |
Obligatoire Emplacement : requête Version actuelle de l'application. Elle doit être standardisée comme suit. AndroidpackageManager.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. Androidandroid.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 1.9.5r6 |
timestamp |
Obligatoire Emplacement : requête Code temporel UNIX de l'événement de conversion, en secondes, avec une précision pouvant aller jusqu'à la microseconde. 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 USD |
gclid |
Obligatoire sous certaines conditions Emplacement : requête Valeur du paramètre de requête Cj0KEQjw0dy4BRCuuL_e5M |
market_referrer_gclid |
Obligatoire sous certaines conditions Emplacement : requête Valeur du paramètre de requête BX3QojHp4mY5MrJtFM_d1u |
gclid_only_request |
Obligatoire sous certaines conditions Emplacement : requête Identifiant pour l'attribution basée sur 1 |
gbraid |
Obligatoire sous certaines conditions Emplacement : requête Valeur 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 enrichi 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.
Exemple de demande
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.0 ?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 ×tamp=1432681913.123456 &value=1.99 ¤cy_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 pour lesquels rdid (advertisingid) n'est pas 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 &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 ×tamp=1432681913.123456 &value=1.99 ¤cy_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.0 ?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 ×tamp=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.0 ?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 ×tamp=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.0 ?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 ×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
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"
- Format de la date : aaaa-mm-jj
Temporel
- Format de l'heure : code temporel Unix/Epoch défini dans le fuseau horaire UTC, avec une précision allant jusqu'à la microseconde
- Exemples valides :
1478713087
pour Wed, 09 Nov 2016 17:38:07 GMT1073513982.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"]
Réponse du 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 prévoyons que les erreurs seront 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 : le champ "eea" n'était pas défini dans la requête ou 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 DMA concernées.
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 DMA concernées.
ad_personalization_missing_or_invalid : la requête ne comportait pas le champ "ad_personalization" ou il n'était pas valide. Le champ "ad_personalization" est obligatoire pour toutes les demandes concernant les ZMD.
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 pour lesquels l'utilisateur a accordé l'autorisation d'utilisation croisée, mais pas d'autres, Google Ads répondra avec un seul dernier clic pour les CPS pour lesquels l'autorisation d'utilisation croisée a été accordée, mais avec plusieurs derniers clics, par CPS, pour ceux pour lesquels l'autorisation d'utilisation croisée n'a pas été accordée.
Réponse du suivi des conversions | |
---|---|
ad_event_id |
Toujours présent chaîne
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 pouvant aller jusqu'à la microseconde. 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 d'annonce. 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 publicitaire. 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'applicationsClickToDownload AppDeepLink AppDeepLinkContinue 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 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. RechercherRecherche Google ordinaireGoogleSearch SearchPartners ÉcranÉditeurs Web mobilesmGDN Google AdMob YouTubeRéseau de vidéos YouTubeYouTubeVideos YouTubeSearch VideoPartners GoogleTvRéseau de vidéos Google TVGoogleTvVideos multiréseauPerformance Max cross-networkcross-network |
video_id |
Fourni uniquement lorsque chaîne ID de la vidéo YouTube associée à l'événement publicitaire. dQw4w9WgXcQ |
keyword |
Fourni uniquement lorsque chaîne Mot clé de recherche associé à l'événement publicitaire. +food +delivery |
match_type |
Fourni uniquement lorsque chaîne Type de correspondance des mots clés pour le Réseau de Recherche. Mot clé exacte p b |
placement |
Fourni uniquement lorsque chaîne Emplacement associé à l'événement publicitaire. mobileapp::1-343200656 |
ad_group_id |
Fourni uniquement lorsque 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 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 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 "engagement". chaîne |
Exemples de réponses
Voici un exemple de réponse de suivi des conversions lorsque la requête 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 hors EEE dans 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": [] }
Voici un exemple de réponse de suivi des conversions attribuées dans laquelle la conversion est attribuée à la fois aux interactions avec les annonces Play et sur le Réseau de Recherche, mais le consentement pour l'utilisation croisée 5(2)(b) + 5(2)(c) est refusé entre les CPS Play et sur le Réseau de Recherche :
{ "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 }
Voici un exemple de réponse de suivi des conversions attribuées, où la conversion est attribuée à la fois aux interactions avec les annonces Play et sur le Réseau de Recherche, et où le consentement pour l'utilisation croisée 5(2)(b) + 5(2)(c) est accepté entre les CPS Play et sur le Réseau de Recherche. Le comportement de conversion est similaire à celui d'aujourd'hui :
{ "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 }
Voici un exemple de réponse de suivi des conversions attribuées, où la conversion est attribuée à la fois aux interactions avec les annonces Play, sur le Réseau de Recherche et YouTube, et où le consentement pour l'utilisation croisée 5(2)(b) + 5(2)(c) est accepté entre les CPS Play et sur le Réseau de Recherche, mais refusé pour la CPS YouTube :
{ "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.0/cross_network
et l'ajout de deux paramètres obligatoires :
Demande d'attribution multiréseau | |
---|---|
ad_event_id |
Obligatoire Emplacement : requête Identifiant |
attributed |
Obligatoire Emplacement : requête Indique si Google Ads a reçu le crédit pour la conversion par le consommateur de l'API. |
Voici un exemple de demande d'attribution multiréseau valide :
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
Une demande d'attribution cross-network valide recevra toujours une réponse 200 générique sans corps de réponse.