Implementación del Administrador de etiquetas de Google en Android
Estoy intentando implementar el Administrador de etiquetas de Google siguiendo este tutorial: https://developers.google.com/tag-manager/android/v4/
Cuando ejecuto la aplicación, consigo en la consola estos errores:
- El Administrador de etiquetas de Google envía números enteros en lugar de decimales
- Etiqueta de comercio electrónico mejorada a través de GTM v5 mediante paquete firebase
- Administrador de etiquetas: ¿Cómo cargar el contenedor predeterminado binario?
- Google Tag Manager no se ve en Google Analytics
- Eventos que no disparan en Google Analytics a través del Administrador de etiquetas de Google
05-22 12:27:44.490 V/GoogleTagManager﹕ Attempting to load a container from the resource ID 2131099650 (testconverteo.ismail.converteotag:raw/gtm_default_container) 05-22 12:27:44.520 E/GoogleTagManager﹕ Invalid macro: _gtm.loadEventEnabled 05-22 12:27:44.520 V/GoogleTagManager﹕ loadAfterDelay: containerId=GTM-XXXXX delay=29397190 05-22 12:27:44.530 E/GoogleTagManager﹕ Invalid macro: _gtm.loadEventEnabled 05-22 12:27:44.490 W/GoogleTagManager﹕ Failed to extract the container from the resource file. Resource is a UTF-8 encoded string but doesn't contain a JSON container
Y no tengo datos en Google Analytics en tiempo real, aún más nada que demuestre que mi aplicación es rastreada.
Si alguien ha tenido el mismo problema o ha seguido los mismos pasos y sabe cómo resolver este problema, deje una explicación en el comentario.
Los pasos que he hecho:
- Configuré el SDK de Google Play Services agregando en el builde.gradle (módulo: app) esta parte del código:
compile 'com.google.android.gms:play-services:7.3.0'
- Añado los permisos al archivo AndroidManifest.xml
- Descargar y agregar un binario de contenedor predeterminado a la aplicación
- I Cree una actividad de pantalla de bienvenida donde inicializo GTM siguiendo el patrón del tutorial
- He empujado un evento en un dataLayer
Lo que actualmente tengo en mi actividad de pantalla de inicio es lo siguiente:
public class SplashScreenActivity extends Activity { private static final String CONTAINER_ID = "GTM-XXXX"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splashscreen); TagManager tagManager = TagManager.getInstance(this); tagManager.setVerboseLoggingEnabled(true); PendingResult<ContainerHolder> pending = tagManager.loadContainerPreferNonDefault( CONTAINER_ID, R.raw.gtm_default_container ); pending.setResultCallback(new ResultCallback<ContainerHolder>() { @Override public void onResult(ContainerHolder containerHolder) { ContainerHolderSingleton.setContainerHolder(containerHolder); Container container = containerHolder.getContainer(); if (!containerHolder.getStatus().isSuccess()) { Log.e("IL", "failure loading container"); return; } ContainerHolderSingleton.setContainerHolder(containerHolder); ContainerLoadedCallback.registerCallbacksForContainer(container); containerHolder.setContainerAvailableListener(new ContainerLoadedCallback()); startMainActivity(); } }, 2, TimeUnit.SECONDS); } private void startMainActivity() { Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); startActivity(intent); } private static class ContainerLoadedCallback implements ContainerHolder.ContainerAvailableListener { @Override public void onContainerAvailable(ContainerHolder containerHolder, String containerVersion) { // We load each container when it becomes available. Container container = containerHolder.getContainer(); registerCallbacksForContainer(container); } public static void registerCallbacksForContainer(Container container) { // Register two custom function call macros to the container. container.registerFunctionCallMacroCallback("increment", new CustomMacroCallback()); container.registerFunctionCallMacroCallback("mod", new CustomMacroCallback()); // Register a custom function call tag to the container. container.registerFunctionCallTagCallback("custom_tag", new CustomTagCallback()); } } }
Y en la actividad principal:
public void onStart() { super.onStart(); DataLayer dataLayer = TagManager.getInstance(this).getDataLayer(); dataLayer.pushEvent("Application ouverte", DataLayer.mapOf("login page","un de plus")); }
Y también he creado esta clase:
public class ContainerHolderSingleton { private static ContainerHolder containerHolder; /** * Utility class; don't instantiate. */ private ContainerHolderSingleton() { } public static ContainerHolder getContainerHolder() { return containerHolder; } public static void setContainerHolder(ContainerHolder c) { containerHolder = c; } }
Tenga en cuenta que he ocultado el ID de contenedor del Administrador de etiquetas de Google
Hazme saber si alguien quiere más información
Gracias
- Experimentos de contenido de Android con el Administrador de etiquetas no muestra sesiones después de varios días
- Administrador de etiquetas de Google lanza mensaje de "macro no válida"
- Android - Administrador de etiquetas de Google con Google Analytics y Firebase Analytics
- La aplicación deja de responder después de reanudar desde el fondo a veces. ¿Podría culpar a Firebase?
- Cómo implementar Google Tag Manager en Córdoba
- Contenedor de descarga binaria de Google Tag Manager V4
- El Administrador de etiquetas de Google para Android no funciona
- ¿Se actualiza automáticamente el contenedor del Gestor de etiquetas de Google? Si es así, ¿cómo / dónde?
Reemplazar línea compile 'com.google.android.gms:play-services:7.3.0'
con compile 'com.google.android.gms:play-services:7.0.0'
o compile 'com.google.android.gms:play-services-analytics:7.0.0'
(que es aún mejor, ya que sólo incluye ga y gtm cosas relacionadas)
Tuve la suerte de empezar con 7.0.0 y vi gtm trabajando. A continuación, actualizado a 7.3.0 y sólo dejó de funcionar. Puede ser arreglado con la nueva librería gms.
Todo eso suponiendo que haya configurado su contenedor. Si no lee más sobre esto, https://support.google.com/tagmanager/answer/6103657?hl=es&ref_topic=3441530