Configuración avanzada: SDK de iOS

En este documento, se proporciona una descripción general de algunas de las funciones de configuración avanzadas del SDK de Google Analytics para iOS versión 3.

Descripción general

El SDK de Google Analytics para iOS proporciona una clase GAITracker para configurar y enviar datos a Google Analytics, y un singleton GAI que funciona como interfaz para los valores de configuración globales de tu implementación.

Inicialización

Antes de que se puedan medir datos, debes inicializar al menos un rastreador con el singleton GoogleAnalytics proporcionando un nombre para el rastreador y un ID de propiedad de Google Analytics:

// Initialize a tracker using a Google Analytics property ID.
[[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

Ahora, esta herramienta de seguimiento se puede usar para configurar y enviar datos a Google Analytics.

Configura y envía datos

Los datos se envían a Google Analytics mediante la configuración de mapas de pares de valores de parámetros en la herramienta de seguimiento y su envío a través de los métodos set y send:

/*
 * Send a screen view to Google Analytics by setting a map of parameter
 * values on the tracker and calling send.
 */

// Retrieve tracker with placeholder property ID.
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"appview", kGAIHitType, @"Home Screen", kGAIScreenName, nil];
[tracker send:params];

La clase GAIDictionaryBuilder simplifica el proceso de compilación de hits y se recomienda para la mayoría de los casos de uso. Aquí podemos enviar la misma vista de pantalla con menos líneas de código:

// Previous V3 SDK versions.
// Sending the same screen view hit using [GAIDictionaryBuilder createAppView]
// [tracker send:[[[GAIDictionaryBuilder createAppView] set:@"Home Screen"
//                                                   forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
// Sending the same screen view hit using [GAIDictionaryBuilder createScreenView]
[tracker send:[[[GAIDictionaryBuilder createScreenView] set:@"Home Screen"
                                                     forKey:kGAIScreenName] build]];

Sintaxis y enumeración del protocolo de medición

Los valores también se pueden configurar en un solo hit. Para ello, debes establecer el valor en un Builder o en todos los hits posteriores. Para ello, debes configurarlos en el objeto de seguimiento con la sintaxis et del Protocolo de medición:

// Sending the same screen view hit using ampersand syntax.
// Previous V3 SDK versions.
// [tracker send:[[[GAIDictionaryBuilder createAppView] set:@"Home Screen"
//                                                   forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[tracker send:[[[GAIDictionaryBuilder createScreenView] set:@"Home Screen"
                                                     forKey:kGAIScreenName] build]];

Para obtener una lista completa de los parámetros del Protocolo de medición disponibles, consulta la Referencia de los parámetros del Protocolo de medición.

Aplicación de valores a varios hits

Cualquier valor configurado directamente en la herramienta de seguimiento se conservará y se aplicará a varios hits, como en este ejemplo:

// May return nil if a tracker has not yet been initialized with
// a property ID.
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

// Set screen name on the tracker to be sent with all hits.
[tracker set:kGAIScreenName
       value:@"Home Screen"];

// Send a screen view for "Home Screen".
// [tracker send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

// This event will also be sent with &cd=Home%20Screen.
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"UX"
                                                      action:@"touch"
                                                       label:@"menuButton"
                                                       value:nil] build]];

// Clear the screen name field when we're done.
[tracker set:kGAIScreenName
       value:nil];

Solo los valores que deseas conservar en varios hits deben configurarse directamente en el segmento. Establecer un nombre de pantalla en un dispositivo de rastreo tendría sentido, ya que se puede aplicar el mismo valor a las visitas de pantalla y a las visitas al evento posteriores. Sin embargo, no se recomienda configurar un campo como el tipo de hit en el rastreador, ya que es probable que cambie con cada hit.

Uso de varios monitores

Se pueden usar varias herramientas de seguimiento en una sola implementación, lo que puede ser útil para enviar datos a varias propiedades:

id<GAITracker> t1 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-1"];

// Trackers may be named. By default, name is set to the property ID.
id<GAITracker> t2 = [[GAI sharedInstance] trackerWithName:@"altTracker"
                                                     trackingId:@"UA-XXXX-2"];

[t1 set:kGAIScreenName
        value:@"Home Screen"];

[t2 set:kGAIScreenName
        value:NSStringFromClass([self class])];

// Send a screenview to UA-XXXX-1.
// [t1 send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[t1 send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

// Send a screenview to UA-XXXX-2.
// [t2 send:[[GAIDictionaryBuilder createAppView] build]];   // Previous V3 SDK versions.
[t2 send:[[GAIDictionaryBuilder createScreenView] build]];   // SDK Version 3.08 and up.

Las funciones de medición automatizada, como el análisis automático y la medición de excepciones no detectadas, solo usan una herramienta de seguimiento para enviar datos a Google Analytics. Si estás usando estas funciones y quieres enviar datos con otros rastreadores, deberás hacerlo de forma manual.

A modo de referencia, la medición de pantalla automática usa el rastreador especificado en la propiedad tracker de un GAITrackedViewController determinado. La medición de excepciones no detectadas usa el rastreador predeterminado especificado en tu instancia de GAI.

Uso del rastreador predeterminado

Google Analytics mantiene una herramienta de seguimiento predeterminada. El primer segmento que se inicializa se convierte en el predeterminado, pero se puede anular:

// t1 becomes the default tracker because it is the first tracker initialized.
id<GAITracker> t1 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-1"];

id<GAITracker> t2 = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-2"];

// Returns t1.
id<GAITracker> defaultTracker = [[GAI sharedInstance] defaultTracker];

// Hit sent to UA-XXXX-1.
// Previous V3 SDK versions.
// [defaultTracker send:[[[GAIDictionaryBuilder createAppView]
//                 set:@"Home Screen" forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[defaultTracker send:[[[GAIDictionaryBuilder createScreenView]
                set:@"Home Screen" forKey:kGAIScreenName] build]];

// Override the default tracker.
[[GAI sharedInstance] setDefaultTracker:t2];

// Returns t2.
defaultTracker = [[GAI sharedInstance] defaultTracker];

// Hit sent to UA-XXXX-2.
// Previous V3 SDK versions.
// [defaultTracker send:[[[GAIDictionaryBuilder createAppView]
//                        set:NSStringFromClass([self class])
//                     forKey:kGAIScreenName] build]];

// SDK Version 3.08 and up.
[defaultTracker send:[[[GAIDictionaryBuilder createScreenView]
                       set:NSStringFromClass([self class])
                    forKey:kGAIScreenName] build]];

Muestreo

Puedes habilitar el muestreo del cliente para limitar la cantidad de hits que se envían a Google Analytics. Si tu app tiene una gran cantidad de usuarios o envía un gran volumen de datos a Google Analytics, habilitar el muestreo ayudará a garantizar informes sin interrupciones.

Por ejemplo, para implementar el muestreo del cliente a una tasa del 50%, usa el siguiente código:

// Assumes a tracker has already been initialized with a property ID, otherwise
// getDefaultTracker returns nil.
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

// Set a sample rate of 50%.
[tracker set:kGAISampleRate value:@"50.0"];

Inhabilitar a nivel de la app

Puedes habilitar una marca de inhabilitación a nivel de la app que inhabilitará Google Analytics en toda la app. Ten en cuenta que esta marca se debe establecer cada vez que se inicie la app y, de forma predeterminada, será NO.

Para obtener la configuración de inhabilitación a nivel de la app, usa lo siguiente:

// Get the app-level opt out preference.
if ([GAI sharedInstance].optOut) {
  ... // Alert the user they have opted out.
}

Para establecer la inhabilitación a nivel de la app, utiliza lo siguiente:

// Set the app-level opt out preference.
[[GAI sharedInstance] setOptOut:YES];

Cómo borrar datos de usuario del cliente

Si necesitas restablecer o borrar los datos del cliente de Google Analytics para tus usuarios finales, puedes borrar los archivos de Google Analytics o establecer un nuevo ID de cliente.

Opción 1: Borra los archivos de Google Analytics

Si tu app no establece explícitamente el ID de cliente para un usuario final, puedes forzar la generación de un nuevo ID de cliente borrando los archivos de Google Analytics que se usan para almacenar dicho ID.

El siguiente método de ejemplo se puede usar para borrar los archivos de Google Analytics. Este método se debe ejecutar antes de inicializar Google Analytics:

/* Execute this before [GAI sharedInstance] is initialized. */
static void DeleteGAFiles(void) {
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSArray *libraryFiles = [fileManager contentsOfDirectoryAtPath:paths.firstObject error:nil];

  NSPredicate *predicate =
      [NSPredicate predicateWithFormat:@"self BEGINSWITH 'googleanalytics'"];
  NSArray *matchingFileNames = [libraryFiles filteredArrayUsingPredicate:predicate];

  for (NSString *fileName in matchingFileNames) {
    NSError *error;
    NSString *filePath = [paths.firstObject stringByAppendingPathComponent:fileName];
    if (![fileManager removeItemAtPath:filePath error:&error]) {
      // Log error.
    }
  }
}

Opción 2: Establece un nuevo ID de cliente

Puedes generar y establecer un nuevo ID de cliente único. Todos los hits posteriores usarán el nuevo ID de cliente y los datos anteriores no se asociarán con este.

Ejecuta el siguiente código para generar y establecer un nuevo ID de cliente:

[GAI sharedInstance].optOut = YES;

// This Id should be a valid UUID (version 4) string as described in https://goo.gl/0dlrGx.
NSString *newClientID = [NSUUID UUID].UUIDString.lowercaseString;
id dispatcher = [[GAI sharedInstance] performSelector:@selector(dispatcher)];
id dataStore = [dispatcher performSelector:@selector(dataStore)];
if ([dataStore respondsToSelector:@selector(setClientId:)]) {
  [dataStore performSelector:@selector(setClientId:) withObject:newClientID];
}

[GAI sharedInstance].optOut = NO;

Anonimizar IP

Habilitar la función de anonimización de IP le indica a Google Analytics que anonimice la información de IP que envía el SDK mediante la eliminación del último octeto de la dirección IP antes de su almacenamiento.

En el siguiente ejemplo, se muestra cómo enable la funcionalidad de IP anónima para un rastreador:

[tracker set:kGAIAnonymizeIp value:@"1"];

La funcionalidad de anonimización de IP se puede configurar en cualquier momento.

Pruebas y depuración

El SDK de Google Analytics para iOS proporciona herramientas para facilitar las pruebas y la depuración.

Ejecución de prueba

El SDK proporciona una marca dryRun que, cuando se configura, evita que se envíen datos a Google Analytics. La marca dryRun debe establecerse cada vez que pruebas o depuras una implementación y no deseas que los datos de prueba aparezcan en los informes de Google Analytics.

Para configurar la marca de ejecución de prueba, haz lo siguiente:

[[GAI sharedInstance] setDryRun:YES];

Logger

Se proporciona el protocolo GAILogger para manejar mensajes útiles del SDK en estos niveles de verbosidad: error, warning, info y verbose.

El SDK inicializa una implementación estándar de Logger que, de forma predeterminada, solo registrará mensajes de advertencia o error en la consola. Para establecer la verbosidad de Logger, haz lo siguiente:

// Set the log level to verbose.
[[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];

También se pueden usar implementaciones personalizadas de Logger:

// Provide a custom logger.
[[GAI sharedInstance].logger = [[CustomLogger alloc] init];

Ejemplo completo

En el siguiente ejemplo, se muestra el código necesario para inicializar una implementación de Google Analytics y enviar una sola vista de pantalla.

A continuación, se mide una vista de pantalla cuando se muestra la primera pantalla a un usuario:

Por lo general, la inicialización de una implementación puede realizarse desde el delegado de la app, como en este ejemplo:

//
//  AppDelegate.h
//
#import <UIKit/UIKit.h>
#import "GAI.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) id<GAITracker> tracker;

@end

//
//  AppDelegate.m
//
#import "AppDelegate.h"

/** Google Analytics configuration constants **/
static NSString *const kGaPropertyId = @"UA-XXXX-Y"; // Placeholder property ID.
static NSString *const kTrackingPreferenceKey = @"allowTracking";
static BOOL const kGaDryRun = NO;
static int const kGaDispatchPeriod = 30;

@interface AppDelegate ()

- (void)initializeGoogleAnalytics;

@end

@implementation AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
    [GAI sharedInstance].optOut =
    ![[NSUserDefaults standardUserDefaults] boolForKey:kTrackingPreferenceKey];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Do other work for customization after application launch
    // then initialize Google Analytics.
    [self initializeGoogleAnalytics];

    return YES;
}

- (void)initializeGoogleAnalytics {

    [[GAI sharedInstance] setDispatchInterval:kGaDispatchPeriod];
    [[GAI sharedInstance] setDryRun:kGaDryRun];
    self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kGaPropertyId];
}

// The rest of the app delegate code omitted.

@end

Luego, para medir una vista de pantalla cuando se muestra una vista a un usuario, haz lo siguiente:

//
// MyViewController.m
//
#import "MyViewController.h"
#import "AppDelegate.h"
#import "GAI.h"
#import "GAIFields.h"
#import "GAITracker.h"
#import "GAIDictionaryBuilder.h"

@implementation MyViewController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // This screen name value will remain set on the tracker and sent with
    // hits until it is set to a new value or to nil.
    [[GAI sharedInstance].defaultTracker set:kGAIScreenName
                                       value:@"Home Screen"];

    // Send the screen view.
    // Previous V3 SDK versions.
    // [[GAI sharedInstance].defaultTracker
    //     send:[[GAIDictionaryBuilder createAppView] build]];

    // SDK Version 3.08 and up.
    [[GAI sharedInstance].defaultTracker
        send:[[GAIDictionaryBuilder createScreenView] build]];
}