In-App-Nachrichten anpassen
Erfahren Sie, wie Sie In-App-Nachrichten für das Braze SDK anpassen können. Für fortgeschrittene Styling-Techniken empfehlen wir Ihnen unser Tutorial zur Anpassung des Nachrichtenstylings mithilfe von Schlüssel-Wert-Paaren.
Voraussetzungen
Bevor Sie dieses Feature nutzen können, müssen Sie das Braze Web SDK integrieren.
Angepasste Stile
Die UI-Elemente von Braze sind standardmäßig so gestaltet, dass sie ein neutrales In-App-Nachricht-Erlebnis bieten und die Konsistenz mit anderen mobilen Plattformen von Braze gewährleisten. Die Standardstile von Braze sind in CSS im Braze SDK definiert.
Einstellen eines Standard-Stils
Indem Sie ausgewählte Stile in Ihrer Anwendung außer Kraft setzen, können Sie unsere standardmäßigen In-App-Nachrichtentypen mit Ihren eigenen Hintergrundbildern, Schriftfamilien, Stilen, Größen, Animationen und vielem mehr anpassen.
Im Folgenden finden Sie ein Beispiel für eine Überschreibung, die bewirkt, dass die Kopfzeilen einer In-App-Nachricht kursiv dargestellt werden:
body .ab-in-app-message .ab-message-header {
font-style: italic;
}
In den JSDocs finden Sie weitere Informationen.
Anpassen des Z-Index
In-App-Nachrichten werden standardmäßig über z-index: 9001 angezeigt. Dies lässt sich mit der Initialisierungsoption inAppMessageZIndex konfigurieren, falls Ihre Website Elemente mit höheren Werten stilisiert.
braze.initialize("YOUR-API-KEY", {
baseUrl: "YOUR-API-ENDPOINT",
inAppMessageZIndex: 12000
});

Dieses Feature ist nur für Web Braze SDK v3.3.0 und höher verfügbar.
Anpassen von Nachrichtenabweisungen
Standardmäßig wird eine In-App-Nachricht durch Drücken der Escape-Taste oder durch einen Klick auf den ausgegrauten Hintergrund der Seite verworfen, wenn sie angezeigt wird. Konfigurieren Sie die Initialisierungsoption requireExplicitInAppMessageDismissal auf true, um dieses Verhalten zu verhindern und einen expliziten Klick auf einen Button zu verlangen, um Nachrichten zu schließen.
import * as braze from "@braze/web-sdk";
braze.initialize("YOUR-API-KEY", {
baseUrl: "YOUR-API-ENDPOINT",
requireExplicitInAppMessageDismissal: true
});
Anpassen des Anzeigezeitpunkts
Um das standardmäßige Anzeigeverhalten zu überschreiben, entfernen Sie Aufrufe von braze.automaticallyShowInAppMessages() und verarbeiten Sie Nachrichten in braze.subscribeToInAppMessage(). Registrieren Sie Ihren Callback vor braze.openSession(), damit Sie Nachrichten beim Sitzungsstart abfangen und entscheiden können, ob Sie jede Nachricht anzeigen oder zurückstellen möchten.
Standardmäßig zeigt Braze In-App-Nachrichten an, wenn sie getriggert werden und zur Anzeige berechtigt sind. Wenn Sie ein anderes Verhalten für Ihr App-Erlebnis benötigen, verwenden Sie einen angepassten Callback, um Nachrichten basierend auf Ihrer eigenen Logik zurückzustellen oder anzuzeigen.
Das folgende Beispiel zeigt, wie Sie getriggerte In-App-Nachrichten abonnieren, ausgewählte Nachrichten zurückstellen und zurückgestellte Nachrichten später anzeigen können:
import * as braze from "@braze/web-sdk";
braze.initialize("YOUR-API-KEY", {
baseUrl: "YOUR-API-ENDPOINT"
});
braze.subscribeToInAppMessage(function (message) {
// Control-group messages should always be "shown" to log analytics.
if (message.isControl || message instanceof braze.ControlMessage) {
braze.showInAppMessage(message);
return;
}
const shouldDefer = true; // Replace with your own display logic
if (shouldDefer) {
braze.deferInAppMessage(message);
return;
}
braze.showInAppMessage(message);
});
braze.openSession();
// Later, when your app is ready to display a deferred message:
const deferredMessage = braze.getDeferredInAppMessage();
if (deferredMessage) {
braze.showInAppMessage(deferredMessage);
}
Weitere Informationen zur Anpassung der Zustellung finden Sie unter:
Öffnen von Links in einem neuen Tab
Um festzulegen, dass Ihre In-App-Nachricht-Links in einem neuen Tab geöffnet werden, setzen Sie die Option openInAppMessagesInNewTab auf true, um zu erzwingen, dass alle Links von In-App-Nachrichten-Klicks in einem neuen Tab oder Fenster geöffnet werden.
braze.initialize('api-key', { openInAppMessagesInNewTab: true} );
Voraussetzungen
Bevor Sie dieses Feature nutzen können, müssen Sie das Android Braze SDK integrieren. Außerdem müssen Sie In-App-Nachrichten einrichten.
Angepasste Manager-Listener einrichten
Während der BrazeInAppMessageManager-Listener die Anzeige und den Lebenszyklus von In-App-Nachrichten automatisch verwalten kann, müssen Sie einen angepassten Manager-Listener implementieren, wenn Sie Ihre Nachrichten vollständig anpassen möchten.
Das Braze SDK enthält eine Standard-Klasse DefaultHtmlInAppMessageActionListener, die verwendet wird, wenn kein angepasster Listener definiert ist, und automatisch die entsprechenden Aktionen ausführt. Wenn Sie mehr Kontrolle darüber benötigen, wie Nutzer:innen mit verschiedenen Buttons in einer angepassten HTML-In-App-Nachricht interagieren, implementieren Sie eine angepasste IHtmlInAppMessageActionListener-Klasse.
Dieser Listener gilt für beide – Nachrichten, die mit angepasstem HTML erstellt wurden, und Nachrichten, die mit dem Drag-and-Drop-Editor (DnD) erstellt wurden. Er gilt nicht für herkömmliche IAMs. Herkömmliche IAMs sind die integrierten, SDK-gerenderten Nachrichtentypen von Braze (zum Beispiel Slideup, Modal und Vollbild), die im ursprünglichen In-App-Nachrichten-Editor mit vordefinierten Layouts erstellt werden. Im Gegensatz zu angepassten HTML- und DnD-IAMs durchlaufen sie nicht den HTML-Action-Listener-Flow.
Wenn Sie einen angepassten IHtmlInAppMessageActionListener festlegen, überschreibt seine Logik das Standard-Klickverhalten für alle DnD-Nachrichten. Bitte stellen Sie sicher, dass Ihr Marketingteam darüber informiert ist, da dies ihre Campaigns auf unerwartete Weise beeinflussen kann.
Schritt 1: Den angepassten Manager-Listener implementieren
Schritt 1.1: IInAppMessageManagerListener implementieren
Erstellen Sie eine Klasse, die IInAppMessageManagerListener implementiert.
Die Callbacks in Ihrem IInAppMessageManagerListener werden auch an verschiedenen Punkten im Lebenszyklus der In-App-Nachricht aufgerufen. Wenn Sie beispielsweise einen angepassten Manager-Listener festlegen, wenn eine In-App-Nachricht von Braze empfangen wird, wird die Methode beforeInAppMessageDisplayed() aufgerufen. Wenn Ihre Implementierung dieser Methode InAppMessageOperation.DISCARD zurückgibt, signalisiert dies Braze, dass die In-App-Nachricht von der Host-App verarbeitet wird und nicht von Braze angezeigt werden soll. Wenn InAppMessageOperation.DISPLAY_NOW zurückgegeben wird, versucht Braze, die In-App-Nachricht anzuzeigen. Diese Methode sollte verwendet werden, wenn Sie die In-App-Nachricht auf eine angepasste Weise anzeigen möchten.
IInAppMessageManagerListener enthält auch Delegate-Methoden für Nachrichten-Klicks und Buttons, die in Fällen wie dem Abfangen einer Nachricht verwendet werden können, wenn ein Button oder eine Nachricht für die weitere Verarbeitung angeklickt wird.
Schritt 1.2: In die IAM-View-Lebenszyklusmethoden einbinden (optional)
Die Schnittstelle IInAppMessageManagerListener enthält In-App-Nachrichten-View-Methoden, die an bestimmten Punkten im Lebenszyklus der In-App-Nachrichten-View aufgerufen werden. Diese Methoden werden in der folgenden Reihenfolge aufgerufen:
beforeInAppMessageViewOpened: Wird aufgerufen, kurz bevor die In-App-Nachricht zur View der Activity hinzugefügt wird. Die In-App-Nachricht ist zu diesem Zeitpunkt noch nicht für die Nutzer:innen sichtbar.afterInAppMessageViewOpened: Wird aufgerufen, kurz nachdem die In-App-Nachricht zur View der Activity hinzugefügt wurde. Die In-App-Nachricht ist zu diesem Zeitpunkt für die Nutzer:innen sichtbar.beforeInAppMessageViewClosed: Wird aufgerufen, kurz bevor die In-App-Nachricht aus der View der Activity entfernt wird. Die In-App-Nachricht ist zu diesem Zeitpunkt noch für die Nutzer:innen sichtbar.afterInAppMessageViewClosed: Wird aufgerufen, kurz nachdem die In-App-Nachricht aus der View der Activity entfernt wurde. Die In-App-Nachricht ist zu diesem Zeitpunkt nicht mehr für die Nutzer:innen sichtbar.
Beachten Sie, dass die Zeitspanne zwischen afterInAppMessageViewOpened und beforeInAppMessageViewClosed diejenige ist, in der die In-App-Nachrichten-View auf dem Bildschirm sichtbar für die Nutzer:innen angezeigt wird.

Die Implementierung dieser Methoden ist nicht erforderlich. Sie dienen lediglich dazu, den Lebenszyklus der In-App-Nachrichten-View zu verfolgen und darüber zu informieren. Sie können diese Methodenimplementierungen leer lassen.
Erstellen Sie eine Klasse, die IHtmlInAppMessageActionListener implementiert.
Die Callbacks in Ihrem IHtmlInAppMessageActionListener werden aufgerufen, wenn Nutzer:innen eine der folgenden Aktionen innerhalb der HTML-In-App-Nachricht auslösen:
- Auf den Schließen-Button klicken
- Ein angepasstes Event auslösen
- Auf eine URL innerhalb der HTML-In-App-Nachricht klicken
public class CustomHtmlInAppMessageActionListener implements IHtmlInAppMessageActionListener {
private final Context mContext;
public CustomHtmlInAppMessageActionListener(Context context) {
mContext = context;
}
@Override
public void onCloseClicked(IInAppMessage inAppMessage, String url, Bundle queryBundle) {
Toast.makeText(mContext, "HTML In App Message closed", Toast.LENGTH_LONG).show();
BrazeInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(false);
}
@Override
public boolean onCustomEventFired(IInAppMessage inAppMessage, String url, Bundle queryBundle) {
Toast.makeText(mContext, "Custom event fired. Ignoring.", Toast.LENGTH_LONG).show();
return true;
}
@Override
public boolean onOtherUrlAction(IInAppMessage inAppMessage, String url, Bundle queryBundle) {
Toast.makeText(mContext, "Custom url pressed: " + url + " . Ignoring", Toast.LENGTH_LONG).show();
BrazeInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(false);
return true;
}
}
class CustomHtmlInAppMessageActionListener(private val mContext: Context) : IHtmlInAppMessageActionListener {
override fun onCloseClicked(inAppMessage: IInAppMessage, url: String, queryBundle: Bundle) {
Toast.makeText(mContext, "HTML In App Message closed", Toast.LENGTH_LONG).show()
BrazeInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(false)
}
override fun onCustomEventFired(inAppMessage: IInAppMessage, url: String, queryBundle: Bundle): Boolean {
Toast.makeText(mContext, "Custom event fired. Ignoring.", Toast.LENGTH_LONG).show()
return true
}
override fun onOtherUrlAction(inAppMessage: IInAppMessage, url: String, queryBundle: Bundle): Boolean {
Toast.makeText(mContext, "Custom url pressed: $url . Ignoring", Toast.LENGTH_LONG).show()
BrazeInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(false)
return true
}
}
Schritt 2: Braze anweisen, den angepassten Manager-Listener zu verwenden
Nachdem Sie Ihren IInAppMessageManagerListener erstellt haben, rufen Sie BrazeInAppMessageManager.getInstance().setCustomInAppMessageManagerListener() auf, um BrazeInAppMessageManager anzuweisen, Ihren angepassten IInAppMessageManagerListener anstelle des Standard-Listeners zu verwenden. Tun Sie dies in Ihrer Application.onCreate() vor allen anderen Aufrufen an Braze, damit der angepasste Listener festgelegt wird, bevor In-App-Nachrichten angezeigt werden.
In-App-Nachrichten vor der Anzeige ändern
Wenn eine neue In-App-Nachricht empfangen wird und bereits eine In-App-Nachricht angezeigt wird, wird die neue Nachricht oben auf den Stack gelegt und kann zu einem späteren Zeitpunkt angezeigt werden.
Wenn jedoch keine In-App-Nachricht angezeigt wird, wird die folgende Delegate-Methode in IInAppMessageManagerListener aufgerufen:
@Override
public InAppMessageOperation beforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
return InAppMessageOperation.DISPLAY_NOW;
}
override fun beforeInAppMessageDisplayed(inAppMessage: IInAppMessage): InAppMessageOperation {
return InAppMessageOperation.DISPLAY_NOW
}
Der Rückgabewert von InAppMessageOperation() kann steuern, wann die Nachricht angezeigt werden soll. Die empfohlene Verwendung dieser Methode ist, Nachrichten in bestimmten Bereichen der App zu verzögern, indem DISPLAY_LATER zurückgegeben wird, wenn In-App-Nachrichten das App-Erlebnis der Nutzer:innen stören würden.
InAppMessageOperation-Rückgabewert |
Verhalten |
|---|---|
DISPLAY_NOW |
Die Nachricht wird angezeigt |
DISPLAY_LATER |
Die Nachricht wird auf den Stack zurückgelegt und bei der nächsten verfügbaren Gelegenheit angezeigt |
DISCARD |
Die Nachricht wird verworfen |
null |
Die Nachricht wird ignoriert. Diese Methode sollte NICHT null zurückgeben |
Weitere Details finden Sie unter InAppMessageOperation.

Wenn Sie die In-App-Nachricht mit DISCARD verwerfen und durch Ihre eigene In-App-Nachrichten-View ersetzen, müssen Sie Klicks und Impressionen der In-App-Nachricht manuell protokollieren.
Auf Android geschieht dies durch Aufrufen von logClick und logImpression für In-App-Nachrichten und logButtonClick für immersive In-App-Nachrichten.

Sobald eine In-App-Nachricht auf den Stack gelegt wurde, können Sie jederzeit anfordern, dass sie abgerufen und angezeigt wird, indem Sie BrazeInAppMessageManager.getInstance().requestDisplayInAppMessage() aufrufen. Diese Methode fordert Braze auf, die nächste verfügbare In-App-Nachricht vom Stack anzuzeigen.
Nachdem Ihr IHtmlInAppMessageActionListener erstellt wurde, rufen Sie BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener() auf, um BrazeInAppMessageManager anzuweisen, Ihren angepassten IHtmlInAppMessageActionListener anstelle des Standard-Action-Listeners zu verwenden.
Wir empfehlen, Ihren IHtmlInAppMessageActionListener in Ihrer Application.onCreate() vor allen anderen Aufrufen an Braze festzulegen. Dadurch wird der angepasste Action-Listener festgelegt, bevor eine In-App-Nachricht angezeigt wird:
BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(new CustomHtmlInAppMessageActionListener(context));
BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(CustomHtmlInAppMessageActionListener(context))
Angepasste Factorys festlegen
Sie können eine Reihe von Standardwerten mithilfe angepasster Factory-Objekte überschreiben. Diese können bei Bedarf beim Braze SDK registriert werden, um die gewünschten Ergebnisse zu erzielen. Wenn Sie sich jedoch entscheiden, eine Factory zu überschreiben, müssen Sie wahrscheinlich explizit auf die Standardimplementierung zurückgreifen oder die vom Braze-Standard bereitgestellte Funktionalität neu implementieren. Das folgende Code-Snippet veranschaulicht, wie Sie angepasste Implementierungen der Schnittstellen IInAppMessageViewFactory und IInAppMessageViewWrapperFactory bereitstellen können.
In-App-Nachrichtentypen
class BrazeDemoApplication : Application(){
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(BrazeActivityLifecycleCallbackListener(true, true))
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory(CustomInAppMessageViewWrapperFactory())
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewFactory(CustomInAppMessageViewFactory())
}
}
In-App-Nachrichtentypen
public class BrazeDemoApplication extends Application {
@Override
public void onCreate{
super.onCreate();
registerActivityLifecycleCallbacks(new BrazeActivityLifecycleCallbackListener(true, true));
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory(new CustomInAppMessageViewWrapperFactory());
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewFactory(new CustomInAppMessageViewFactory());
}
}
Die Braze-In-App-Nachrichtentypen sind vielseitig genug, um die meisten angepassten Anwendungsfälle abzudecken. Wenn Sie jedoch das visuelle Erscheinungsbild Ihrer In-App-Nachrichten vollständig selbst definieren möchten, anstatt einen Standardtyp zu verwenden, ermöglicht Braze dies durch die Festlegung einer angepassten View-Factory.
Der BrazeInAppMessageManager platziert das In-App-Nachrichtenmodell standardmäßig automatisch in die vorhandene Ansichtshierarchie der Activity, indem er DefaultInAppMessageViewWrapper verwendet. Wenn Sie anpassen möchten, wie In-App-Nachrichten in die Ansichtshierarchie eingefügt werden, sollten Sie eine angepasste IInAppMessageViewWrapperFactory verwenden.
In-App-Nachrichten haben ein voreingestelltes Animationsverhalten. Slideup-Nachrichten gleiten in den Bildschirm; full- und modal-Nachrichten werden ein- und ausgeblendet. Wenn Sie angepasste Animationsverhaltensweisen für Ihre In-App-Nachrichten definieren möchten, ermöglicht Braze dies durch die Einrichtung einer angepassten Animations-Factory.
Schritt 1: Factory implementieren
Erstellen Sie eine Klasse, die IInAppMessageViewFactory implementiert:
public class CustomInAppMessageViewFactory implements IInAppMessageViewFactory {
@Override
public View createInAppMessageView(Activity activity, IInAppMessage inAppMessage) {
// Uses a custom view for slideups, modals, and full in-app messages.
// HTML in-app messages and any other types will use the Braze default in-app message view factories
switch (inAppMessage.getMessageType()) {
case SLIDEUP:
case MODAL:
case FULL:
// Use a custom view of your choosing
return createMyCustomInAppMessageView();
default:
// Use the default in-app message factories
final IInAppMessageViewFactory defaultInAppMessageViewFactory = BrazeInAppMessageManager.getInstance().getDefaultInAppMessageViewFactory(inAppMessage);
return defaultInAppMessageViewFactory.createInAppMessageView(activity, inAppMessage);
}
}
}
class CustomInAppMessageViewFactory : IInAppMessageViewFactory {
override fun createInAppMessageView(activity: Activity, inAppMessage: IInAppMessage): View {
// Uses a custom view for slideups, modals, and full in-app messages.
// HTML in-app messages and any other types will use the Braze default in-app message view factories
when (inAppMessage.messageType) {
MessageType.SLIDEUP, MessageType.MODAL, MessageType.FULL ->
// Use a custom view of your choosing
return createMyCustomInAppMessageView()
else -> {
// Use the default in-app message factories
val defaultInAppMessageViewFactory = BrazeInAppMessageManager.getInstance().getDefaultInAppMessageViewFactory(inAppMessage)
return defaultInAppMessageViewFactory!!.createInAppMessageView(activity, inAppMessage)
}
}
}
}
Erstellen Sie eine Klasse, die IInAppMessageViewWrapperFactory implementiert und ein IInAppMessageViewWrapper zurückgibt.
Diese Factory wird unmittelbar nach der Erstellung der In-App-Nachrichten-View aufgerufen. Der einfachste Weg, ein angepasstes IInAppMessageViewWrapper zu implementieren, besteht darin, einfach das standardmäßige DefaultInAppMessageViewWrapper zu erweitern:
public class CustomInAppMessageViewWrapper extends DefaultInAppMessageViewWrapper {
public CustomInAppMessageViewWrapper(View inAppMessageView,
IInAppMessage inAppMessage,
IInAppMessageViewLifecycleListener inAppMessageViewLifecycleListener,
BrazeConfigurationProvider brazeConfigurationProvider,
Animation openingAnimation,
Animation closingAnimation, View clickableInAppMessageView) {
super(inAppMessageView,
inAppMessage,
inAppMessageViewLifecycleListener,
brazeConfigurationProvider,
openingAnimation,
closingAnimation,
clickableInAppMessageView);
}
@Override
public void open(@NonNull Activity activity) {
super.open(activity);
Toast.makeText(activity.getApplicationContext(), "Opened in-app message", Toast.LENGTH_SHORT).show();
}
@Override
public void close() {
super.close();
Toast.makeText(mInAppMessageView.getContext().getApplicationContext(), "Closed in-app message", Toast.LENGTH_SHORT).show();
}
}
class CustomInAppMessageViewWrapper(inAppMessageView: View,
inAppMessage: IInAppMessage,
inAppMessageViewLifecycleListener: IInAppMessageViewLifecycleListener,
brazeConfigurationProvider: BrazeConfigurationProvider,
openingAnimation: Animation,
closingAnimation: Animation, clickableInAppMessageView: View) :
DefaultInAppMessageViewWrapper(inAppMessageView,
inAppMessage,
inAppMessageViewLifecycleListener,
brazeConfigurationProvider,
openingAnimation,
closingAnimation,
clickableInAppMessageView) {
override fun open(activity: Activity) {
super.open(activity)
Toast.makeText(activity.applicationContext, "Opened in-app message", Toast.LENGTH_SHORT).show()
}
override fun close() {
super.close()
Toast.makeText(mInAppMessageView.context.applicationContext, "Closed in-app message", Toast.LENGTH_SHORT).show()
}
}
Erstellen Sie eine Klasse, die IInAppMessageAnimationFactory implementiert:
public class CustomInAppMessageAnimationFactory implements IInAppMessageAnimationFactory {
@Override
public Animation getOpeningAnimation(IInAppMessage inAppMessage) {
Animation animation = new AlphaAnimation(0, 1);
animation.setInterpolator(new AccelerateInterpolator());
animation.setDuration(2000L);
return animation;
}
@Override
public Animation getClosingAnimation(IInAppMessage inAppMessage) {
Animation animation = new AlphaAnimation(1, 0);
animation.setInterpolator(new DecelerateInterpolator());
animation.setDuration(2000L);
return animation;
}
}
class CustomInAppMessageAnimationFactory : IInAppMessageAnimationFactory {
override fun getOpeningAnimation(inAppMessage: IInAppMessage): Animation {
val animation: Animation = AlphaAnimation(0, 1)
animation.interpolator = AccelerateInterpolator()
animation.duration = 2000L
return animation
}
override fun getClosingAnimation(inAppMessage: IInAppMessage): Animation {
val animation: Animation = AlphaAnimation(1, 0)
animation.interpolator = DecelerateInterpolator()
animation.duration = 2000L
return animation
}
}
Schritt 2: Braze zur Nutzung der Factory anweisen
Nachdem Ihre IInAppMessageViewFactory erstellt wurde, rufen Sie BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewFactory() auf, um BrazeInAppMessageManager anzuweisen, Ihre angepasste IInAppMessageViewFactory anstelle der Standard-View-Factory zu verwenden.

Wir empfehlen, Ihre IInAppMessageViewFactory in Ihrer Application.onCreate() festzulegen, bevor Sie andere Aufrufe an Braze vornehmen. Dadurch wird die angepasste View-Factory festgelegt, bevor eine In-App-Nachricht angezeigt wird.
Funktionsweise
Die slideup-In-App-Nachrichten-View implementiert IInAppMessageView. Die Nachrichten-Views vom Typ full und modal implementieren IInAppMessageImmersiveView. Die Implementierung einer dieser Klassen ermöglicht es Braze, bei Bedarf Klick-Listener zu Ihrer angepassten View hinzuzufügen. Alle Braze-View-Klassen erweitern Androids View-Klasse.
Die Implementierung von IInAppMessageView ermöglicht es Ihnen, einen bestimmten Bereich Ihrer angepassten View als klickbar zu definieren. Die Implementierung von IInAppMessageImmersiveView ermöglicht es Ihnen, Nachrichten-Button-Views und eine Schließen-Button-View zu definieren.
Nachdem Ihr IInAppMessageViewWrapper erstellt wurde, rufen Sie BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory() auf, um BrazeInAppMessageManager anzuweisen, Ihre angepasste IInAppMessageViewWrapperFactory anstelle der Standard-View-Wrapper-Factory zu verwenden.
Wir empfehlen, Ihre IInAppMessageViewWrapperFactory in Ihrer Application.onCreate() festzulegen, bevor Sie andere Aufrufe an Braze vornehmen. Dadurch wird die angepasste View-Wrapper-Factory festgelegt, bevor eine In-App-Nachricht angezeigt wird:
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory(new CustomInAppMessageViewWrapper());
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory(CustomInAppMessageViewWrapper())
Nachdem Ihre IInAppMessageAnimationFactory erstellt wurde, rufen Sie BrazeInAppMessageManager.getInstance().setCustomInAppMessageAnimationFactory() auf, um BrazeInAppMessageManager anzuweisen, Ihre angepasste IInAppMessageAnimationFactory anstelle der Standard-Animations-Factory zu verwenden.
Wir empfehlen, Ihre IInAppMessageAnimationFactory in Ihrer Application.onCreate() festzulegen, bevor Sie andere Aufrufe an Braze vornehmen. Dadurch wird die angepasste Animations-Factory festgelegt, bevor eine In-App-Nachricht angezeigt wird.
Angepasste Stile
Braze-UI-Elemente haben ein standardmäßiges Erscheinungsbild, das den Android-Standard-UI-Richtlinien entspricht und ein nahtloses Erlebnis bietet. Dieser Referenzartikel behandelt das angepasste Styling von In-App-Nachrichten für Ihre Android- oder FireOS-Anwendung.
Einen Standard-Stil festlegen
Sie können die Standard-Stile in der styles.xml-Datei des Braze SDK einsehen:
<style name="Braze"/>
<style name="Braze.InAppMessage"/>
<style name="Braze.InAppMessage.Header">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">match_parent</item>
<item name="android:padding">0.0dp</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:textColor">@color/com_braze_inappmessage_header_text</item>
<item name="android:textSize">20.0sp</item>
<item name="android:lineSpacingMultiplier">1.3</item>
<item name="android:gravity">center</item>
<item name="android:textStyle">bold</item>
<item name="android:layout_centerHorizontal">true</item>
</style>
Wenn Sie es bevorzugen, können Sie diese Stile überschreiben, um ein Erscheinungsbild zu erstellen, das besser zu Ihrer App passt.
Um einen Stil zu überschreiben, kopieren Sie ihn vollständig in die styles.xml-Datei Ihres Projekts und nehmen Sie Änderungen vor. Der gesamte Stil muss in Ihre lokale styles.xml-Datei kopiert werden, damit alle Attribute korrekt gesetzt werden. Beachten Sie, dass diese angepassten Stile für Änderungen an einzelnen UI-Elementen gedacht sind, nicht für grundlegende Änderungen an Layouts. Änderungen auf Layout-Ebene müssen mit angepassten Views behandelt werden.

Sie können einige Farben direkt in Ihrer Braze-Campaign anpassen, ohne die XML zu ändern. Beachten Sie, dass Farben, die im Braze-Dashboard festgelegt werden, Farben überschreiben, die Sie an anderer Stelle gesetzt haben.
Schriftart anpassen
Sie können eine angepasste Schriftart festlegen, indem Sie die Schriftart im Verzeichnis res/font ablegen. Um sie zu verwenden, überschreiben Sie den Stil für Nachrichtentext, Überschriften und Button-Text und verwenden Sie das Attribut fontFamily, um Braze anzuweisen, Ihre angepasste Schriftfamilie zu verwenden.
Um beispielsweise die Schriftart Ihres In-App-Nachrichten-Button-Texts zu aktualisieren, überschreiben Sie den Stil Braze.InAppMessage.Button und verweisen Sie auf Ihre angepasste Schriftfamilie. Der Attributwert sollte auf eine Schriftfamilie in Ihrem Verzeichnis res/font verweisen.
Hier ist ein gekürztes Beispiel mit einer angepassten Schriftfamilie, my_custom_font_family, die in der letzten Zeile referenziert wird:
<style name="Braze.InAppMessage.Button">
<item name="android:layout_height">wrap_content</item>
...
<item name="android:paddingBottom">15.0dp</item>
<item name="android:fontFamily">@font/my_custom_font_family</item>
<item name="fontFamily">@font/my_custom_font_family</item>
</style>
Neben dem Stil Braze.InAppMessage.Button für Button-Text ist der Stil für Nachrichtentext Braze.InAppMessage.Message und der Stil für Nachrichtenüberschriften Braze.InAppMessage.Header. Wenn Sie Ihre angepasste Schriftfamilie für alle möglichen In-App-Nachrichten-Texte verwenden möchten, können Sie Ihre Schriftfamilie im Stil Braze.InAppMessage festlegen, der der übergeordnete Stil für alle In-App-Nachrichten ist.

Wie bei anderen angepassten Stilen muss der gesamte Stil in Ihre lokale styles.xml-Datei kopiert werden, damit alle Attribute korrekt gesetzt werden.
Schließen von Nachrichten
Slideup-Nachrichten durch Wischen schließen
Standardmäßig können Slideup-In-App-Nachrichten durch eine Wischgeste geschlossen werden. Die Richtung der Wischgeste hängt von der Position des Slideups ab:
- Wischen nach links oder rechts: Schließt das Slideup unabhängig von seiner Position.
- Slideup von unten: Wischen von oben nach unten schließt die Nachricht. Wischen von unten nach oben schließt sie nicht.
- Slideup von oben: Wischen von unten nach oben schließt die Nachricht. Wischen von oben nach unten schließt sie nicht.
Dieses Wischverhalten ist im Standard-DefaultInAppMessageViewWrapper integriert und gilt nur für Slideup-In-App-Nachrichten. Modale und Vollbild-In-App-Nachrichten unterstützen das Schließen durch Wischen nicht. Um dieses Verhalten anzupassen, können Sie eine angepasste View-Wrapper-Factory implementieren.

Das Tippen außerhalb einer Slideup-Nachricht schließt diese standardmäßig nicht. Dieses Verhalten unterscheidet sich von modalen Nachrichten, die für das Schließen durch Tippen außerhalb konfiguriert werden können. Verwenden Sie bei Slideups die Wischgeste oder den Schließen-Button, um die Nachricht zu schließen.
Schließen über die Zurück-Taste deaktivieren
Standardmäßig schließt die Hardware-Zurück-Taste Braze-In-App-Nachrichten. Dieses Verhalten kann pro Nachricht über BrazeInAppMessageManager.setBackButtonDismissesInAppMessageView() deaktiviert werden.
Im folgenden Beispiel ist disable_back_button ein angepasstes Schlüssel-Wert-Paar, das in der In-App-Nachricht festgelegt wird und angibt, ob die Nachricht das Schließen über die Zurück-Taste erlauben soll:
BrazeInAppMessageManager.getInstance().setCustomInAppMessageManagerListener(new DefaultInAppMessageManagerListener() {
@Override
public void beforeInAppMessageViewOpened(View inAppMessageView, IInAppMessage inAppMessage) {
super.beforeInAppMessageViewOpened(inAppMessageView, inAppMessage);
final Map<String, String> extras = inAppMessage.getExtras();
if (extras != null && extras.containsKey("disable_back_button")) {
BrazeInAppMessageManager.getInstance().setBackButtonDismissesInAppMessageView(false);
}
}
@Override
public void afterInAppMessageViewClosed(IInAppMessage inAppMessage) {
super.afterInAppMessageViewClosed(inAppMessage);
BrazeInAppMessageManager.getInstance().setBackButtonDismissesInAppMessageView(true);
}
});
BrazeInAppMessageManager.getInstance().setCustomInAppMessageManagerListener(object : DefaultInAppMessageManagerListener() {
override fun beforeInAppMessageViewOpened(inAppMessageView: View, inAppMessage: IInAppMessage) {
super.beforeInAppMessageViewOpened(inAppMessageView, inAppMessage)
val extras = inAppMessage.extras
if (extras != null && extras.containsKey("disable_back_button")) {
BrazeInAppMessageManager.getInstance().setBackButtonDismissesInAppMessageView(false)
}
}
override fun afterInAppMessageViewClosed(inAppMessage: IInAppMessage) {
super.afterInAppMessageViewClosed(inAppMessage)
BrazeInAppMessageManager.getInstance().setBackButtonDismissesInAppMessageView(true)
}
})

Beachten Sie, dass bei deaktivierter Funktion stattdessen das Standardverhalten der Hardware-Zurück-Taste der Host-Aktivität verwendet wird. Dies kann dazu führen, dass die Zurück-Taste die Anwendung schließt, anstatt die angezeigte In-App-Nachricht.
Schließen durch Tippen außerhalb aktivieren
Standardmäßig ist das Schließen des Modals durch Tippen außerhalb auf false gesetzt. Wenn Sie diesen Wert auf true setzen, wird die modale In-App-Nachricht geschlossen, wenn Nutzer:innen außerhalb der In-App-Nachricht tippen. Dieses Verhalten kann durch folgenden Aufruf aktiviert werden:
BrazeInAppMessageManager.getInstance().setClickOutsideModalViewDismissInAppMessageView(true)
Ausrichtung anpassen
Um eine feste Ausrichtung für eine In-App-Nachricht festzulegen, richten Sie zunächst einen angepassten In-App-Nachrichten-Manager-Listener ein. Aktualisieren Sie dann die Ausrichtung auf dem IInAppMessage-Objekt in der Delegate-Methode beforeInAppMessageDisplayed():
public InAppMessageOperation beforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
// Set the orientation to portrait
inAppMessage.setOrientation(Orientation.PORTRAIT);
return InAppMessageOperation.DISPLAY_NOW;
}
override fun beforeInAppMessageDisplayed(inAppMessage: IInAppMessage): InAppMessageOperation {
// Set the orientation to portrait
inAppMessage.orientation = Orientation.PORTRAIT
return InAppMessageOperation.DISPLAY_NOW
}
Auf Tablet-Geräten werden In-App-Nachrichten unabhängig von der tatsächlichen Bildschirmausrichtung im bevorzugten Ausrichtungsstil der Nutzer:innen angezeigt.
Deaktivieren des dunklen Designs
Standardmäßig prüft beforeInAppMessageDisplayed() von IInAppMessageManagerListener die Systemeinstellungen und aktiviert bedingt das Styling für das dunkle Design der Nachricht mit dem folgenden Code:
@Override
public InAppMessageOperation beforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
if (inAppMessage instanceof IInAppMessageThemeable && ViewUtils.isDeviceInNightMode(BrazeInAppMessageManager.getInstance().getApplicationContext())) {
((IInAppMessageThemeable) inAppMessage).enableDarkTheme();
}
return InAppMessageOperation.DISPLAY_NOW;
}
override fun beforeInAppMessageDisplayed(inAppMessage: IInAppMessage): InAppMessageOperation {
if (inAppMessage is IInAppMessageThemeable && ViewUtils.isDeviceInNightMode(BrazeInAppMessageManager.getInstance().applicationContext!!)) {
(inAppMessage as IInAppMessageThemeable).enableDarkTheme()
}
return InAppMessageOperation.DISPLAY_NOW
}
Um dies zu ändern, können Sie enableDarkTheme in jedem Schritt des Voranzeigeprozesses aufrufen, um Ihre eigene bedingte Logik zu implementieren.
Anpassen der Google Play-Bewertungsaufforderung
Aufgrund der von Google festgelegten Einschränkungen und Beschränkungen werden angepasste Google Play-Bewertungsaufforderungen derzeit nicht von Braze unterstützt. Während einige Nutzer:innen diese Aufforderungen erfolgreich integrieren konnten, haben andere aufgrund von Google Play-Kontingenten niedrige Erfolgsraten verzeichnet. Die Integration erfolgt auf eigenes Risiko. Weitere Informationen finden Sie in der Dokumentation zu Google Play-In-App-Bewertungsaufforderungen.
Voraussetzungen
Bevor Sie dieses Feature nutzen können, müssen Sie das Braze Swift SDK integrieren.
Einrichten des UI-Delegate (erforderlich)
Um die Darstellung von In-App-Nachrichten anzupassen und auf verschiedene Lebenszyklus-Ereignisse zu reagieren, müssen Sie BrazeInAppMessageUIDelegate einrichten. Dies ist ein Delegate-Protokoll, das für den Empfang und die Verarbeitung von ausgelösten In-App-Nachrichten-Payloads, den Empfang von Anzeige-Lebenszyklus-Ereignissen und die Steuerung des Anzeige-Timings verwendet wird. Um BrazeInAppMessageUIDelegate zu verwenden, müssen Sie:
- Die Standard-Implementierung
BrazeInAppMessageUIals IhreninAppMessagePresenterverwenden. - Die
BrazeUI-Bibliothek in Ihr Projekt einbinden.
Schritt 1: Das BrazeInAppMessageUIDelegate-Protokoll implementieren
Implementieren Sie zunächst das BrazeInAppMessageUIDelegate-Protokoll und alle gewünschten zugehörigen Methoden. Im folgenden Beispiel wird dieses Protokoll in der AppDelegate-Klasse der Anwendung implementiert.
extension AppDelegate: BrazeInAppMessageUIDelegate {
// Implement your protocol methods here.
}
@interface AppDelegate () <BrazeInAppMessageUIDelegate>
@end
@implementation AppDelegate
// Implement your protocol methods here.
@end
Schritt 2: Das delegate-Objekt zuweisen
Weisen Sie das delegate-Objekt auf der BrazeInAppMessageUI-Instanz zu, bevor Sie diese In-App-Nachrichten-UI als Ihren inAppMessagePresenter festlegen.
let inAppMessageUI = BrazeInAppMessageUI()
inAppMessageUI.delegate = self
AppDelegate.braze?.inAppMessagePresenter = inAppMessageUI
BrazeInAppMessageUI *inAppMessageUI = [[BrazeInAppMessageUI alloc] init];
inAppMessageUI.delegate = self;
AppDelegate.braze.inAppMessagePresenter = inAppMessageUI;

Nicht alle Delegate-Methoden sind in Objective-C verfügbar, da ihre Parameter nicht mit der Sprachlaufzeit kompatibel sind.

Eine schrittweise Implementierung des In-App-Nachrichten-UI-Delegate finden Sie in diesem Tutorial.
Klick-Verhalten
Jedes Braze.InAppMessage-Objekt enthält eine entsprechende ClickAction, die das Verhalten beim Klicken definiert.
Klick-Aktionstypen
Die Eigenschaft clickAction Ihres Braze.InAppMessage-Objekts ist standardmäßig auf .none gesetzt, kann aber auf einen der folgenden Werte eingestellt werden:
ClickAction |
Klick-Verhalten |
|---|---|
.url(URL, useWebView: Bool) |
Öffnet die angegebene URL in einem externen Browser. Wenn useWebView auf true gesetzt ist, wird sie in einer Web-Ansicht geöffnet. |
.none |
Die Nachricht wird beim Klicken geschlossen. |

Bei In-App-Nachrichten mit Buttons wird die clickAction der Nachricht auch in den endgültigen Payload aufgenommen, wenn die Klick-Aktion vor dem Hinzufügen des Button-Texts hinzugefügt wird.
Klick-Verhalten anpassen
Um dieses Verhalten anzupassen, können Sie die Eigenschaft clickAction ändern, indem Sie sich auf das folgende Beispiel beziehen:
func inAppMessage(
_ ui: BrazeInAppMessageUI,
prepareWith context: inout BrazeInAppMessageUI.PresentationContext
) {
if let newUrl = URL(string: "{your-url}") {
context.message.clickAction = .url(newUrl, useWebView: true)
}
}
Die Methode inAppMessage(_:prepareWith:) ist in Objective-C nicht verfügbar.
Angepasstes Verhalten verarbeiten
Die folgende Delegate-Methode BrazeInAppMessageUIDelegate wird aufgerufen, wenn Nutzer:innen auf eine In-App-Nachricht klicken. Dieser Callback wird bei von Nutzer:innen initiierten Klicks auf In-App-Nachrichten-Buttons und HTML-In-App-Nachrichten-Buttons (Links) ausgelöst, und eine Button-ID wird als optionaler Parameter für diese Interaktionen bereitgestellt. Dieser Callback wird nicht bei programmatischen Klicks aufgerufen, die über brazeBridge.logClick() ausgelöst werden.
func inAppMessage(
_ ui: BrazeInAppMessageUI,
shouldProcess clickAction: Braze.InAppMessage.ClickAction,
buttonId: String?,
message: Braze.InAppMessage,
view: InAppMessageView
) -> Bool
- (BOOL)inAppMessage:(BrazeInAppMessageUI *)ui
shouldProcess:(enum BRZInAppMessageRawClickAction)clickAction
url:(NSURL *)uri
buttonId:(NSString *)buttonId
message:(BRZInAppMessageRaw *)message
view:(UIView *)view;
Diese Methode gibt einen booleschen Wert zurück, der angibt, ob Braze mit der Ausführung der Klick-Aktion fortfahren soll.
func inAppMessage(
_ ui: BrazeInAppMessageUI, shouldProcess clickAction: Braze.InAppMessage.ClickAction,
buttonId: String?, message: Braze.InAppMessage, view: InAppMessageView
) -> Bool {
guard let buttonId,
let idInt = Int(buttonId)
else { return true }
var button: BrazeKit.Braze.InAppMessage.Button? = nil
switch message {
case .modal(let modal):
button = modal.buttons[idInt]
case .modalImage(let modalImage):
button = modalImage.buttons[idInt]
case .full(let full):
button = full.buttons[idInt]
case .fullImage(let fullImage):
button = fullImage.buttons[idInt]
default:
break
}
print(button?.id)
print(button?.text)
print(button?.clickAction)
return true
}
- (BOOL)inAppMessage:(BrazeInAppMessageUI *)ui
shouldProcess:(enum BRZInAppMessageRawClickAction)clickAction
url:(NSURL *)uri
buttonId:(NSString *)buttonId
message:(BRZInAppMessageRaw *)message
view:(UIView *)view {
NSInteger buttonInt = [buttonId integerValue];
if (message.type == BRZInAppMessageRawTypeFull || message.type == BRZInAppMessageRawTypeModal) {
BRZInAppMessageRawButton *button = message.buttons[buttonInt];
NSLog(@"%ld", (long)button.identifier);
NSLog(@"%@", button.text);
NSLog(@"%ld", (long)button.clickAction);
}
return YES;
}
Durch Wischen Slideup-Nachrichten schließen
Standardmäßig können Slideup-In-App-Nachrichten durch eine Wischgeste geschlossen werden. Die Richtung der Wischbewegung hängt von der Slideup-Position ab:
- Wischen nach links oder rechts: Schließt das Slideup unabhängig von seiner Position.
- Slideup von unten: Wischen von oben nach unten schließt die Nachricht. Wischen von unten nach oben schließt sie nicht.
- Slideup von oben: Wischen von unten nach oben schließt die Nachricht. Wischen von oben nach unten schließt sie nicht.
Dieses Wischverhalten ist in die standardmäßige BrazeInAppMessageUI SlideupView integriert und gilt nur für Slideup-In-App-Nachrichten. Modale und Vollbild-In-App-Nachrichten unterstützen kein Schließen durch Wischen. Um die Slideup-Ansicht weiter anzupassen, einschließlich des Wischverhaltens, können Sie die SlideupView.Attributes ändern oder über Subclassing eine angepasste Ansicht bereitstellen.

Das Tippen außerhalb einer Slideup-Nachricht schließt diese nicht. Für modale oder Vollbild-In-App-Nachrichten können Sie das Schließen durch Tippen auf den Hintergrund mithilfe des Attributs dismissOnBackgroundTap aktivieren, das im folgenden Abschnitt beschrieben wird.
Schließen von Modals anpassen
Um das Schließen durch Tippen außerhalb des Modals zu aktivieren, können Sie die Eigenschaft dismissOnBackgroundTap im Attributes-Struct des jeweiligen In-App-Nachrichtentyps ändern, den Sie anpassen möchten.
Wenn Sie dieses Feature beispielsweise für modale Bild-In-App-Nachrichten aktivieren möchten, können Sie Folgendes konfigurieren:
BrazeInAppMessageUI.ModalImageView.Attributes.defaults.dismissOnBackgroundTap = true
Die Anpassung über Attributes ist in Objective-C nicht verfügbar.
Der Standardwert ist false. Dieser bestimmt, ob die modale In-App-Nachricht geschlossen wird, wenn Nutzer:innen außerhalb der In-App-Nachricht tippen.
DismissModalOnOutsideTap |
Beschreibung |
|---|---|
true |
Modale In-App-Nachrichten werden beim Tippen außerhalb geschlossen. |
false |
Standard – modale In-App-Nachrichten werden beim Tippen außerhalb nicht geschlossen. |
Weitere Informationen zur Anpassung von In-App-Nachrichten finden Sie in diesem Artikel.
Ausrichtung von Nachrichten anpassen
Sie können die Ausrichtung Ihrer In-App-Nachrichten anpassen. Sie können eine neue Standardausrichtung für alle Nachrichten festlegen oder eine individuelle Ausrichtung für eine einzelne Nachricht festlegen.
Nachdem die In-App-Nachricht angezeigt wurde, führt jede Änderung der Geräteausrichtung, während die Nachricht noch angezeigt wird, dazu, dass sich die Nachricht mit dem Gerät dreht (vorausgesetzt, dies wird durch die orientation-Konfiguration der Nachricht unterstützt).
Die Geräteausrichtung muss auch von der orientation-Eigenschaft der In-App-Nachricht unterstützt werden, damit die Nachricht angezeigt wird. Zusätzlich wird die Einstellung preferredOrientation nur berücksichtigt, wenn sie in den unterstützten Schnittstellenausrichtungen Ihrer Anwendung im Abschnitt Deployment Info in den Einstellungen Ihres Targets in Xcode enthalten ist.


Die Ausrichtung wird nur für die Darstellung der Nachricht angewendet. Nachdem das Gerät die Ausrichtung geändert hat, nimmt die Nachrichtenansicht eine der von ihr unterstützten Ausrichtungen ein. Auf kleineren Geräten (iPhones, iPod Touch) kann das Festlegen einer Querformat-Ausrichtung für eine modale oder Vollbild-In-App-Nachricht zu abgeschnittenen Inhalten führen.
Anzeigezeitpunkt anpassen
Sie können steuern, ob eine verfügbare In-App-Nachricht zu bestimmten Zeitpunkten in der Nutzererfahrung angezeigt wird. Wenn es Situationen gibt, in denen die In-App-Nachricht nicht erscheinen soll, z. B. während eines Vollbildspiels oder auf einem Ladebildschirm, können Sie ausstehende In-App-Nachrichten verzögern oder verwerfen. Um den Zeitpunkt der In-App-Nachricht zu steuern, verwenden Sie die Delegate-Methode inAppMessage(_:displayChoiceForMessage:), um die Eigenschaft BrazeInAppMessageUI.DisplayChoice festzulegen.
func inAppMessage(
_ ui: BrazeInAppMessageUI,
displayChoiceForMessage message: Braze.InAppMessage
) -> BrazeInAppMessageUI.DisplayChoice
- (enum BRZInAppMessageUIDisplayChoice)inAppMessage:(BrazeInAppMessageUI *)ui displayChoiceForMessage:(BRZInAppMessageRaw *)message
Konfigurieren Sie BrazeInAppMessageUI.DisplayChoice so, dass einer der folgenden Werte zurückgegeben wird:
| Anzeigeoption | Verhalten |
|---|---|
.now |
Die Nachricht wird sofort angezeigt. Dies ist der Standardwert. |
.reenqueue |
Die Nachricht wird nicht angezeigt und wieder oben auf den Stack gelegt. |
.later |
Die Nachricht wird nicht angezeigt und wieder oben auf den Stack gelegt. (Veraltet, bitte .reenqueue verwenden) |
.discard |
Die Nachricht wird verworfen und nicht angezeigt. |

Ein Beispiel für InAppMessageUI finden Sie in unserem Swift Braze SDK Repository und Objective-C.
Statusleiste ausblenden
Bei In-App-Nachrichten vom Typ Full, FullImage und HTML blendet das SDK die Statusleiste standardmäßig aus. Bei anderen Typen von In-App-Nachrichten bleibt die Statusleiste unverändert. Um dieses Verhalten zu konfigurieren, verwenden Sie die Delegate-Methode inAppMessage(_:prepareWith:), um die Eigenschaft statusBarHideBehavior im PresentationContext festzulegen. Dieses Feld akzeptiert einen der folgenden Werte:
| Verhalten zum Ausblenden der Statusleiste | Beschreibung |
|---|---|
.auto |
Die Nachrichtenansicht entscheidet über den Ausblendungsstatus der Statusleiste. |
.hidden |
Statusleiste immer ausblenden. |
.visible |
Statusleiste immer anzeigen. |
Dark Mode deaktivieren
Um zu verhindern, dass In-App-Nachrichten den Dark-Mode-Stil übernehmen, wenn auf dem Gerät der Nutzer:innen der Dark Mode aktiviert ist, implementieren Sie die inAppMessage(_:prepareWith:) Delegate-Methode. Der an die Methode übergebene PresentationContext enthält eine Referenz auf das darzustellende InAppMessage-Objekt. Jede InAppMessage verfügt über eine themes-Eigenschaft, die ein dark- und ein light-Mode-Theme enthält. Wenn Sie die Eigenschaft themes.dark auf nil setzen, zeigt Braze die In-App-Nachricht automatisch mit dem hellen Theme an.
In-App-Nachrichtentypen mit Buttons haben ein zusätzliches themes-Objekt in ihrer buttons-Eigenschaft. Um zu verhindern, dass Buttons den Dark-Mode-Stil übernehmen, können Sie map(_:) verwenden, um ein neues Array von Buttons mit einem light-Theme und ohne dark-Theme zu erstellen.
func inAppMessage(
_ ui: BrazeInAppMessageUI,
prepareWith context: inout BrazeInAppMessageUI.PresentationContext
) {
switch context.message {
case .slideup:
guard var slideup = context.message.slideup else { return }
slideup.themes.dark = nil
context.message.slideup = slideup
case .modal:
guard var modal = context.message.modal else { return }
modal.themes.dark = nil
modal.buttons = modal.buttons.map {
var newButton = $0
newButton.themes = .init(themes: ["light": $0.themes.light])
return newButton
}
context.message.modal = modal
case .modalImage:
guard var modalImage = context.message.modalImage else { return }
modalImage.themes.dark = nil
modalImage.buttons = modalImage.buttons.map {
var newButton = $0
newButton.themes = .init(themes: ["light": $0.themes.light])
return newButton
}
context.message.modalImage = modalImage
case .full:
guard var full = context.message.full else { return }
full.themes.dark = nil
full.buttons = full.buttons.map {
var newButton = $0
newButton.themes = .init(themes: ["light": $0.themes.light])
return newButton
}
context.message.full = full
case .fullImage:
guard var fullImage = context.message.fullImage else { return }
fullImage.themes.dark = nil
fullImage.buttons = fullImage.buttons.map {
var newButton = $0
newButton.themes = .init(themes: ["light": $0.themes.light])
return newButton
}
context.message.fullImage = fullImage
default:
break
}
}
- (void)inAppMessage:(BrazeInAppMessageUI *)ui
prepareWith:(BrazeInAppMessageUIPresentationContextRaw *)context {
switch (context.message.type) {
case BRZInAppMessageRawTypeSlideup: {
NSMutableDictionary *updatedThemes = [context.message.themes mutableCopy];
[updatedThemes removeObjectForKey:@"dark"];
context.message.themes = updatedThemes;
break;
}
case BRZInAppMessageRawTypeModal:
case BRZInAppMessageRawTypeFull:
{
NSMutableDictionary *updatedThemes = [context.message.themes mutableCopy];
[updatedThemes removeObjectForKey:@"dark"];
context.message.themes = updatedThemes;
NSMutableArray *updatedButtons = [NSMutableArray arrayWithCapacity:context.message.buttons.count];
for (BRZInAppMessageRawButton *button in context.message.buttons) {
BRZInAppMessageRawButtonTheme *lightTheme = BRZInAppMessageRawButtonTheme.defaultLight;
BRZInAppMessageRawButton *newButton = [button mutableCopy];
newButton.textColor = lightTheme.textColor;
newButton.backgroundColor = lightTheme.backgroundColor;
newButton.borderColor = lightTheme.borderColor;
[updatedButtons addObject:newButton];
}
context.message.buttons = updatedButtons;
break;
}
default:
break;
}
}
Anpassen der App-Store-Bewertungsaufforderung
Sie können In-App-Nachrichten in einer Campaign verwenden, um Nutzer:innen um eine App-Store-Bewertung zu bitten.

Da diese Beispielaufforderung das Standardverhalten von Braze überschreibt, können wir Impressionen nicht automatisch tracken, wenn sie implementiert wird. Sie müssen Ihre eigenen Analytics protokollieren.
Schritt 1: In-App-Nachrichten-Delegate festlegen
Legen Sie zunächst den BrazeInAppMessageUIDelegate in Ihrer App fest.
Schritt 2: Standard-App-Store-Bewertungsnachricht deaktivieren
Implementieren Sie als Nächstes die inAppMessage(_:displayChoiceForMessage:) Delegate-Methode, um die Standard-App-Store-Bewertungsnachricht zu deaktivieren.
func inAppMessage(_ ui: BrazeInAppMessageUI, displayChoiceForMessage message: Braze.InAppMessage) -> BrazeInAppMessageUI.DisplayChoice {
if message.extras["AppStore Review"] != nil,
let messageUrl = message.clickAction.url {
UIApplication.shared.open(messageUrl, options: [:], completionHandler: nil)
return .discard
} else {
return .now
}
}
- (enum BRZInAppMessageUIDisplayChoice)inAppMessage:(BrazeInAppMessageUI *)ui
displayChoiceForMessage:(BRZInAppMessageRaw *)message {
if (message.extras != nil && message.extras[@"AppStore Review"] != nil) {
[[UIApplication sharedApplication] openURL:message.url options:@{} completionHandler:nil];
return BRZInAppMessageUIDisplayChoiceDiscard;
} else {
return BRZInAppMessageUIDisplayChoiceNow;
}
}
Schritt 3: Einen Deeplink erstellen
Fügen Sie in Ihrem scene:openURLContexts:-Handler den folgenden Code hinzu, um den Deeplink {YOUR-APP-SCHEME}:app-store-review zu verarbeiten. Beachten Sie, dass Sie StoreKit importieren müssen, um SKStoreReviewController verwenden zu können:
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else { return }
let urlString = url.absoluteString.removingPercentEncoding
if (urlString == "{YOUR-APP-SCHEME}:app-store-review") {
SKStoreReviewController.requestReview()
return;
}
// Other deep link handling code…
}
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
NSURL *url = URLContexts.allObjects.firstObject.URL;
NSString *urlString = url.absoluteString.stringByRemovingPercentEncoding;
if ([urlString isEqualToString:@"{YOUR-APP-SCHEME}:app-store-review"]) {
[SKStoreReviewController requestReview];
return;
}
// Other deep link handling code…
}
Schritt 4: Angepasstes Klickverhalten festlegen
Erstellen Sie als Nächstes eine In-App-Messaging-Campaign mit den folgenden Einstellungen:
- Das Schlüssel-Wert-Paar
"AppStore Review" : "true" - Das Klickverhalten auf „Deeplink in die App“ gesetzt, unter Verwendung des Deeplinks
{YOUR-APP-SCHEME}:app-store-review.

Apple beschränkt App-Store-Bewertungsaufforderungen auf maximal drei Mal pro Jahr für jede:n Nutzer:in, daher sollte Ihre Campaign auf drei Mal pro Jahr pro Nutzer:in frequenzbegrenzt sein.
Nutzer:innen können App-Store-Bewertungsaufforderungen deaktivieren. Daher sollte Ihre angepasste Bewertungsaufforderung nicht versprechen, dass eine native App-Store-Bewertungsaufforderung erscheint, und auch nicht direkt um eine Bewertung bitten.
Voraussetzungen
Bevor Sie dieses Feature nutzen können, müssen Sie das React Native Braze SDK integrieren.
Methoden zur Protokollierung
Sie können diese Methoden verwenden, indem Sie Ihre BrazeInAppMessage-Instanz übergeben, um Analytics zu protokollieren und Aktionen auszuführen:
| Methode | Beschreibung |
|---|---|
logInAppMessageClicked(inAppMessage) |
Protokolliert einen Klick für die bereitgestellten In-App-Nachrichten-Daten. |
logInAppMessageImpression(inAppMessage) |
Protokolliert eine Impression für die bereitgestellten In-App-Nachrichten-Daten. |
logInAppMessageButtonClicked(inAppMessage, buttonId) |
Protokolliert einen Button-Klick für die bereitgestellten In-App-Nachrichten-Daten und die Button-ID. |
hideCurrentInAppMessage() |
Schließt die aktuell angezeigte In-App-Nachricht. |
performInAppMessageAction(inAppMessage) |
Führt die Aktion für eine In-App-Nachricht aus. |
performInAppMessageButtonAction(inAppMessage, buttonId) |
Führt die Aktion für einen In-App-Nachrichten-Button aus. |
Verarbeitung von Nachrichten-Daten
In den meisten Fällen können Sie die Methode Braze.addListener verwenden, um Event-Listener zu registrieren, die Daten aus In-App-Nachrichten verarbeiten.
Zusätzlich können Sie auf die In-App-Nachrichten-Daten im JavaScript-Layer zugreifen, indem Sie die Methode Braze.subscribeToInAppMessage aufrufen, damit die SDKs ein inAppMessageReceived-Event veröffentlichen, wenn eine In-App-Nachricht ausgelöst wird. Übergeben Sie einen Callback an diese Methode, um Ihren eigenen Code auszuführen, wenn die In-App-Nachricht ausgelöst und vom Listener empfangen wird.
Informationen zur Anpassung der Verarbeitung von Nachrichten-Daten finden Sie in den folgenden Implementierungsbeispielen:
Um das Standardverhalten zu verbessern oder wenn Sie keinen Zugriff auf die Anpassung des nativen iOS- oder Android-Codes haben, empfehlen wir, die Standard-UI zu deaktivieren und gleichzeitig In-App-Nachrichten-Events von Braze zu empfangen. Um die Standard-UI zu deaktivieren, übergeben Sie false an die Methode Braze.subscribeToInAppMessage und verwenden Sie die In-App-Nachrichten-Daten, um Ihre eigene Nachricht in JavaScript zu erstellen. Beachten Sie, dass Sie Analytics für Ihre Nachrichten manuell protokollieren müssen, wenn Sie die Standard-UI deaktivieren.
import Braze from "@braze/react-native-sdk";
// Option 1: Listen for the event directly via `Braze.addListener`.
//
// You may use this method to accomplish the same thing if you don't
// wish to make any changes to the default Braze UI.
Braze.addListener(Braze.Events.IN_APP_MESSAGE_RECEIVED, (event) => {
console.log(event.inAppMessage);
});
// Option 2: Call `subscribeToInAppMessage`.
//
// Pass in `false` to disable the automatic display of in-app messages.
Braze.subscribeToInAppMessage(false, (event) => {
console.log(event.inAppMessage);
// Use `event.inAppMessage` to construct your own custom message UI.
});
Um fortgeschrittenere Logik einzubauen, die bestimmt, ob eine In-App-Nachricht über die integrierte UI angezeigt werden soll oder nicht, implementieren Sie In-App-Nachrichten über den nativen Layer.

Da es sich um eine erweiterte Anpassungsoption handelt, beachten Sie, dass das Überschreiben der Standard-Braze-Implementierung auch die Logik zum Senden von In-App-Nachrichten-Events an Ihre JavaScript-Listener aufhebt. Wenn Sie weiterhin Braze.subscribeToInAppMessage oder Braze.addListener verwenden möchten, wie unter Zugriff auf In-App-Nachrichten-Daten beschrieben, müssen Sie die Veröffentlichung der Events selbst übernehmen.
Implementieren Sie den IInAppMessageManagerListener wie in unserem Android-Artikel über Custom Manager Listener beschrieben. In Ihrer beforeInAppMessageDisplayed-Implementierung können Sie auf die inAppMessage-Daten zugreifen, diese an den JavaScript-Layer senden und basierend auf dem Rückgabewert entscheiden, ob die native Nachricht angezeigt werden soll oder nicht.
Weitere Informationen zu diesen Werten finden Sie in unserer Android-Dokumentation.
// In-app messaging
@Override
public InAppMessageOperation beforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
WritableMap parameters = new WritableNativeMap();
parameters.putString("inAppMessage", inAppMessage.forJsonPut().toString());
getReactNativeHost()
.getReactInstanceManager()
.getCurrentReactContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("inAppMessageReceived", parameters);
// Note: return InAppMessageOperation.DISCARD if you would like
// to prevent the Braze SDK from displaying the message natively.
return InAppMessageOperation.DISPLAY_NOW;
}
Überschreiben des Standard-UI-Delegaten
Standardmäßig wird BrazeInAppMessageUI erstellt und zugewiesen, wenn Sie die braze-Instanz initialisieren. BrazeInAppMessageUI ist eine Implementierung des BrazeInAppMessagePresenter-Protokolls und verfügt über eine delegate-Eigenschaft, die zur Anpassung der Verarbeitung empfangener In-App-Nachrichten verwendet werden kann.
-
Implementieren Sie den
BrazeInAppMessageUIDelegate-Delegaten wie in unserem iOS In-App-Nachrichten-UI-Tutorial beschrieben. -
In der Delegaten-Methode
inAppMessage(_:displayChoiceForMessage:)können Sie auf dieinAppMessage-Daten zugreifen, diese an den JavaScript-Layer senden und basierend auf dem Rückgabewert entscheiden, ob die native Nachricht angezeigt werden soll oder nicht.
Weitere Details zu diesen Werten finden Sie in unserer iOS-Dokumentation.
- (enum BRZInAppMessageUIDisplayChoice)inAppMessage:(BrazeInAppMessageUI *)ui
displayChoiceForMessage:(BRZInAppMessageRaw *)message {
// Convert the message to a JavaScript representation.
NSData *inAppMessageData = [message json];
NSString *inAppMessageString = [[NSString alloc] initWithData:inAppMessageData encoding:NSUTF8StringEncoding];
NSDictionary *arguments = @{
@"inAppMessage" : inAppMessageString
};
// Send to JavaScript.
[self sendEventWithName:@"inAppMessageReceived" body:arguments];
// Note: Return `BRZInAppMessageUIDisplayChoiceDiscard` if you would like
// to prevent the Braze SDK from displaying the message natively.
return BRZInAppMessageUIDisplayChoiceNow;
}
Um diesen Delegaten zu verwenden, weisen Sie ihn nach der Initialisierung der braze-Instanz brazeInAppMessagePresenter.delegate zu.

BrazeUI kann nur in Objective-C oder Swift importiert werden. Wenn Sie Objective-C++ verwenden, müssen Sie dies in einer separaten Datei behandeln.
@import BrazeUI;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:apiKey endpoint:endpoint];
Braze *braze = [BrazeReactBridge initBraze:configuration];
((BrazeInAppMessageUI *)braze.inAppMessagePresenter).delegate = [[CustomDelegate alloc] init];
AppDelegate.braze = braze;
}
Überschreiben der nativen Standard-UI
Wenn Sie die Darstellung Ihrer In-App-Nachrichten auf dem nativen iOS-Layer vollständig anpassen möchten, implementieren Sie das BrazeInAppMessagePresenter-Protokoll und weisen Sie Ihren angepassten Presenter wie in diesem Beispiel zu:
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:apiKey endpoint:endpoint];
Braze *braze = [BrazeReactBridge initBraze:configuration];
braze.inAppMessagePresenter = [[MyCustomPresenter alloc] init];
AppDelegate.braze = braze;
Anpassen des Anzeigeverhaltens
Sie können das Anzeigeverhalten von In-App-Nachrichten zur Laufzeit wie folgt ändern:
// Sets in-app messages to display immediately when triggered.
Appboy.AppboyBinding.SetInAppMessageDisplayAction(BrazeUnityInAppMessageDisplayActionType.IAM_DISPLAY_NOW);
// Sets in-app messages to display at a later time and be saved in a stack.
Appboy.AppboyBinding.SetInAppMessageDisplayAction(BrazeUnityInAppMessageDisplayActionType.IAM_DISPLAY_LATER);
// Sets in-app messages to be discarded after being triggered.
Appboy.AppboyBinding.SetInAppMessageDisplayAction(BrazeUnityInAppMessageDisplayActionType.IAM_DISCARD);
Einen angepassten Listener einrichten
Wenn Sie mehr Kontrolle darüber benötigen, wie Nutzer:innen mit In-App-Nachrichten interagieren, verwenden Sie einen BrazeInAppMessageListener und weisen Sie ihn Appboy.AppboyBinding.inAppMessageListener zu. Für Delegates, die Sie nicht verwenden möchten, können Sie diese einfach auf null setzen.
BrazeInAppMessageListener listener = new BrazeInAppMessageListener() {
BeforeInAppMessageDisplayed = BeforeInAppMessageDisplayed,
OnInAppMessageButtonClicked = OnInAppMessageButtonClicked,
OnInAppMessageClicked = OnInAppMessageClicked,
OnInAppMessageHTMLClicked = OnInAppMessageHTMLClicked,
OnInAppMessageDismissed = OnInAppMessageDismissed,
};
Appboy.AppboyBinding.inAppMessageListener = listener;
public void BeforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
// Executed before an in-app message is displayed.
}
public void OnInAppMessageButtonClicked(IInAppMessage inAppMessage, InAppMessageButton inAppMessageButton) {
// Executed whenever an in-app message button is clicked.
}
public void OnInAppMessageClicked(IInAppMessage inAppMessage) {
// Executed whenever an in-app message is clicked.
}
public void OnInAppMessageHTMLClicked(IInAppMessage inAppMessage, Uri uri) {
// Executed whenever an HTML in-app message is clicked.
}
public void OnInAppMessageDismissed(IInAppMessage inAppMessage) {
// Executed whenever an in-app message is dismissed without a click.
}