Skip to content


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.

Un déclencheur personnalisé dans Google Tag Manager défini pour déclencher certains événements lorsque « nom de l'événement » est égal à « 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.

Une étiquette dans Google Tag Manager avec des champs de chemin de classe et de paires clé-valeur. Cette étiquette est définie pour se déclencher avec le déclencheur « played song » créé précédemment.

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.

Une variable dans Google Tag Manager où « genre » est ajouté en tant que paramètre de l'événement pour l'étiquette « Braze - Played Song Event ».

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
New Stuff!