
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 Entwicklerleitfaden zur grundlegenden Integration von In-App-Nachrichten? Bitte finden Sie es. here.
Leitfaden für die Implementierung von In-App-Nachrichten
Dieser Leitfaden für die optionale erweiterte Implementierung enthält Hinweise zur Code-Anpassung für In-App-Nachrichten, drei von unserem Team entwickelte Anwendungsfälle und begleitende Code-Snippets. Besuchen Sie unser Braze Demo Repository hier! Dieser Implementierungsleitfaden konzentriert sich auf eine Swift-Implementierung. Für Interessierte werden jedoch Objective-C-Snippets bereitgestellt. Suchen Sie nach HTML-Implementierungen? Werfen Sie einen Blick auf unser HTML-Template-Repository!
Code-Überlegungen
Der folgende Anleitung 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 aufgefüllt werden soll. Wir beschreiben in dieser Anleitung eine grundlegende Implementierung und zeigen, wie die Unterklassen “Full”, “Slide-up” und “Modal” implementiert werden können. Wenn Sie einen angepassten View-Controller einrichten möchten, müssen Sie alle anderen Unterklassen für In-App-Nachrichten einrichten. 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 Anwendungsbeispiele. Jeder Anwendungsfall beinhaltet 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 In-App-Nachricht des Typs “Slide-up”
- Angepasste In-App-Nachricht des Typs “Modal”
- Angepasste In-App-Nachricht des Typs “Full”
Benutzerdefinierte In-App-Nachricht zum Hochschieben

Bei der Erstellung Ihrer Slide-up-Nachricht werden Sie feststellen, dass Sie die Platzierung der Nachricht mit den Standardmethoden nicht ändern können. Um eine Änderung wie diese vorzunehmen, verwenden Sie eine Unterklasse von ABKInAppMessageSlideupViewController und überschreiben die Variable offset mit Ihrer angepassten Variablen. Das Bild auf der rechten Seite zeigt ein Beispiel dafür, wie Sie damit Ihre In-App-Nachrichten anpassen können.
Besuchen Sie die SlideFromBottomViewController um loszulegen.
Hinzufügen von zusätzlichem Verhalten zu unserer Standard-Benutzeroberfläche
**Aktualisieren der Variablen offset **
Aktualisieren Sie die Variable offset und legen Sie einen Offset fest, der Ihren Vorstellungen 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 Variablen 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 topMostViewController() Funktion.
**Aktualisieren der Variablen offset **
Aktualisieren Sie die Variable offset und legen Sie einen Offset fest, der Ihren Vorstellungen 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 Variablen 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;
}
Benutzerdefinierte Einschränkung außer Kraft setzen und festlegen
Überschreiben Sie beforeMoveInAppMessageViewOnScreen() und legen Sie einen angepassten Constraint-Wert fest. 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()
}
Benutzerdefinierte Einschränkung außer Kraft setzen und festlegen
Überschreiben Sie beforeMoveInAppMessageViewOnScreen() und legen Sie einen angepassten Constraint-Wert fest. 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];
}
Einschränkung für Geräteausrichtung anpassen
Passen Sie den entsprechenden Wert in viewWillTransition() an, da die Unterklasse für die Synchronisierung der Einschränkung bei Layoutänderungen zuständig ist.
Benutzerdefinierte 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 kommagetrennter String formatiert ist. In unserem Beispiel verwenden wir Connected-Content, um eine JSON-Liste mit Team-Namen abzurufen und die Namen entsprechend zu formatieren.

Geben Sie in den Schlüssel-Wert-Paaren einen attribute_key an. Dieser Schlüssel wird zusammen mit dem vom Benutzer ausgewählten Wert als benutzerdefiniertes Attribut in seinem Benutzerprofil gespeichert. Ihre benutzerdefinierte Ansichtslogik muss die an Braze gesendeten Benutzerattribute 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 für jede einzelne Nachricht konfiguriert werden, so dass benutzerdefinierte 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];
}
}
Benutzerdefinierte Ansicht überschreiben und bereitstellen
Setzen Sie loadView() außer Kraft und stellen Sie Ihre eigene benutzerdefinierte Ansicht ein, die Ihren Bedürfnissen 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)
}
Benutzerdefinierte Ansicht überschreiben und bereitstellen
Setzen Sie loadView() außer Kraft und stellen Sie Ihre eigene benutzerdefinierte Ansicht ein, die Ihren Bedürfnissen entspricht.
1
2
3
4
- (void)loadView {
NSString *nibName = @"ModalPickerViewController";
[[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
}
Formatvariablen für eine dynamische Liste
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()
}
Formatvariablen für PickerView
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 ein Nutzer auf “Senden” geklickt hat, ü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 ein Nutzer auf “Senden” geklickt hat, ü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? Dann sehen Sie sich unseren Implementierungsleitfaden für In-App-Nachrichten mit SharePlay an.
Angepasste In-App-Nachricht des Typs “Full”

Verwenden Sie benutzerdefinierte, vollständige In-App-Nachrichten, um interaktive, benutzerfreundliche Aufforderungen zur Erfassung wertvoller Kundendaten zu erstellen. Das Beispiel auf der rechten Seite zeigt die Implementierung einer angepassten In-App-Nachricht des Typs “Full”, die als interaktiver Push-Primer mit Benachrichtigungspräferenzen überarbeitet wurde.
Besuchen Sie die FullListViewController um loszulegen.
Dashboard Konfiguration
Um eine angepasste In-App-Nachricht des Typs “Full” im Dashboard einzurichten, müssen Sie eine Liste Ihrer Tags angeben, die als kommagetrennter String formatiert ist.
Geben Sie in den Schlüssel-Wert-Paaren einen attribute_key an. Dieser Schlüssel wird zusammen mit den vom Benutzer ausgewählten Werten in seinem Benutzerprofil als benutzerdefiniertes Attribut gespeichert. Ihre benutzerdefinierte Ansichtslogik muss die an Braze gesendeten Benutzerattribute verarbeiten.

Touch-Events in der In-App-Nachricht abfangen
Damit die angepassten Buttons für In-App-Nachricht richtig funktionieren, ist das Abfangen von Berührungen in der App entscheidend. Standardmäßig fügt ABKInAppMessageImmersive der Nachricht eine Tippgesten-Erkennung hinzu, sodass Nutzer die Nachrichten ohne Buttons ausblenden können. Durch Hinzufügen eines UISwitch oder eines Buttons zur Ansichtshierarchie UITableViewCell werden die Touchgesten nun von der angepassten Ansicht verarbeitet. Seit iOS 6 haben Buttons und andere Steuerelemente bei Arbeiten mit Gestenerkennung Vorrang, sodass unsere angepasste In-App-Nachricht des Typs “Full” genauso funktioniert, wie sie sollte.