
AppboyKit (también conocido como SDK Objective-C) ya no recibe soporte y ha sido sustituido por Swift SDK. Ya no recibirá nuevas características, correcciones de errores, actualizaciones de seguridad ni soporte técnico; sin embargo, la mensajería y los análisis seguirán funcionando con normalidad. Para obtener más información, consulta Presentación del nuevo SDK Swift de Braze.
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

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.

Cuando envíes un evento personalizado, establece actionType en logEvent y fija un valor para eventName como se muestra en el siguiente ejemplo.
El proveedor de etiquetas personalizadas de nuestro ejemplo utilizará estas claves para determinar qué acción realizar y qué nombre de evento enviar a Braze cuando reciba datos de Google Tag Administrador.

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.

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