
AppboyKit (également connu sous le nom de SDK Objective-C) n’est plus pris en charge et a été remplacé par Swift SDK. Il ne recevra plus de nouvelles fonctionnalités, de corrections de bugs, de mises à jour de sécurité ou d’assistance technique - cependant, la messagerie et l’analyse continueront à fonctionner normalement. Pour en savoir plus, consultez Présentation du nouveau SDK Braze Swift.
Google Tag gestionnaire pour iOS
Initialisation du SDK
Le SDK iOS de Braze peut être initialisé et contrôlé par des balises configurées dans Google Tag gestionnaire.
Avant d’utiliser Google Tag gestionnaire, veillez à suivre notre configuration initiale du SDK.
Configuration de votre Google Tag gestionnaire
Dans cet exemple, nous allons simuler une application de streaming musical qui souhaite journaliser différents événements au fur et à mesure que les utilisateurs écoutent des chansons. À l’aide de Google Tag gestionnaire pour iOS, nous pouvons contrôler quels fournisseurs tiers reçoivent cet événement et créer des balises spécifiques à Braze.
Événements personnalisés
Les événements personnalisés sont enregistrés avec actionType réglé sur logEvent. Le fournisseur d’étiquettes personnalisées de Braze, dans notre exemple, attend que le nom de l’événement personnalisé soit défini à l’aide de eventName.
Pour commencer, créez un déclencheur qui recherche un « nom de l’événement » qui équivaut à played song.

Ensuite, créez une nouvelle étiquette (« Appel de fonction ») et saisissez le chemin de classe de votre fournisseur d’étiquettes personnalisées décrit plus loin dans cet article.
Cette étiquette sera déclenchée lorsque vous enregistrerez l’événement played song que nous venons de créer.
Dans les paramètres personnalisés de notre exemple d’étiquette (paires clé-valeur), nous avons défini eventName sur played song, qui sera le nom de l’événement personnalisé enregistré dans Braze.

Lorsque vous envoyez un événement personnalisé, définissez actionType sur logEvent et définissez une valeur pour eventName comme illustré dans l’exemple suivant.
Le fournisseur d’étiquettes personnalisées dans notre exemple utilisera ces clés pour déterminer l’action à effectuer et le nom de l’événement à envoyer à Braze lorsqu’il reçoit des données de Google Tag gestionnaire.

Vous pouvez également inclure des arguments de paires clé-valeur supplémentaires à l’étiquette, qui seront envoyés en tant que propriétés d’événement personnalisé à Braze. eventName et actionType ne seront pas ignorés pour les propriétés d’événement personnalisé. Dans l’exemple d’étiquette suivant, nous allons transmettre genre, qui a été défini à l’aide d’une variable d’étiquette dans Google Tag gestionnaire, issue de l’événement personnalisé que nous avons enregistré dans notre application.
La propriété d’événement genre est envoyée à Google Tag gestionnaire en tant que variable « Firebase - paramètre de l’événement », étant donné que Google Tag gestionnaire pour iOS utilise Firebase comme couche de données.

Enfin, lorsqu’un utilisateur joue une chanson dans notre application, nous enregistrons un événement via Firebase et Google Tag gestionnaire en utilisant le nom d’événement d’analyse Firebase qui correspond au nom de déclencheur de notre étiquette, played song :
1
2
3
NSDictionary *parameters = @{@"genre" : @"pop",
@"number of times listened" : @42};
[FIRAnalytics logEventWithName:@"played song" parameters:parameters];
Enregistrement des attributs personnalisés
Les attributs personnalisés sont définis via un actionType réglé sur customAttribute. Le fournisseur d’étiquettes personnalisées de Braze attend que la paire clé-valeur de l’attribut personnalisé soit définie via customAttributeKey et customAttributeValue :
1
2
3
NSDictionary *parameters = @{@"customAttributeKey" : @"favorite song",
@"customAttributeValue" : @"Private Eyes"};
[FIRAnalytics logEventWithName:@"customAttribute" parameters:parameters];
Appeler changeUser
Les appels à changeUser() sont effectués via un actionType réglé sur changeUser. Le fournisseur d’étiquettes personnalisées de Braze attend que l’ID utilisateur Braze soit défini via une paire clé-valeur externalUserId dans votre étiquette :
1
2
NSDictionary *parameters = @{@"externalUserId" : userId};
[FIRAnalytics logEventWithName:@"changeUser" parameters:parameters];
Fournisseur d’étiquettes personnalisées du SDK Braze
Une fois les étiquettes et les déclencheurs configurés, vous devrez également implémenter Google Tag gestionnaire dans votre application iOS, comme décrit dans la documentation de Google.
Une fois Google Tag gestionnaire installé dans votre application, ajoutez un fournisseur d’étiquettes personnalisées pour appeler les méthodes du SDK Braze en fonction des étiquettes que vous avez configurées dans Google Tag gestionnaire.
Veillez à noter le « chemin de classe » du fichier : c’est ce que vous indiquerez lorsque vous configurerez une étiquette dans la console de Google Tag gestionnaire.
Cet exemple montre l’une des nombreuses façons de structurer votre fournisseur d’étiquettes personnalisées, dans laquelle nous déterminons quelle méthode du SDK Braze appeler en fonction de la paire clé-valeur actionType envoyée depuis l’étiquette GTM.
Les actionType que nous avons pris en charge dans notre exemple sont logEvent, customAttribute et changeUser, mais vous pouvez modifier la manière dont votre fournisseur d’étiquettes gère les données de Google Tag gestionnaire.
Ajoutez le code suivant à votre fichier BrazeGTMTagManager.h :
1
2
3
4
5
6
@import Firebase;
@import GoogleTagManager;
@interface BrazeGTMTagManager : NSObject <TAGCustomFunction>
@end
Et ajoutez le code suivant à votre fichier 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