
Das AppboyKit (auch bekannt als Objective-C SDK) wird nicht mehr unterstützt und wurde durch das Swift SDK. ] ersetzt. Es wird keine neuen Features, Fehlerbehebungen, Sicherheitsupdates oder technischen Support mehr erhalten - Messaging und Analytics werden jedoch weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie unter Einführung in das neue Braze Swift SDK.

Suchen Sie den grundlegenden Entwicklerleitfaden zur Integration von In-App-Nachrichten? Finden Sie ihn im grundlegenden Entwicklerleitfaden zur Integration von In-App-Nachrichten.
Implementierungsleitfaden für In-App-Nachrichten
Dieser optionale Leitfaden für die erweiterte Implementierung enthält Hinweise zur Code-Anpassung für In-App-Nachrichten, drei von unserem Team entwickelte angepasste Anwendungsfälle und begleitende Code-Snippets. Besuchen Sie unser Braze Demo Repository auf GitHub! Dieser Implementierungsleitfaden konzentriert sich auf eine Swift-Implementierung, aber für Interessierte werden auch Objective-C-Snippets bereitgestellt. Suchen Sie nach HTML-Implementierungen? Werfen Sie einen Blick auf unser HTML-Template-Repository!
Hinweise zur Code-Anpassung
Der folgende Leitfaden beschreibt eine optionale angepasste Entwickler-Integration, die zusätzlich zu den standardmäßigen In-App-Nachrichten verwendet werden kann. Zu jedem Anwendungsfall gibt es angepasste View-Controller mit Beispielen, wie Sie die Funktionalität erweitern und Aussehen und Handhabung Ihrer In-App-Nachrichten nativ anpassen können.
ABKInAppMessage-Unterklassen
Bei dem folgenden Code-Snippet handelt es sich um eine UI-Delegate-Methode aus dem Braze SDK, die festlegt, mit welcher Unterklassenansicht die In-App-Nachricht befüllt werden soll. Wir beschreiben in diesem Leitfaden eine grundlegende Implementierung und zeigen, wie die Unterklassen „Full“, „Slide-up“ und „Modal“ auf ansprechende Weise implementiert werden können. Beachten Sie, dass Sie alle anderen Unterklassen für In-App-Nachrichten einrichten müssen, wenn Sie einen angepassten View-Controller einrichten möchten. Nachdem Sie sich ein solides Verständnis der Konzepte hinter der Einrichtung von Unterklassen angeeignet haben, sehen Sie sich unsere Anwendungsfälle an, um mit der Implementierung von Unterklassen für In-App-Nachrichten zu beginnen.
ABKInAppMessage-Unterklassen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
extension AppboyManager: ABKInAppMessageUIDelegate {
func inAppMessageViewControllerWith(_ inAppMessage: ABKInAppMessage) -> ABKInAppMessageViewController {
switch inAppMessage {
case is ABKInAppMessageSlideup:
return slideupViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageModal:
return modalViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageFull:
return fullViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageHTML:
return ABKInAppMessageHTMLViewController(inAppMessage: inAppMessage)
default:
return ABKInAppMessageViewController(inAppMessage: inAppMessage)
}
}
}
ABKInAppMessage-Unterklassen
1
2
3
4
5
6
7
8
9
10
11
12
13
- (ABKInAppMessageViewController *)inAppMessageViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {
if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {
return [self slideupViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {
return [self modalViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {
return [self fullViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageHTML class]]) {
return [[ABKInAppMessageHTMLViewController alloc] initWithInAppMessage:inAppMessage];
} else {
return [[ABKInAppMessageViewController alloc] initWithInAppMessage:inAppMessage];
}
}
Anwendungsfälle
Im Folgenden finden Sie drei Anwendungsfälle. Jeder Anwendungsfall enthält eine ausführliche Erklärung, relevante Code-Snippets sowie einen Blick darauf, wie In-App-Nachrichten im Braze-Dashboard aussehen und verwendet werden können:
- Angepasste Slide-up-In-App-Nachricht
- Angepasste modale In-App-Nachricht
- Angepasste Full-In-App-Nachricht
Angepasste Slide-up-In-App-Nachricht

Bei der Erstellung Ihrer Slide-up-In-App-Nachricht werden Sie feststellen, dass Sie die Platzierung der Nachricht mit den Standardmethoden nicht ändern können. Eine solche Änderung wird durch die Erstellung einer Unterklasse von ABKInAppMessageSlideupViewController und das Überschreiben der Variable offset mit Ihrer eigenen angepassten Variablen ermöglicht. Das nebenstehende Bild zeigt, wie Sie damit Ihre Slide-up-In-App-Nachrichten anpassen können.
Besuchen Sie den SlideFromBottomViewController, um loszulegen.
Hinzufügen von zusätzlichem Verhalten zur Standard-Benutzeroberfläche
Aktualisieren der Variable offset
Aktualisieren Sie die Variable offset und legen Sie einen Offset fest, der Ihren Anforderungen entspricht.
1
2
3
func setSlideConstraint() {
offset = 0
}
1
2
3
4
5
6
7
8
override var offset: CGFloat {
get {
return super.offset
}
set {
super.offset = newValue + adjustedOffset
}
}
Version 3.34.0 or earlier
Aktualisieren der Variable slideConstraint
Die öffentliche Variable slideConstraint stammt aus der Superklasse ABKInAppMessageSlideupViewController.
1
2
3
func setSlideConstraint() {
slideConstraint?.constant = bottomSpacing
}
1
2
3
private var bottomSpacing: CGFloat {
return AppboyManager.shared.activeApplicationViewController.topMostViewController().view.safeAreaInsets.bottom
}
Besuchen Sie das Braze Demo Repository für die Funktion topMostViewController().
Aktualisieren der Variable offset
Aktualisieren Sie die Variable offset und legen Sie einen Offset fest, der Ihren Anforderungen entspricht.
1
2
3
- (void)setOffset {
self.offset = 0;
}
1
2
3
4
5
6
7
- (CGFloat)offset {
return [super offset];
}
- (void)setOffset:(CGFloat)offset {
[super setOffset:offset + [self adjustedOffset]];
}
Version 3.34.0 or earlier
Aktualisieren der Variable slideConstraint
Die öffentliche Variable slideConstraint stammt aus der Superklasse ABKInAppMessageSlideupViewController.
1
2
3
- (void)self.setSlideConstraint:(NSLayoutConstraint *)slideConstraint {
slideConstraint.constant = bottomSpacing;
}
1
2
3
- (CGFloat)bottomSpacing {
return [AppboyManager shared].activeApplicationViewController.topMostViewController.view.safeAreaInsets.bottom;
}
Angepassten Constraint überschreiben und festlegen
Überschreiben Sie beforeMoveInAppMessageViewOnScreen() und legen Sie einen angepassten Constraint-Wert fest, der Ihren Anforderungen entspricht. Der ursprüngliche Wert wird in der Superklasse festgelegt.
1
2
3
4
override func beforeMoveInAppMessageViewOnScreen() {
super.beforeMoveInAppMessageViewOnScreen()
setOffset()
}
Version 3.34.0 or earlier
1
2
3
override func beforeMoveInAppMessageViewOnScreen() {
setSlideConstraint()
}
Angepassten Constraint überschreiben und festlegen
Überschreiben Sie beforeMoveInAppMessageViewOnScreen() und legen Sie einen angepassten Constraint-Wert fest, der Ihren Anforderungen entspricht. Der ursprüngliche Wert wird in der Superklasse festgelegt.
1
2
3
4
- (void)beforeMoveInAppMessageViewOnScreen {
[super beforeMoveInAppMessageViewOnScreen];
[self setOffset];
}
Version 3.34.0 or earlier
1
2
3
- (void)beforeMoveInAppMessageViewOnScreen {
[self setSlideConstraint:self.slideConstraint];
}
Constraint für Geräteausrichtung anpassen
Passen Sie den entsprechenden Wert in viewWillTransition() an, da die Unterklasse für die Synchronisierung des Constraints bei Layoutänderungen zuständig ist.
Angepasste modale In-App-Nachricht

Ein ABKInAppMessageModalViewController kann in Unterklassen unterteilt werden, um eine UIPickerView zur Erfassung wertvoller Nutzerattribute zu nutzen. Die angepasste modale In-App-Nachricht ermöglicht es Ihnen, Connected-Content oder eine beliebige verfügbare Liste zu verwenden, um Attribute aus einer dynamischen Artikelliste anzuzeigen und zu erfassen.
Sie können Ihre eigenen Ansichten in unterklassifizierte In-App-Nachrichten einfügen. Dieses Beispiel zeigt, wie eine UIPickerView genutzt werden kann, um die Funktionalität eines ABKModalInAppMessageViewController zu erweitern.
Besuchen Sie den ModalPickerViewController, um loszulegen.
Dashboard-Konfiguration
Um eine modale In-App-Nachricht im Dashboard einzurichten, müssen Sie eine Artikelliste angeben, die als kommagetrennte Zeichenkette formatiert ist. In unserem Beispiel verwenden wir Connected-Content, um eine JSON-Liste mit Teamnamen abzurufen und entsprechend zu formatieren.

Geben Sie in den Schlüssel-Wert-Paaren einen attribute_key an. Dieser Schlüssel wird zusammen mit dem von Nutzer:innen ausgewählten Wert als angepasstes Attribut in ihrem Nutzerprofil gespeichert. Ihre angepasste Ansichtslogik muss die an Braze gesendeten Nutzerattribute verarbeiten.
Das Wörterbuch extras im Objekt ABKInAppMessage ermöglicht Ihnen die Abfrage eines Schlüssels des Typs view_type (falls vorhanden), der die korrekte Ansicht für die Anzeige angibt. Es ist wichtig zu wissen, dass In-App-Nachrichten pro Nachricht konfiguriert werden, sodass angepasste und standardmäßige modale Ansichten harmonisch zusammenarbeiten können.

Verwendung von view_type für das Anzeigeverhalten der Benutzeroberfläche
Fragen Sie das Wörterbuch extras für Ihren view_type ab, um den gewünschten untergeordneten View-Controller zu laden.
1
2
3
4
5
6
7
8
func modalViewController(inAppMessage: ABKInAppMessage) -> ABKInAppMessageModalViewController {
switch inAppMessage.extras?[InAppMessageKey.viewType.rawValue] as? String {
case InAppMessageViewType.picker.rawValue:
return ModalPickerViewController(inAppMessage: inAppMessage)
default:
return ABKInAppMessageModalViewController(inAppMessage: inAppMessage)
}
}
Verwendung von view_type für das Anzeigeverhalten der Benutzeroberfläche
Fragen Sie das Wörterbuch extras für Ihren view_type ab, um den gewünschten untergeordneten View-Controller zu laden.
1
2
3
4
5
6
7
8
9
10
11
- (ABKInAppMessageModalViewController *)modalViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {
InAppMessageData *inAppMessageData = [[InAppMessageData alloc] init];
NSString *key = [inAppMessageData rawValueForInAppMessageKey:InAppMessageKeyViewType];
NSString *viewType = [inAppMessageData rawValueForInAppMessageViewType:InAppMessageViewTypePicker];
if ([inAppMessage.extras objectForKey:key] && [inAppMessage.extras[key] isEqualToString:viewType]) {
return [[ModalViewController alloc] initWithInAppMessage:inAppMessage];
} else {
return [[ABKInAppMessageModalViewController alloc] initWithInAppMessage:inAppMessage];
}
}
Angepasste Ansicht überschreiben und bereitstellen
Überschreiben Sie loadView() und stellen Sie Ihre eigene angepasste Ansicht ein, die Ihren Anforderungen entspricht.
1
2
3
4
5
6
7
override var nibname: String{
return "ModalPickerViewController"
}
override func loadView() {
Bundle.main.loadNibNamed(nibName, owner: self, options: nil)
}
Angepasste Ansicht überschreiben und bereitstellen
Überschreiben Sie loadView() und stellen Sie Ihre eigene angepasste Ansicht ein, die Ihren Anforderungen entspricht.
1
2
3
4
- (void)loadView {
NSString *nibName = @"ModalPickerViewController";
[[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
}
Variablen für eine dynamische Liste formatieren
Bevor die Komponenten von UIPickerView neu geladen werden, wird die Nachrichten-Variable inAppMessage als String ausgegeben. Diese Nachricht muss als Array formatiert werden, um korrekt angezeigt zu werden. Dies kann beispielsweise durch die Verwendung von components(separatedBy: ", ") erreicht werden.
1
2
3
4
5
6
override func viewDidLoad() {
super.viewDidLoad()
items = inAppMessage.message.separatedByCommaSpaceValue
pickerView.reloadAllComponents()
}
Variablen für PickerView formatieren
Bevor die Komponenten von UIPickerView neu geladen werden, wird die Nachrichten-Variable inAppMessage als String ausgegeben. Diese Nachricht muss als Array formatiert werden, um korrekt angezeigt zu werden. Dies kann beispielsweise durch die Verwendung von componentsSeparatedByString erreicht werden.
1
2
3
4
5
6
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [[NSArray alloc] initWithArray:[self.inAppMessage.message componentsSeparatedByString:@", "]];
[self.pickerView reloadAllComponents];
}
Angepasstes Attribut zuweisen
Nachdem Nutzer:innen auf „Senden“ getippt haben, übergeben Sie das Attribut mit dem entsprechend ausgewählten Wert unter Verwendung der Unterklasse an Braze.
1
2
3
4
5
@IBAction func primaryButtonTapped(_ sender: Any) {
guard let item = selectedItem, !item.isEmpty, let attributeKey = inAppMessage.extras?[InAppMessageKey.attributeKey.rawValue] as? String else { return }
AppboyManager.shared.setCustomAttributeWithKey(attributeKey, andStringValue: item)
}
Angepasstes Attribut zuweisen
Nachdem Nutzer:innen auf „Senden“ getippt haben, übergeben Sie das Attribut mit dem entsprechend ausgewählten Wert unter Verwendung der Unterklasse an Braze.
1
2
3
4
5
6
7
8
- (IBAction)primaryButtonTapped:(id)sender {
InAppMessageData *inAppMessageData = [[InAppMessageData alloc] init];
NSString *key = [inAppMessageData rawValueForInAppMessageKey:InAppMessageKeyAttributeKey];
if (self.selectedItem.length > 0 && [self.inAppMessage.extras objectForKey:key]) {
[[AppboyManager shared] setCustomAttributeWithKey:self.inAppMessage.extras[key] andStringValue:self.selectedItem];
}
}

Möchten Sie unsere angepassten modalen In-App-Nachrichten nutzen, um Videos über FaceTime zu teilen? Sehen Sie sich unseren Implementierungsleitfaden für In-App-Nachrichten mit SharePlay an.
Angepasste Full-In-App-Nachricht

Verwenden Sie angepasste Full-In-App-Nachrichten, um interaktive, nutzerfreundliche Aufforderungen zur Erfassung wertvoller Kundendaten zu erstellen. Das nebenstehende Beispiel zeigt die Implementierung einer angepassten Full-In-App-Nachricht, die als interaktiver Push-Primer mit Präferenzen für Benachrichtigungen umgesetzt wurde.
Besuchen Sie den FullListViewController, um loszulegen.
Dashboard-Konfiguration
Um eine angepasste Full-In-App-Nachricht im Dashboard einzurichten, müssen Sie eine Liste Ihrer Tags angeben, die als kommagetrennte Zeichenkette formatiert ist.
Geben Sie in den Schlüssel-Wert-Paaren einen attribute_key an. Dieser Schlüssel wird zusammen mit den von Nutzer:innen ausgewählten Werten als angepasstes Attribut in ihrem Nutzerprofil gespeichert. Ihre angepasste Ansichtslogik muss die an Braze gesendeten Nutzerattribute verarbeiten.

Touch-Ereignisse in der In-App-Nachricht abfangen
Das Abfangen von Touch-Ereignissen in der In-App-Nachricht ist entscheidend, damit die Buttons der angepassten Full-In-App-Nachricht korrekt funktionieren. Standardmäßig fügt ABKInAppMessageImmersive der Nachricht eine Tippgesten-Erkennung hinzu, sodass Nutzer:innen Nachrichten ohne Buttons ausblenden können. Durch Hinzufügen eines UISwitch oder Buttons zur Ansichtshierarchie UITableViewCell werden die Berührungen nun von der angepassten Ansicht verarbeitet. Seit iOS 6 haben Buttons und andere Steuerelemente bei der Arbeit mit Gestenerkennung Vorrang, sodass unsere angepasste Full-In-App-Nachricht wie vorgesehen funktioniert.