Comercio electrónico mejorado de Universal Analytics para Android

Google Analytics ofrece el método de seguimiento Comercio electrónico mejorado en propiedades de Universal Analytics. Este método permite medir las interacciones del usuario con productos a lo largo de toda la experiencia de compra. Estas interacciones pueden ser impresiones de promociones o de productos, clics en promociones o en productos, vistas de detalles de productos, inclusiones o eliminaciones de productos en el carrito de la compra, inicios del proceso de pago, transacciones o reembolsos.

Las últimas versiones de Google Tag Manager y Google Analytics para aplicaciones móviles funcionan con Firebase, la plataforma para aplicaciones móviles de Google. Al medir el rendimiento de una aplicación con el SDK de Firebase, tendrás acceso a numerosos informes de aplicaciones móviles generados automáticamente, que podrás personalizar y complementar aún más con el código de la aplicación. Estos informes incluirán automáticamente datos de las compras en la aplicación procesados por el App Store en iTunes y por Google Play. Se pueden generar otros informes sobre comercio electrónico implementando eventos recomendados para aplicaciones de comercio electrónico. De momento, los informes detallados sobre el comportamiento de compra (Comercio electrónico mejorado) solo están disponibles en las propiedades de Universal Analytics.

En este documento se explica cómo usar Google Tag Manager para aplicaciones móviles con el SDK de Firebase para enviar datos de Comercio electrónico mejorado a propiedades de Universal Analytics.

Primeros pasos

Antes de empezar, debes seguir estos pasos:

  1. Instala y configura Firebase y Google Tag Manager en la aplicación. Asegúrate de que tienes la versión 11 o una posterior del SDK de Firebase para Android.
  2. Importa estos dos paquetes:

    • import com.google.firebase.analytics.FirebaseAnalytics.Event;
    • import com.google.firebase.analytics.FirebaseAnalytics.Param;
  3. En tu contenedor de Tag Manager, crea una variable definida por el usuario llamada "promotions" con la siguiente configuración:

    • Tipo de evento: parámetro personalizado
    • Clave del parámetro de evento: promotions
    • Valor predeterminado: undefined

Implementación

En las secciones siguientes se muestra cómo registrar eventos con los parámetros necesarios para medir este tipo de actividades de Comercio electrónico mejorado:

Impresiones de productos

Para medir impresiones de productos, registra eventos con un parámetro ITEM_LIST y uno o varios artículos (es decir, productos) definidos con los campos correspondientes.

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234");  // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" );
product1.putLong( Param.INDEX, 1 );     // Position of the item in the list

Bundle product2 = new Bundle();
product2.putString( Param.ITEM_ID, "sku5678");
product2.putString( Param.ITEM_NAME, "Android Workout Capris");
product2.putString( Param.ITEM_CATEGORY, "Apparel/Women/Pants");
product2.putString( Param.ITEM_VARIANT, "Black");
product2.putString( Param.ITEM_BRAND, "Google");
product2.putDouble( Param.PRICE, 39.99 );
product2.putString( Param.CURRENCY, "USD" );
product2.putLong( Param.INDEX, 2 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);
items.add(product2);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set relevant bundle-level parameters

ecommerceBundle.putString( Param.ITEM_LIST, "Search Results" ); // List name

// Log view_search_results or view_item_list event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.VIEW_SEARCH_RESULTS, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: Screen View
  • Configurar campos: "screenName" como el campo del nombre de la página y, por ejemplo, la pantalla de resultados de búsqueda como valor
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos), por ejemplo, que el nombre del evento sea igual a "view_search_results"

Selecciones de productos o clics en productos

Para medir clics en productos, registra eventos SELECT_CONTENT con un artículo (es decir, un producto) definido con los campos correspondientes:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.INDEX, 1 ); // Position of the item in the list

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Set relevant action-level parameters

ecommerceBundle.putString( Param.ITEM_LIST, "Search Results" ); // Optional list name

// Log select_content event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.SELECT_CONTENT, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, Ecommerce
  • Acción de evento: por ejemplo, clic en un producto
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "select_content" Y &lbrace";&lbrace;promotions&rbrace;&rbrace;" sea igual a "undefined"

Vistas de detalles de productos

Para medir vistas de detalles de productos, registra eventos VIEW_ITEM con un artículo (es decir, un producto) definido con los campos correspondientes:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log view_item event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.VIEW_ITEM, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: Screen View
  • Configurar campos: "screenName" como el campo del nombre de la página y, por ejemplo, la pantalla de detalles del producto como valor
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "view_item" Y
  • "&lbrace;&lbrace;promociones&rbrace;&rbrace;" sea igual a "undefined"

Inclusión de productos en el carrito

Para medir inclusiones de productos en un carrito de la compra, registra eventos ADD_TO_CART con un artículo (es decir, un producto) definido con los campos correspondientes:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log add_to_cart event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.ADD_TO_CART, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, Ecommerce
  • Acción de evento: por ejemplo, añadir al carrito
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos), por ejemplo, que el nombre del evento sea igual a "add_to_cart"

Retirada de productos del carrito

Para medir eliminaciones de productos de un carrito de la compra, registra eventos REMOVE_FROM_CART con un artículo (es decir, un producto) definido con los campos correspondientes:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log remove_from_cart event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.REMOVE_FROM_CART, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, Ecommerce
  • Acción de evento: por ejemplo, quitar del carrito
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "remove_from_cart"

Impresiones de promociones

Para medir impresiones de promociones, registra eventos VIEW_ITEM, VIEW_ITEM_LIST o VIEW_SEARCH_RESULTS con un artículo de promoción definido con los campos correspondientes:

// Define promotion with relevant parameters

Bundle promotion = new Bundle();
promotion.putString( Param.ITEM_ID, "PROMO_1234" ); // promotion ID; either ITEM_ID or ITEM_NAME is required
promotion.putString( Param.ITEM_NAME, "Summer Sale" ); // promotion name
promotion.putString( Param.CREATIVE_NAME, "summer_banner2" );
promotion.putString( Param.CREATIVE_SLOT, "banner_slot1" );

// Prepare ecommerce bundle

ArrayList <bundle>promotions = new ArrayList<bundle>();
promotions.add(promotion);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList("promotions", promotions );

// Log view_item, view_item_list, or view_search_results event with ecommerce bundle

mFirebaseAnalytics.logEvent(Event.VIEW_ITEM, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, promoción interna
  • Acción de evento: por ejemplo impresión
  • Hit sin interacción: true
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Evento personalizado > Algunos eventos personalizados) por ejemplo, que el nombre del evento sea igual a "view_item" Y
  • "&lbrace;&lbrace;promociones&rbrace;&rbrace;" no sea igual a "undefined"

Selecciones de promociones o clics en promociones

Para medir clics en promociones, registra un evento SELECT_CONTENT con una promoción definida con los campos correspondientes:

// Define promotion with relevant parameters

Bundle promotion = new Bundle();
promotion.putString( Param.ITEM_ID, "PROMO_1234"); // promotion ID; either ITEM_ID or ITEM_NAME is required
promotion.putString( Param.ITEM_NAME, "Summer Sale"); // promotion name
promotion.putString( Param.CREATIVE_NAME, "summer_banner2");
promotion.putString( Param.CREATIVE_SLOT, "banner_slot1");

// Prepare ecommerce bundle

ArrayList <bundle>promotions = new ArrayList<bundle>();
promotions.add(promotion);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList("promotions", promotions );

// Set properties for the event to be shown in the Google Analytics (Firebase) reports.
// These properties will not impact the Universal Analytics reporting.

ecommerceBundle.putString( Param.CONTENT_TYPE, “Internal Promotions” );
ecommerceBundle.putString( Param.ITEM_ID, "PROMO_1234" );

// Log select_content, view_item_list, or view_search_results event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.SELECT_CONTENT, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, promoción interna
  • Acción de evento: por ejemplo, clic
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Evento personalizado > Algunos eventos personalizados) por ejemplo, que el nombre de evento sea igual a "select_content" Y "&lbrace;&lbrace;promotions&rbrace;&rbrace;" no sea igual a "undefined"

Proceso de tramitación de la compra

Inicio de la tramitación de la compra

Para medir el primer paso de un proceso de tramitación de compra, registra un evento BEGIN_CHECKOUT con uno o varios artículos (es decir, productos) definidos con los campos correspondientes:

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set checkout step and optional checkout option

ecommerceBundle.putLong( Param.CHECKOUT_STEP, 1 ); // Optional for first step
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Visa" ); // Optional

// Log BEGIN_CHECKOUT event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.BEGIN_CHECKOUT, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: Screen View
  • Configurar campos: "screenName" como el campo del nombre de la página y, por ejemplo, la página del carrito como valor
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Evento personalizado > Algunos eventos personalizados) por ejemplo, que el nombre del evento sea igual a "begin_checkout"

Pasos adicionales de la tramitación de la compra

Para medir pasos adicionales de un proceso de tramitación de compra, registra eventos CHECKOUT_PROGRESS con uno o varios artículos (es decir, productos) definidos con los campos correspondientes:

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set checkout step and optional checkout option

ecommerceBundle.putLong( Param.CHECKOUT_STEP, 2 );
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Visa" ); // Optional

// Log CHECKOUT_PROGRESS event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.CHECKOUT_PROGRESS, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: Screen View
  • Configurar campos: "screenName" como el campo del nombre de la página y, por ejemplo, la página del segundo paso de tramitación de la compra como valor
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Evento personalizado > Algunos eventos personalizados) por ejemplo, que el nombre del evento sea igual a "checkout_progress"

Opciones de pago

Las opciones de pago permiten medir información adicional sobre el estado del proceso de tramitación de la compra. Puedes medirlas como parte de un evento correspondiente a un paso de la tramitación de la compra (como hemos visto más arriba) o cuando un usuario seleccione una opción después de que ya se haya registrado el evento correspondiente a un determinado paso de dicha tramitación.

Para medir estas opciones después de un paso de tramitación de la compra, registra eventos SET_CHECKOUT_OPTION con los parámetros CHECKOUT_STEP y CHECKOUT_OPTION correspondientes:

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putLong( Param.CHECKOUT_STEP, 2 );
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Mastercard" );
mFirebaseAnalytics.logEvent( Event.SET_CHECKOUT_OPTION, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, Ecommerce
  • Acción de evento: por ejemplo, definir la opción de pago
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "set_checkout_option"

Compras

Para medir compras, registra eventos ECOMMERCE_PURCHASE con uno o varios artículos (es decir, productos) definidos con los campos correspondientes:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

Bundle product2 = new Bundle();
product2.putString( Param.ITEM_ID, "sku5678");
product2.putString( Param.ITEM_NAME, "Android Workout Capris");
product2.putString( Param.ITEM_CATEGORY, "Apparel/Women/Pants");
product2.putString( Param.ITEM_VARIANT, "Black");
product2.putString( Param.ITEM_BRAND, "Google");
product2.putDouble( Param.PRICE, 39.99 );
product2.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product2.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);
items.add(product2);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set relevant transaction-level parameters

ecommerceBundle.putString( Param.TRANSACTION_ID, "T12345" );
ecommerceBundle.putString( Param.AFFILIATION, "Google Store - Online" );
ecommerceBundle.putDouble( Param.VALUE, 37.39 );    // Revenue
ecommerceBundle.putDouble( Param.TAX, 2.85 );
ecommerceBundle.putDouble( Param.SHIPPING, 5.34 );
ecommerceBundle.putString( Param.CURRENCY, "USD" );
ecommerceBundle.putString( Param.COUPON, "SUMMER2017" );

// Log ecommerce_purchase event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.ECOMMERCE_PURCHASE, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: Screen View
  • Configurar campos: "screenName" como el campo del nombre de la página y, por ejemplo, la pantalla de agradecimiento por la compra como valor
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "ecommerce_purchase"

Reembolsos

Para medir reembolsos, registra eventos PURCHASE_REFUND con el ID de transacción correspondiente especificado y, si quieres (para reembolsos parciales), uno o varios artículos (es decir, productos) definidos con los IDs de artículo y las cantidades:

// Prepare ecommerce bundle with transaction ID to be refunded

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putString( Param.TRANSACTION_ID, "T12345" ); // Required
ecommerceBundle.putDouble( Param.VALUE, 37.39 ); // Optional in Universal Analytics

// (OPTIONAL) For partial refunds, define the item IDs and quantities of products being refunded

Bundle refundedProduct = new Bundle();
refundedProduct.putString( Param.ITEM_ID, "sku1234" ); // Required for partial refund
refundedProduct.putLong( Param.QUANTITY, 1 ); // Required for partial refund

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(refundedProduct);
ecommerceBundle.putParcelableArrayList( "items", items );

// Log purchase_refund event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.PURCHASE_REFUND, ecommerceBundle );

Ver la configuración de etiqueta de este ejemplo

  • Tipo de etiqueta: Universal Analytics
  • Tipo de seguimiento: evento
  • Categoría de evento: por ejemplo, Ecommerce
  • Acción de evento: por ejemplo, reembolso
  • Habilitar funciones de Comercio electrónico mejorado: true
  • Leer datos de: evento de Firebase
  • Activador: (Personalizado > Algunos eventos) por ejemplo, que el nombre del evento sea igual a "purchase_refund"