Skip to content



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

Zwei iPhones nebeneinander. Beim ersten iPhone berührt die Slide-up-Nachricht den unteren Rand des Displays. Beim zweiten iPhone wird die Slide-up-Nachricht weiter oben auf dem Bildschirm angezeigt, sodass der App-Navigations-Button sichtbar ist.

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 iPhone, das eine modale In-App-Nachricht anzeigt, mit der Sie durch eine Liste von Sportmannschaften blättern und Ihre Lieblingsmannschaft auswählen können. Am Ende dieser In-App-Nachricht befindet sich ein großer blauer Button zum Absenden.

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.

Der In-App-Nachrichten-Editor zeigt eine Vorschau, wie die In-App-Nachricht aussehen wird. Stattdessen wird die Artikelliste angezeigt, die Sie an Braze übermittelt haben. Da die Braze-Benutzeroberfläche Ihre angepasste In-App-Nachrichten-UI nur anzeigt, wenn sie an ein Telefon gesendet wird, gibt die Vorschau keinen Aufschluss darüber, wie Ihre Nachricht tatsächlich aussehen wird. Wir empfehlen daher, vor dem Senden einen Test durchzuführen.

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.

Zwei Schlüssel-Wert-Paare im Nachrichten-Editor. Das erste Schlüssel-Wert-Paar hat „attribute_key“ als „Favorite Team“ festgelegt, und das zweite hat „view_type“ als „picker“ festgelegt.

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];
  }
}

Angepasste Full-In-App-Nachricht

Eine In-App-Nachricht, die eine Liste von Konfigurationsoptionen mit Kippschaltern neben jeder Option anzeigt. Am Ende der Nachricht befindet sich ein großer blauer Button zum Absenden.

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.

Drei Schlüssel-Wert-Paare im Nachrichten-Editor. Das erste „attribute_key“ ist als „Push Tags“ festgelegt, das zweite „subtitle_text“ als „Durch das Aktivieren von Benachrichtigungen wird auch …“ und das dritte „view_type“ als „table_list“.

Touch-Ereignisse in der In-App-Nachricht abfangen

Ein Apple-Gerät, das Reihen von Einstellungen und Kippschaltern anzeigt. Die angepasste Ansicht verwaltet die Buttons, und alle Berührungen außerhalb der Button-Steuerelemente werden von der In-App-Nachricht verarbeitet und schließen diese. 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.

New Stuff!