Skip to content


Google Tag Administrador para iOS

Inicializar el SDK

El SDK de Braze para iOS puede inicializarse y controlarse mediante etiquetas configuradas en Google Tag Administrador.

Antes de utilizar Google Tag Administrador, asegúrate de seguir primero nuestra configuración inicial del SDK.

Configurar tu Google Tag Administrador

En este ejemplo, haremos como si fuéramos una aplicación de streaming de música que quiere registrar diferentes eventos a medida que los usuarios escuchan canciones. Mediante Google Tag Administrador para iOS, podemos controlar cuáles de nuestros proveedores externos reciben este evento y crear etiquetas específicas para Braze.

Eventos personalizados

Los eventos personalizados se registran con actionType configurado en logEvent. El proveedor de etiquetas personalizadas de Braze en nuestro ejemplo espera que el nombre del evento personalizado se configure mediante eventName.

Para empezar, crea un desencadenante que busque un “Nombre de evento” que sea igual a played song

Un desencadenante personalizado en Google Tag Manager configurado para desencadenar algunos eventos cuando "nombre del evento" es igual a "canción reproducida".

A continuación, crea una nueva etiqueta (“Llamada a función”) e introduce la ruta de clase de tu proveedor de etiquetas personalizado que se describe más adelante en este artículo.

Esta etiqueta se desencadenará cuando registres el evento played song que acabamos de crear.

En los parámetros personalizados (pares clave-valor) de nuestra etiqueta de ejemplo, hemos establecido eventName en played song, que será el nombre del evento personalizado registrado en Braze.

Una etiqueta en Google Tag Manager con classpath y campos de par clave-valor. Esta etiqueta está configurada para desencadenarse con el desencadenante "canción reproducida" creado anteriormente.

También puedes incluir argumentos adicionales de par clave-valor en la etiqueta, que se enviarán como propiedades del evento personalizado a Braze. eventName y actionType no se ignorarán para las propiedades del evento personalizado. En la siguiente etiqueta de ejemplo, pasaremos genre, que se definió utilizando una variable de etiqueta en Google Tag Administrador, procedente del evento personalizado que registramos en nuestra aplicación.

La propiedad del evento genre se envía a Google Tag Administrador como una variable “Firebase - Parámetro de evento”, ya que Google Tag Administrador para iOS utiliza Firebase como capa de datos.

Una variable en Google Tag Manager donde se añade "género" como parámetro de evento para la etiqueta "Braze - Evento de canción reproducida".

Por último, cuando un usuario reproduzca una canción en nuestra aplicación, registraremos un evento a través de Firebase y Google Tag Administrador utilizando el nombre del evento de análisis de Firebase que coincida con el nombre desencadenante de nuestra etiqueta, played song:

1
2
3
NSDictionary *parameters = @{@"genre" : @"pop",
                             @"number of times listened" : @42};
[FIRAnalytics logEventWithName:@"played song" parameters:parameters];

Registro de atributos personalizados

Los atributos personalizados se establecen a través de un actionType configurado en customAttribute. El proveedor de etiquetas personalizadas de Braze espera que el par clave-valor del atributo personalizado se establezca a través de customAttributeKey y customAttributeValue:

1
2
3
NSDictionary *parameters = @{@"customAttributeKey" : @"favorite song",
                             @"customAttributeValue" : @"Private Eyes"};
[FIRAnalytics logEventWithName:@"customAttribute" parameters:parameters];

Llamada a changeUser

Las llamadas a changeUser() se realizan a través de un actionType configurado en changeUser. El proveedor de etiquetas personalizadas de Braze espera que el ID de usuario de Braze se establezca mediante un par clave-valor externalUserId dentro de tu etiqueta:

1
2
NSDictionary *parameters = @{@"externalUserId" : userId};
[FIRAnalytics logEventWithName:@"changeUser" parameters:parameters];

Proveedor de etiquetas personalizadas del SDK de Braze

Con las etiquetas y los desencadenantes configurados, también tendrás que implementar Google Tag Administrador en tu aplicación para iOS, lo cual puedes encontrar en la documentación de Google.

Una vez que Google Tag Administrador esté instalado en tu aplicación, añade un proveedor de etiquetas personalizado para llamar a los métodos del SDK de Braze en función de las etiquetas que hayas configurado en Google Tag Administrador.

Asegúrate de anotar la “Ruta de clase” del archivo: es lo que introducirás cuando configures una etiqueta en la consola de Google Tag Administrador.

Este ejemplo muestra una de las muchas formas de estructurar tu proveedor de etiquetas personalizado, en el que determinamos a qué método del SDK de Braze llamar en función del par clave-valor actionType enviado desde la etiqueta GTM.

Los actionType que hemos admitido en nuestro ejemplo son logEvent, customAttribute y changeUser, pero puede que prefieras cambiar la forma en que tu proveedor de etiquetas gestiona los datos de Google Tag Administrador.

Añade el siguiente código a tu archivo BrazeGTMTagManager.h:

1
2
3
4
5
6
@import Firebase;
@import GoogleTagManager;

@interface BrazeGTMTagManager : NSObject <TAGCustomFunction>

@end

Y añade el siguiente código a tu archivo BrazeGTMTagManager.m:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#import <Foundation/Foundation.h>
#import "BrazeGTMTagManager.h"
#import "Appboy-iOS-SDK/AppboyKit.h"

static NSString *const ActionTypeKey = @"actionType";

// Custom Events
static NSString *const LogEventActionType = @"logEvent";
static NSString *const LogEventEventName = @"eventName";

// Custom Attributes
static NSString *const CustomAttributeActionType = @"customAttribute";
static NSString *const CustomAttributeKey = @"customAttributeKey";
static NSString *const CustomAttributeValueKey = @"customAttributeValue";

// Change User
static NSString *const ChangeUserActionType = @"changeUser";
static NSString *const ChangeUserExternalUserId = @"externalUserId";

@implementation BrazeGTMTagManager

- (NSObject *)executeWithParameters:(NSDictionary *)parameters {
  NSMutableDictionary *mutableParameters = [parameters mutableCopy];

  NSString *actionType = mutableParameters[ActionTypeKey];
  if (!actionType) {
    NSLog(@"There is no Braze action type key in this call. Doing nothing.", nil);
    return nil;
  }

  [mutableParameters removeObjectForKey:ActionTypeKey];

  if ([actionType isEqualToString:LogEventActionType]) {
    [self logEvent:mutableParameters];
  } else if ([actionType isEqualToString:CustomAttributeActionType]) {
    [self logCustomAttribute:mutableParameters];
  } else if ([actionType isEqualToString:ChangeUserActionType]) {
    [self changeUser:mutableParameters];
  } else {
    NSLog(@"Invalid action type. Doing nothing.");
  }
  return nil;
}

- (void)logEvent:(NSMutableDictionary *)parameters {
  NSString *eventName = parameters[LogEventEventName];
  [parameters removeObjectForKey:LogEventEventName];
  [[Appboy sharedInstance] logCustomEvent:eventName withProperties:parameters];
}

- (void)logCustomAttribute:(NSMutableDictionary *)parameters {
  NSString *customAttributeKey = parameters[CustomAttributeKey];
  id customAttributeValue = parameters[CustomAttributeValueKey];

  if ([customAttributeValue isKindOfClass:[NSString class]]) {
    [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey
                                             andStringValue:customAttributeValue];
  } else if ([customAttributeValue isKindOfClass:[NSDate class]]) {
    [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey
                                               andDateValue:customAttributeValue];
  } else if ([customAttributeValue isKindOfClass:[NSNumber class]]) {
    if (strcmp([customAttributeValue objCType], [@(YES) objCType]) == 0) {
      [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey
                                                 andBOOLValue:[(NSNumber *)customAttributeValue boolValue]];
    } else if (strcmp([customAttributeValue objCType], @encode(short)) == 0 ||
               strcmp([customAttributeValue objCType], @encode(int)) == 0 ||
               strcmp([customAttributeValue objCType], @encode(long)) == 0) {
      [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey
                                              andIntegerValue:[(NSNumber *)customAttributeValue integerValue]];
    } else if (strcmp([customAttributeValue objCType], @encode(float)) == 0 ||
               strcmp([customAttributeValue objCType], @encode(double)) == 0) {
      [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey
                                               andDoubleValue:[(NSNumber *)customAttributeValue doubleValue]];
    } else {
      NSLog(@"Could not map NSNumber value to Appboy custom attribute:%@", customAttributeValue);
    }
  } else if ([customAttributeValue isKindOfClass:[NSArray class]]) {
    [[Appboy sharedInstance].user setCustomAttributeArrayWithKey:customAttributeKey
                                                           array:customAttributeValue];
  }
}

- (void)changeUser:(NSMutableDictionary *)parameters {
  NSString *userId = parameters[ChangeUserExternalUserId];
  [[Appboy sharedInstance] changeUser:userId];
}

@end
New Stuff!