Ce guide du développeur explique comment implémenter Google Tag Manager dans un de votre application mobile.
Introduction
Google Tag Manager permet aux développeurs de modifier la configuration dans leurs applications mobiles à l'aide de l'outil sans avoir à recompiler et renvoyer les binaires de l'application à l'application les places de marché.
Cela permet de gérer les valeurs de configuration ou des indicateurs dans votre application que vous devrez peut-être modifier à l'avenir, y compris:
- Différents paramètres d'interface utilisateur et chaînes d'affichage
- Tailles, emplacements ou types des annonces diffusées dans votre application
- Paramètres des jeux
Les valeurs de configuration peuvent aussi être évaluées au moment de l'exécution à l'aide de règles, en activant les configurations dynamiques, par exemple:
- Utiliser la taille de l'écran pour déterminer la taille de la bannière publicitaire
- Utiliser la langue et la zone géographique pour configurer les éléments de l'interface utilisateur
Google TagManager permet également l'implémentation dynamique de balises de suivi. et les pixels dans les applications. Les développeurs peuvent transmettre des événements importants à des données et décider ultérieurement quels pixels ou balises de suivi doivent être déclenchés. TagManager accepte actuellement les balises suivantes:
- Google Mobile App Analytics
- Balise d'appel de fonction personnalisée
Avant de commencer
Avant d'utiliser ce guide de démarrage, vous devez disposer des éléments suivants:
- Un compte Google Tag Manager
- Un nouveau Tag Manager macro de conteneur et de collection de valeurs
- Une application mobile pour Android dans laquelle implémenter Google Tag Manager
- Les services Google Analytics SDK, qui contient la bibliothèque Tag Manager.
Si vous débutez avec Google Tag Manager, nous vous recommandons découvrez-en plus sur les conteneurs, les macros et les règles (centre d'aide) avant de continuer ce guide.
Premiers pas
Cette section guide les développeurs tout au long d'un workflow standard dans Tag Manager:
- Ajouter le SDK Google Tag Manager à votre projet
- Définir les valeurs par défaut des conteneurs
- Ouvrir le conteneur
- Récupérer les valeurs de configuration du conteneur
- Envoyer des événements vers le calque de données
- Prévisualiser et Publier le conteneur
1. Ajouter le SDK Google Tag Manager à votre projet
Avant d'utiliser le SDK Google Tag Manager, vous devez décompresser le package SDK.
et ajouter la bibliothèque au chemin de compilation de votre projet, puis ajouter des autorisations
dans votre fichier AndroidManifest.xml
.
Tout d'abord, ajoutez la bibliothèque Google Tag Manager au dossier /libs
de
votre projet.
Ensuite, mettez à jour votre fichier AndroidManifest.xml pour utiliser autorisations:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
2. Ajouter un fichier de conteneur par défaut à votre projet
Google Tag Manager utilise un conteneur par défaut lors de la première exécution de votre application. La valeur par défaut conteneur sera utilisé jusqu'à ce que l'application puisse récupérer un nouveau conteneur sur le réseau.
Pour télécharger et ajouter un binaire de conteneur par défaut à votre application, procédez comme suit:
- Connectez-vous à l'interface Web de Google Tag Manager.
- Sélectionnez la version du conteneur que vous souhaitez télécharger.
- Cliquez sur le bouton Télécharger pour récupérer le binaire du conteneur.
- Ajoutez le fichier binaire à
le chemin d'accès suivant:
<project-root>/assets/tagmanager/
Le nom de fichier par défaut doit correspondre à l'ID du conteneur (par exemple, GTM-1234
). Une fois que vous avez
téléchargé le fichier binaire, veillez à supprimer le suffixe de version du nom de fichier
pour vous assurer que vous respectez
la convention d'attribution de noms correcte.
Bien qu'il soit recommandé d'utiliser le fichier binaire, si votre conteneur ne contient pas de règles ni de balises, vous pouvez choisir d'utiliser un fichier JSON simple à la place.
Le fichier doit se trouver dans un nouveau /assets/tagmanager
de votre projet Android. Veillez à respecter la convention d'attribution de noms suivante:
<Container_ID>.json
Par exemple, si votre ID de conteneur
est GTM-1234
, vous devez ajouter les valeurs de conteneur par défaut
/assets/tagmanager/GTM-1234.json
3. Ouvrir un conteneur
Avant de récupérer les valeurs d'un conteneur, votre application doit ouvrir le conteneur. En ouvrant un conteneur, vous le chargerez à partir du disque (si disponible). la demandera au réseau (si nécessaire).
Le moyen le plus simple d'ouvrir un conteneur sur Android consiste à utiliser
ContainerOpener.openContainer(..., Notifier notifier)
, comme dans l'exemple suivant:
import com.google.tagmanager.Container; import com.google.tagmanager.ContainerOpener; import com.google.tagmanager.ContainerOpener.OpenType; import com.google.tagmanager.TagManager; import android.app.Activity; import android.os.Bundle; public class RacingGame { // Add your public container ID. private static final String CONTAINER_ID = "GTM-YYYY"; volatile private Container mContainer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TagManager mTagManager = TagManager.getInstance(this); // The container is returned to containerFuture when available. ContainerOpener.openContainer( mTagManager, // TagManager instance. CONTAINER_ID, // Tag Manager Container ID. OpenType.PREFER_NON_DEFAULT, // Prefer not to get the default container, but stale is OK. null, // Time to wait for saved container to load (ms). Default is 2000ms. new ContainerOpener.Notifier() { // Called when container loads. @Override public void containerAvailable(Container container) { // Handle assignment in callback to avoid blocking main thread. mContainer = container; } } ); // Rest of your onCreate code. } }
Dans cet exemple, ContainerOpener.openContainer(..., Notifier notifier)
est utilisé pour
demander un conteneur enregistré dans l'espace de stockage local. En gérant l'affectation de
mContainer
dans le rappel containerAvailable
, nous nous assurons que
le thread principal n'est pas bloqué. Si le conteneur enregistré date de plus de 12 heures,
planifiera également une requête de récupération asynchrone d'un nouveau conteneur
sur le réseau.
Cet exemple d'implémentation représente le moyen le plus simple d'ouvrir et de récupérer
à partir d'un conteneur à l'aide de la classe pratique ContainerOpener
.
Pour connaître les options d'implémentation plus avancées, consultez Configuration avancée.
4. Obtenir des valeurs de configuration à partir du conteneur
Une fois le conteneur ouvert, les valeurs de configuration peuvent être récupérées à l'aide de
le get<type>Value()
méthodes:
// Retrieving a configuration value from a Tag Manager Container. // Get the configuration value by key. String title = mContainer.getStringValue("title_string");
Les requêtes effectuées avec une clé inexistante renverront une valeur par défaut appropriée au type demandé:
// Empty keys will return a default value depending on the type requested. // Key does not exist. An empty string is returned. string subtitle = container.getStringValue("Non-existent-key"); subtitle.equals(""); // Evaluates to true.
5. Transmettre des valeurs à la couche de données
La couche de données est une carte qui fournit des informations sur l'exécution de votre application, comme des données tactiles ou les visionnages d'écran, sont disponibles pour les macros et les tags Tag Manager dans un conteneur.
Par exemple, en transférant des informations sur les vues d'écran dans la carte DataLayer, vous pouvez configurer des balises dans l'interface Web de Tag Manager pour déclencher des pixels de conversion et le suivi des appels en réponse à ces visionnages d'écran, sans avoir à effectuer les coder dans votre application.
Les événements sont transmis au calque de données à l'aide de push()
et de la
Méthode d'assistance DataLayer.mapOf()
:
// // MainActivity.java // Pushing an openScreen event with a screen name into the data layer. // import com.google.tagmanager.TagManager; import com.google.tagmanager.DataLayer; import android.app.Activity; import android.os.Bundle; public MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // This screen becomes visible when Activity.onStart() is called. public void onStart() { super.onStart(); // The container should have already been opened, otherwise events pushed to // the DataLayer will not fire tags in that container. DataLayer dataLayer = TagManager.getInstance(this).getDataLayer(); dataLayer.push(DataLayer.mapOf("event", "openScreen", // The event type. This value should be used consistently for similar event types. "screenName", // Writes a key "screenName" to the dataLayer map. "Home Screen") // Writes a value "Home Screen" for the "screenName" key. ); } // Rest of the Activity implementation }
Dans l'interface Web, vous pouvez désormais créer des balises (comme les balises Google Analytics). à déclencher pour chaque visionnage de l'écran en créant la règle suivante: est égal(e) à "openScreen". Pour transmettre le nom d'écran à l'une de ces balises, créez une macro de couche de données qui fait référence au paramètre "screenName" dans la couche de données. Vous pouvez également créer un tag (comme un pixel de conversion Google Ads) pour qu'il ne se déclenche que pour des visionnages d'écran spécifiques, création d'une règle où est égal à "openScreen" && est égal à "ConfirmationScreen".
6. Prévisualisation et Publier un conteneur
Les valeurs de macro correspondent toujours à la version actuellement publiée. Avant de publier la dernière version d'un conteneur, vous pouvez prévisualiser votre conteneur brouillon.
Pour prévisualiser un conteneur, générez une URL d'aperçu dans
Interface Web Tag Manager en sélectionnant la version du conteneur
à prévisualiser, puis sélectionnez Preview
. Accrochez-vous sur
cette URL d'aperçu, car vous en aurez besoin lors des prochaines étapes.
![Les URL d'aperçu sont disponibles dans la fenêtre d'aperçu du tag.
Interface Web du gestionnaire](https://developers.google.cn/static/tag-platform/tag-manager/images/android/v3/preview.png?hl=fr)
Ensuite, ajoutez l'activité suivante au fichier
Fichier AndroidManifest.xml
:
<!-- Google Tag Manager Preview Activity --> <activity android:name="com.google.tagmanager.PreviewActivity" android:label="@string/app_name" android:noHistory="true" > <!-- Optional, removes the PreviewActivity from activity stack. --> <intent-filter> <data android:scheme="tagmanager.c.application_package_name" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
Ouvrez le lien dans un émulateur ou sur un appareil physique pour prévisualiser le brouillon du conteneur dans votre application.
Lorsque vous êtes prêt à rendre vos brouillons de valeurs de configuration disponibles application, publier le conteneur.
Configuration avancée
Google Tag Manager pour mobile propose un certain nombre d'options de configuration avancées qui vous permettent de sélectionner des valeurs en fonction de conditions d'exécution des règles, actualiser manuellement le conteneur et obtenir des options supplémentaires conteneurs. Les sections suivantes décrivent plusieurs des méthodes les plus couramment utilisées de configuration.
Options avancées pour l'ouverture de conteneurs
Le SDK Google Tag Manager propose plusieurs méthodes pour ouvrir pour mieux contrôler le processus de chargement:
TagManager.openContainer()
TagManager.openContainer()
est le niveau d'API le plus bas et le plus flexible pour ouvrir un
conteneur. Il renvoie immédiatement un conteneur par défaut
charge également un conteneur de manière asynchrone à partir du disque ou du réseau si aucun enregistrement
existe, ou si le conteneur enregistré n'est pas à jour (datant de plus de 12 heures).
mContainer = tagManager.openContainer(CONTAINER_ID, new Container.Callback() { // Called when a refresh is about to begin for the given refresh type. @Override public void containerRefreshBegin(Container container, RefreshType refreshType) { // Notify UI that the Container refresh is beginning. } // Called when a successful refresh occurred for the given refresh type. @Override public void containerRefreshSuccess(Container container, RefreshType refreshType]) { // Notify UI that Container is ready. } // Called when a refresh failed for the given refresh type. @Override public void containerRefreshFailure(Container container, RefreshType refreshType, RefreshFailure refreshFailure) { // Notify UI that the Container refresh has failed. }
Tout au long du processus de chargement, TagManager.openContainer()
problèmes
plusieurs rappels de cycle de vie, afin que votre code puisse déterminer à quel moment
requête de chargement lancée, l'état de l'échec ou de la réussite, et si
le conteneur a finalement été chargé
à partir du disque ou du réseau.
À moins que votre application n'accepte d'utiliser les valeurs par défaut, vous devrez utiliser ces rappels pour savoir quand une connexion réseau ou enregistrée conteneur est chargé. Notez que vous ne pourrez pas charger un fichier conteneur réseau s'il s'agit de la première exécution de l'application et qu'il n'y a pas la connexion réseau.
TagManager.openContainer()
transmet les enum
suivantes
en tant qu'arguments à ces rappels:
RefreshType
Valeur | Description |
---|---|
Container.Callback.SAVED
|
La requête d'actualisation charge un conteneur enregistré localement. |
Container.Callback.NETWORK
|
La requête d'actualisation charge un conteneur sur le réseau. |
RefreshFailure
Valeur | Description |
---|---|
Container.Callback.NO_SAVED_CONTAINER
|
Aucun conteneur enregistré n'est disponible. |
Container.Callback.IO_ERROR
|
Une erreur d'E/S a empêché l'actualisation du conteneur. |
Container.Callback.NO_NETWORK
| Aucune connexion réseau disponible. |
Container.Callback.NETWORK_ERROR
|
Une erreur réseau s'est produite. |
Container.Callback.SERVER_ERROR
|
Une erreur s'est produite sur le serveur. |
Container.Callback.UNKNOWN_ERROR
|
Une erreur qui n'a pas pu être classée s'est produite. |
Méthodes d'ouverture de conteneurs nouveaux et non par défaut
ContainerOpener
: retours à la ligne TagManager.openContainer()
et propose deux méthodes pratiques pour ouvrir des conteneurs:
ContainerOpener.openContainer(..., Notifier notifier)
et
ContainerOpener.openContainer(..., Long timeoutInMillis)
Chacune de ces méthodes prend une énumération demandant une valeur autre que celle par défaut ou conteneur récent.
OpenType.PREFER_NON_DEFAULT
est recommandé pour la plupart des applications et
tente de renvoyer le premier conteneur autre que celui par défaut disponible dans un
un délai avant expiration, à partir du disque ou du réseau, même si ce conteneur est supérieur
datant de plus de 12 heures. S'il renvoie un conteneur enregistré non actualisé, il génère également une
une requête réseau asynchrone
pour en créer une nouvelle.
Lorsque vous utilisez OpenType.PREFER_NON_DEFAULT
, une valeur par défaut
est renvoyé si aucun autre conteneur n'est disponible ou si le délai avant expiration est
dépassé.
OpenType.PREFER_FRESH
tente de renvoyer un conteneur actualisé depuis
disque ou réseau dans le délai d'expiration donné.
Elle renvoie un conteneur enregistré si un réseau
La connexion est indisponible et/ou le délai avant expiration est dépassé.
Il est déconseillé d'utiliser OpenType.PREFER_FRESH
dans les endroits où un délai de requête plus long
peut sensiblement affecter l'expérience utilisateur,
comme les indicateurs d'UI
ou les chaînes d'affichage. Vous pouvez également utiliser
Container.refresh()
à tout moment
pour forcer une requête de conteneur réseau.
Ces deux méthodes pratiques ne sont pas bloquantes.
ContainerOpener.openContainer(..., Long timeoutInMillis)
renvoie un
Un objet ContainerOpener.ContainerFuture
, dont la méthode get
renvoie une
Container
dès que le chargement est terminé (mais l'opération sera bloquée jusqu'à cette date).
La méthode ContainerOpener.openContainer(..., Notifier notifier)
accepte un seul rappel,
appelé lorsque le conteneur est disponible,
permettant d'éviter de bloquer le thread principal.
Les deux méthodes ont un délai avant expiration par défaut de
2000
millisecondes.
Évaluer les macros au moment de l'exécution à l'aide de règles
Les conteneurs peuvent évaluer les valeurs au moment de l'exécution à l'aide de règles. Les règles peuvent être basées en fonction de critères tels que la langue de l'appareil, la plate-forme ou toute autre valeur de macro. Pour Par exemple, des règles peuvent être utilisées pour sélectionner une chaîne à afficher localisée en fonction de l'appareil lors de l'exécution. Vous pouvez configurer cette fonctionnalité à l'aide du la règle suivante:
![Une règle permet de sélectionner les chaînes à afficher en fonction de la langue de l'appareil à l'adresse
runtime: language=es. Cette règle utilise la langue prédéfinie
et un code de langue ISO 639-1 à deux caractères.](https://developers.google.cn/static/tag-platform/tag-manager/images/android/v3/rules.png?hl=fr)
Vous pouvez ensuite créer des macros de collection de valeurs pour chaque langue, puis ajouter ces à chaque macro, en insérant le code de langue approprié. Lorsque ce conteneur est publiée, votre application pourra afficher l'affichage localisé en fonction de la langue de l'appareil de l'utilisateur lors de l'exécution.
Notez que si votre conteneur par défaut a besoin de règles, vous devez utiliser fichier de conteneur binaire comme valeur par défaut. conteneur.
En savoir plus sur la configuration des règles (centre d'aide)
Fichiers de conteneur binaire par défaut
Les conteneurs par défaut nécessitant des règles doivent utiliser un fichier de conteneur binaire au lieu d'un fichier JSON fichier comme conteneur par défaut. Les conteneurs binaires permettent de déterminer des valeurs de macro lors de l'exécution avec les règles Google Tag Manager, JSON ce n'est pas le cas des fichiers.
Vous pouvez télécharger les fichiers des conteneurs binaires à partir de l'interface Web de Google Tag Manager.
de commande et
doit être ajouté à l'espace de noms
/assets/tagmanager/
, puis suivez le schéma ci-dessous:
/assets/tagmanager/GTM-XXXX
, où le nom du fichier représente votre
de votre conteneur.
Lorsqu'un fichier JSON ainsi qu'un fichier de conteneur binaire, le SDK utilisera comme conteneur par défaut.
Utilisation des macros d'appel de fonction
Les macros d'appel de fonction sont des macros définies sur la valeur renvoyée par une fonction spécifiée dans votre application. Les macros d'appel de fonction peuvent être utilisées pour d'intégrer des valeurs d'exécution dans vos règles Google Tag Manager, déterminer le prix à présenter à un utilisateur au moment de l'exécution en fonction du prix la langue et la devise d'un appareil.
Pour configurer une macro d'appel de fonction:
- Définissez la macro d'appel de fonction dans l'interface Web de Google Tag Manager. Les arguments peuvent éventuellement être configurés en tant que paires clé/valeur.
- Enregistrez un
FunctionCallMacroHandler
dans votre application à l'aide deContainer.registerFunctionCallMacroHandler()
et le nom de la fonction que vous avez configurée dans l'interface Web de Google Tag Manager, en remplaçant MéthodegetValue()
:/** * Registers a function call macro handler. * * @param functionName The function name field, as defined in the Google Tag * Manager web interface. */ mContainer.registerFunctionCallMacroHandler(functionName, new FunctionCallMacroHandler() { /** * This code will execute when any custom macro's rule(s) evaluate to true. * The code should check the functionName and process accordingly. * * @param functionName Corresponds to the function name field defined * in the Google Tag Manager web interface. * @param parameters An optional map of parameters * as defined in the Google Tag Manager web interface. */ @Override public Object getValue(String functionName, Map<String, Object> parameters)) { if (functionName.equals("myConfiguredFunctionName")) { // Process and return the calculated value of this macro accordingly. return macro_value } return null; } });
Utiliser les tags d'appel de fonction
Les tags d'appel de fonction permettent d'exécuter des fonctions préenregistrées à chaque fois
un événement est transmis à la couche de données, et les règles de tag
= true
.
Pour configurer une balise d'appel de fonction:
- Définissez la balise d'appel de fonction dans l'interface Web de Google Tag Manager. Les arguments peuvent éventuellement être configurés en tant que paires clé/valeur.
- Enregistrez un gestionnaire de tags d'appel de fonction dans votre application à l'aide de
Container.registerFunctionCallTagHandler()
:/** * Register a function call tag handler. * * @param functionName The function name, which corresponds to the function name field * Google Tag Manager web interface. */ mContainer.registerFunctionCallTagHandler(functionName, new FunctionCallTagHandler() { /** * This method will be called when any custom tag's rule(s) evaluates to true. * The code should check the functionName and process accordingly. * * @param functionName The functionName passed to the functionCallTagHandler. * @param parameters An optional map of parameters as defined in the Google * Tag Manager web interface. */ @Override public void execute(String functionName, Map<String, Object> parameters) { if (functionName.equals("myConfiguredFunctionName")) { // Process accordingly. } } });
Définir une période d'actualisation personnalisée
Le SDK Google Tag Manager tente de récupérer
un nouveau conteneur si son ancienneté
est supérieure à 12 heures. Pour définir un
période d'actualisation personnalisée du conteneur, utilisez
Timer
, comme dans
l'exemple suivant:
timer.scheduleTask(new TimerTask() { @Override public void run() { mContainer.refresh(); } }, delay, <new_period_in milliseconds>);
Déboguer avec Logger
Par défaut, le SDK Google Tag Manager imprime les erreurs et les avertissements dans les journaux.
L'activation d'une journalisation plus détaillée peut être utile pour le débogage et est possible en
implémenter votre propre Logger
avec
TagManager.setLogger
, comme dans cet exemple:
TagManager tagManager = TagManager.getInstance(this); tagManager.setLogger(new Logger() { final String TAG = "myGtmLogger"; // Log output with verbosity level of DEBUG. @Override public void d(String arg0) { Log.d(TAG, arg0); } // Log exceptions when provided. @Override public void d(String arg0, Throwable arg1) { Log.d(TAG, arg0); arg1.printStackTrace(); } // Rest of the unimplemented Logger methods. });
Ou, vous pouvez définir le LogLevel
de l'enregistreur existant en utilisant
TagManager.getLogger().setLogLevel(LogLevel)
,
comme dans cet exemple:
// Change the LogLevel to INFO to enable logging at INFO and higher levels. TagManager tagManager = TagManager.getInstance(this); tagManager.getLogger().setLogLevel(LogLevel.INFO);