Integración a Google Analytics

La plataforma de Google Analytics te permite medir las interacciones de usuarios con tu negocio en varios dispositivos y entornos. La plataforma proporciona todos los recursos de computación para recopilar, almacenar, procesar y también informar estas interacciones de usuarios.

La recopilación de Analytics puede llevarse a cabo del lado del cliente o del servidor. Google Analytics proporciona API y SDK fáciles de usar para enviar datos a Google Analytics. Además de estos, hemos desarrollado un código que puedes utilizar en tus aplicaciones de App Engine para enviar estadísticas del lado del servidor a Google Analytics fácilmente.

Recopilación de estadísticas del cliente

Con las API y los SDK de recopilación, puedes medir cómo interactúan los usuarios con tu contenido y las iniciativas de marketing. Una vez implementadas, podrás ver datos de interacción de los usuarios en Google Analytics o a través de las API de informes. Si deseas obtener más información sobre la recopilación de estadísticas del cliente, selecciona uno de los siguientes vínculos según el tipo de cliente:

  • Seguimiento web (analytics.js): Mide la interacción del usuario con aplicaciones o sitios web.
  • Android: Mide la interacción de los usuarios con las aplicaciones para Android.
  • iOS: Mide la interacción de los usuarios con las aplicaciones para iOS.
  • Protocolo de medición: Mide la interacción del usuario en cualquier entorno con este protocolo de nivel bajo.

Recopilación de estadísticas del servidor de App Engine

Si bien App Engine ya proporciona un mecanismo que permite registrar eventos en tu aplicación, podría ser beneficioso usar Google Analytics para realizar seguimiento de eventos específicos del servidor. Estos son algunos de los beneficios:

  • Análisis de datos históricos: App Engine te permite configurar la cantidad máxima de días o el tamaño de tu archivo de registro. Pasado ese tiempo ya no tendrás acceso a esos archivos de registro. El seguimiento de eventos en Google Analytics te permite una visibilidad más prolongada de los eventos pasados.
  • Realizar seguimiento de eventos clave: Los archivos de registro pueden ser detallados y recibir datos de varios componentes de la aplicación. Usar el seguimiento de eventos te permite seleccionar solo los eventos clave que desees supervisar y seguirlos con algunos metadatos adicionales.
  • Interfaz de usuario potente: Aprovecha la interfaz de usuario enriquecida que proporciona Google Analytics para visualizar, informar y exportar estos eventos del servidor.

Esto se puede lograr fácilmente si se integra el siguiente código fuente de muestra en tu aplicación de App Engine. Si deseas obtener más información sobre este enfoque, consulta la sección Seguimiento de eventos en la guía para desarrolladores de Google Analytics.

Código fuente de muestra

Java

package com.google.appengine.analytics.tracking;

import com.google.appengine.api.urlfetch.HTTPHeader;
import com.google.appengine.api.urlfetch.HTTPMethod;
import com.google.appengine.api.urlfetch.HTTPRequest;
import com.google.appengine.api.urlfetch.HTTPResponse;
import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;

public class GoogleAnalyticsTracking {

  private static final URL GA_URL_ENDPOINT = getGoogleAnalyticsEndpoint();
  private static final HTTPHeader CONTENT_TYPE_HEADER =
      new HTTPHeader("Content-Type", "application/x-www-form-urlencoded");

  private final String gaTrackingId;  // Tracking ID / Web property / Property ID
  private String gaClientId = "555";  // Anonymous Client ID.
  // Used to override the existing factory with perhaps a mock one for testing.
  private URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();

  private static URL getGoogleAnalyticsEndpoint() {
    try {
      return new URL("http", "www.google-analytics.com", "/collect");
    } catch (MalformedURLException e) {
      throw new RuntimeException(e);
    }
  }

  public GoogleAnalyticsTracking(String gaTrackingId) throws IOException {
    if (gaTrackingId == null) {
      throw new IllegalArgumentException("Can't set gaTrackingId to a null value.");
    }
    this.gaTrackingId = gaTrackingId;
  }

  public GoogleAnalyticsTracking setGoogleAnalyticsClientId(String gaClientId)
      throws IOException {
    if (gaClientId == null) {
      throw new IllegalArgumentException("Can't set gaClientId to a null value.");
    }
    this.gaClientId = gaClientId;
    return this;
  }

  public GoogleAnalyticsTracking setUrlFetchService(URLFetchService urlFetchService)
      throws IOException {
    if (urlFetchService == null) {
      throw new IllegalArgumentException("Can't set urlFetchService to a null value.");
    }
    this.urlFetchService = urlFetchService;
    return this;
  }

  /**
   * Posts an Event Tracking message to Google Analytics.
   *
   * @param category the required event category
   * @param action the required event action
   * @param label the optional event label
   * @param value the optional value
   * @return true if the call succeeded, otherwise false
   * @exception IOException if the URL could not be posted to
   */
  public int trackEventToGoogleAnalytics(
      String category, String action, String label, String value) throws IOException {
    Map<String, String> map = new LinkedHashMap<>();
    map.put("v", "1");             // Version.
    map.put("tid", gaTrackingId);
    map.put("cid", gaClientId);
    map.put("t", "event");         // Event hit type.
    map.put("ec", encode(category, true));
    map.put("ea", encode(action, true));
    map.put("el", encode(label, false));
    map.put("ev", encode(value, false));

    HTTPRequest request = new HTTPRequest(GA_URL_ENDPOINT, HTTPMethod.POST);
    request.addHeader(CONTENT_TYPE_HEADER);
    request.setPayload(getPostData(map));

    HTTPResponse httpResponse = urlFetchService.fetch(request);
    // Return True if the call was successful.
    return httpResponse.getResponseCode();
  }

  private static byte[] getPostData(Map<String, String> map) {
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> entry : map.entrySet()) {
      sb.append(entry.getKey());
      sb.append('=');
      sb.append(entry.getValue());
      sb.append('&');
    }
    if (sb.length() > 0) {
      sb.setLength(sb.length() - 1); // Remove the trailing &.
    }
    return sb.toString().getBytes(StandardCharsets.UTF_8);
  }

  private static String encode(String value, boolean required)
      throws UnsupportedEncodingException {
    if (value == null) {
      if (required) {
        throw new IllegalArgumentException("Required parameter not set.");
      }
      return "";
    }
    return URLEncoder.encode(value, StandardCharsets.UTF_8.name());
  }
}

Python

def track_event(category, action, label=None, value=0):
    data = {
        'v': '1',  # API Version.
        'tid': GA_TRACKING_ID,  # Tracking ID / Property ID.
        # Anonymous Client Identifier. Ideally, this should be a UUID that
        # is associated with particular user, device, or browser instance.
        'cid': '555',
        't': 'event',  # Event hit type.
        'ec': category,  # Event category.
        'ea': action,  # Event action.
        'el': label,  # Event label.
        'ev': value,  # Event value, must be an integer
    }

    response = requests.post(
        'http://www.google-analytics.com/collect', data=data)

    # If the request fails, this will raise a RequestException. Depending
    # on your application's needs, this may be a non-error and can be caught
    # by the caller.
    response.raise_for_status()

@app.route('/')
def track_example():
    track_event(
        category='Example',
        action='test action')
    return 'Event tracked.'
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java 8