Como integrar com o Google Analytics

Com o Google Analytics Platform, é possível medir as interações dos usuários com os negócios em diversos dispositivos e ambientes. A plataforma oferece todos os recursos de computação para coletar, armazenar, processar e reportar essas interações dos usuários.

A coleta de dados de análise ocorre no lado do cliente e do servidor. Para o envio de dados, o Google Analytics oferece APIs e SDKs fáceis de usar. Além disso, desenvolvemos um código utilizado nos aplicativos do App Engine para enviar facilmente análises do lado do servidor ao Google Analytics.

Coleta de dados de análise do lado do cliente

Com SDKs e APIs de coleta de dados, é possível avaliar a interação dos usuários com o conteúdo e as iniciativas de marketing. Após a implementação, você conseguirá ver os dados de interação do usuário no Google Analytics ou pelas APIs de relatórios. Para mais detalhes sobre a coleta de dados de análise do lado do cliente, selecione o link abaixo com base no tipo do cliente:

  • Rastreamento da Web (analytics.js) — meça a interação do usuário com sites ou aplicativos da Web.
  • Android - Meça a interação do usuário com aplicativos para Android.
  • iOS - Meça a interação do usuário com aplicativos para iOS.
  • Protocolo de avaliação — meça a interação do usuário em qualquer ambiente com este protocolo de nível inferior.

Coleta de dados de análise do lado do servidor no App Engine

O aplicativo do App Engine já tem um mecanismo para geração de registros de eventos, mas vale a pena rastrear eventos específicos do lado do servidor no Google Analytics. Veja a seguir alguns benefícios:

  • Análise de dados históricos — com o App Engine, é possível configurar o número máximo de dias ou o tamanho do arquivo de registros. Após esse período, você não terá acesso a esses arquivos de registros. O rastreamento de eventos no Google Analytics permite visualizar, por mais tempo, os eventos passados.
  • Rastrear eventos-chave — os arquivos de registros são muito detalhados, com diversos componentes do aplicativo gravando dados neles. Com o uso do rastreamento de eventos, é possível identificar os eventos-chave em que você tiver interesse e rastreá-los com alguns metadados.
  • Interface de usuário avançada — aproveite a sofisticada interface de usuário oferecida pelo Google Analytics para visualizar, gerar relatórios e exportar esses eventos do lado do servidor.

Isso fica fácil com a integração do código de origem de amostra abaixo no aplicativo do App Engine. Para mais informações sobre essa abordagem, consulte o guia de desenvolvedores do Google Analytics para o Rastreamento de eventos.

Amostra de código-fonte

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.'
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python 2