Skip to content


Google Tag Manager für iOS

Initialisierung des SDK

Das Braze iOS SDK kann durch Tags, die im Google Tag Manager konfiguriert wurden, initialisiert und gesteuert werden.

Bevor Sie Google Tag Manager verwenden, müssen Sie zunächst die SDK-Ersteinrichtung durchführen.

Konfigurieren Ihres Google Tag Managers

In diesem Beispiel tun wir so, als wären wir eine Musik-Streaming-App, die verschiedene Ereignisse protokollieren möchte, während Nutzer:innen Lieder anhören. Mit dem Google Tag Manager für iOS können wir steuern, welche unserer Drittanbieter dieses Ereignis erhalten, und Tags speziell für Braze erstellen.

Angepasste Events

Angepasste Events werden protokolliert, wenn actionType auf logEvent eingestellt ist. Der angepasste Tag-Anbieter von Braze erwartet in unserem Beispiel, dass der Name des angepassten Events mit eventName festgelegt wird.

Um zu beginnen, erstellen Sie einen Trigger, der nach einem „Event Name“ sucht, der gleich played song ist.

Ein angepasster Trigger im Google Tag Manager, der für einige Events triggert, wenn „Ereignisname“ gleich „abgespielter Song“ ist.

Als Nächstes erstellen Sie ein neues Tag („Funktionsaufruf“) und geben den Klassenpfad Ihres angepassten Tag-Anbieters ein, der weiter unten in diesem Artikel beschrieben wird.

Dieses Tag wird ausgelöst, wenn Sie das soeben erstellte Event played song protokollieren.

In den angepassten Parametern (Schlüssel-Wert-Paare) unseres Beispiel-Tags haben wir eventName auf played song gesetzt – das ist der Name des angepassten Events, der in Braze protokolliert wird.

Ein Tag im Google Tag Manager mit Klassenpfad- und Schlüssel-Wert-Paar-Feldern. Dieses Tag ist so eingestellt, dass es mit dem zuvor erstellten Trigger „played song“ ausgelöst wird.

Sie können dem Tag auch zusätzliche Schlüssel-Wert-Paar-Argumente hinzufügen, die als Event-Eigenschaften des angepassten Events an Braze gesendet werden. eventName und actionType werden für Event-Eigenschaften angepasster Events nicht ignoriert. Im folgenden Beispiel-Tag übergeben wir genre, das über eine Tag-Variable im Google Tag Manager definiert wurde und aus dem angepassten Event stammt, das wir in unserer App protokolliert haben.

Die Event-Eigenschaft genre wird als Variable „Firebase - Event Parameter“ an den Google Tag Manager gesendet, da Google Tag Manager für iOS Firebase als Datenebene verwendet.

Eine Variable im Google Tag Manager, bei der „genre“ als Event-Parameter für das Tag „Braze - Played Song Event“ hinzugefügt wird.

Wenn Nutzer:innen schließlich einen Song in unserer App abspielen, protokollieren wir ein Ereignis über Firebase und den Google Tag Manager unter Verwendung des Firebase-Analytics-Event-Namens, der mit dem Trigger-Namen unseres Tags übereinstimmt: played song:

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

Angepasste Attribute protokollieren

Angepasste Attribute werden über einen actionType gesetzt, der auf customAttribute eingestellt ist. Der angepasste Tag-Anbieter von Braze erwartet, dass der Schlüssel-Wert des angepassten Attributs über customAttributeKey und customAttributeValue gesetzt wird:

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

Aufruf von changeUser

Aufrufe von changeUser() erfolgen über einen actionType, der auf changeUser eingestellt ist. Der angepasste Tag-Anbieter von Braze erwartet, dass die Braze-Nutzer-ID über das Schlüssel-Wert-Paar externalUserId in Ihrem Tag festgelegt wird:

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

Angepasster Tag-Anbieter für das Braze SDK

Wenn die Tags und Trigger eingerichtet sind, müssen Sie auch den Google Tag Manager in Ihrer iOS-App implementieren. Informationen dazu finden Sie in der Dokumentation von Google.

Sobald Google Tag Manager in Ihrer App installiert ist, fügen Sie einen angepassten Tag-Anbieter hinzu, um Braze-SDK-Methoden auf der Grundlage der Tags aufzurufen, die Sie im Google Tag Manager konfiguriert haben.

Achten Sie darauf, den „Klassenpfad“ der Datei zu notieren – diesen geben Sie ein, wenn Sie ein Tag in der Google Tag Manager-Konsole einrichten.

Dieses Beispiel zeigt eine von vielen Möglichkeiten, Ihren angepassten Tag-Anbieter zu strukturieren. Dabei bestimmen wir anhand des vom GTM-Tag gesendeten Schlüssel-Wert-Paares actionType, welche Braze-SDK-Methode aufgerufen werden soll.

Die actionType-Werte, die wir in unserem Beispiel unterstützen, sind logEvent, customAttribute und changeUser. Sie können jedoch ändern, wie Ihr Tag-Anbieter die Daten vom Google Tag Manager verarbeitet.

Fügen Sie den folgenden Code in Ihre Datei BrazeGTMTagManager.h ein:

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

@interface BrazeGTMTagManager : NSObject <TAGCustomFunction>

@end

Und fügen Sie den folgenden Code in Ihre Datei BrazeGTMTagManager.m ein:

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!