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 Internet Braze 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:in-Listener einstellen
Während der BrazeInAppMessageManager-Listener die Anzeige und den Lebenszyklus von In-App-Nachrichten automatisch verarbeiten kann, müssen Sie einen angepassten Manager:in-Listener implementieren, wenn Sie Ihre Nachrichten vollständig anpassen möchten.
Das Braze SDK verfügt über die Standardklasse DefaultHtmlInAppMessageActionListener. Sie wird verwendet, wenn kein angepasster Listener definiert ist, und führt automatisch die entsprechenden Aktionen durch. 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 Klasse des Typs IHtmlInAppMessageActionListener.
Dieser Listener gilt für beide Nachrichtentypen – sowohl für Nachrichten, die mit angepasstem HTML erstellt wurden, als auch für Nachrichten, die mit dem Drag-and-Drop-Editor (DnD) erstellt wurden. Er gilt nicht für traditionelle IAMs. Traditionelle IAMs sind die integrierten, vom SDK gerenderten Nachrichtentypen von Braze (z. B. Slideup, Modal und Full), die im ursprünglichen Nachrichten-Editor für In-App-Nachrichten mit vordefinierten Layouts erstellt werden. Im Gegensatz zu angepassten HTML- und DnD-IAMs durchlaufen sie nicht den HTML-Aktions-Listener-Flow.
Wenn Sie einen angepassten IHtmlInAppMessageActionListener festlegen, überschreibt dessen Logik das Standard-Klickverhalten für alle DnD-Nachrichten. Bitte stellen Sie sicher, dass Ihr Marketing-Team darüber informiert ist, da dies deren Campaigns auf unerwartete Weise beeinflussen kann.
1. Schritt: Implementieren Sie den angepassten Manager:in-Listener
Schritt 1.1: Implementieren Sie IInAppMessageManagerListener
Erstellen Sie eine Klasse, die IInAppMessageManagerListener implementiert.
Die Callbacks in Ihrem IInAppMessageManagerListener werden ebenfalls an verschiedenen Punkten im Lebenszyklus der In-App-Nachricht aufgerufen. Wenn Sie beispielsweise einen angepassten Manager:in-Listener festlegen und 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 die In-App-Nachricht auf angepasste Art und Weise angezeigt werden soll.
IInAppMessageManagerListener enthält auch Delegate-Methoden für Klicks auf Nachrichten und Buttons, die z. B. dazu verwendet werden können, eine Nachricht abzufangen, wenn ein Button oder eine Nachricht angeklickt wird, um sie weiter zu verarbeiten.
Schritt 1.2: Einbindung in IAM-View-Lebenszyklusmethoden (optional)
Die Schnittstelle IInAppMessageManagerListener verfügt über View-Methoden für In-App-Nachrichten, die an verschiedenen 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 für die Nutzer:innen noch nicht sichtbar.afterInAppMessageViewOpened: Wird aufgerufen, kurz nachdem die In-App-Nachricht zur View der Activity hinzugefügt wurde. Die In-App-Nachricht ist jetzt 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 für die Nutzer:innen noch 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 für die Nutzer:innen nicht mehr sichtbar.
Beachten Sie, dass die Zeit zwischen afterInAppMessageViewOpened und beforeInAppMessageViewClosed die Zeitspanne ist, in der die In-App-Nachrichten-View auf dem Bildschirm für die Nutzer:innen sichtbar ist.

Die Implementierung dieser Methoden ist nicht erforderlich. Sie werden nur zum Tracking und zur Information über den Lebenszyklus der In-App-Nachrichten-View bereitgestellt. Sie können diese Methodenimplementierungen leer lassen.
Erstellen Sie eine Klasse, die IHtmlInAppMessageActionListener implementiert.
Die Callbacks in Ihrem IHtmlInAppMessageActionListener werden immer dann aufgerufen, wenn Nutzer:innen eine der folgenden Aktionen innerhalb der HTML-In-App-Nachricht auslösen:
- Klick auf den Schließen-Button
- Auslösen eines angepassten Events
- Klick auf eine URL in einer HTML-In-App-Nachricht
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
}
}
2. Schritt: Weisen Sie Braze an, den angepassten Manager:in-Listener zu verwenden
Nachdem Sie 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 Ihrem Application.onCreate() vor allen anderen Aufrufen von Braze, damit der angepasste Listener gesetzt wird, bevor In-App-Nachrichten angezeigt werden.
Ändern von In-App-Nachrichten vor der Anzeige
Wenn eine neue In-App-Nachricht eingeht und bereits eine In-App-Nachricht angezeigt wird, wird die neue Nachricht oben auf dem Stack abgelegt 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
}
Mit dem Rückgabewert von InAppMessageOperation() kann gesteuert werden, wann die Nachricht angezeigt werden soll. Die empfohlene Verwendung dieser Methode ist, Nachrichten in bestimmten Teilen der App zu verzögern, indem DISPLAY_LATER zurückgegeben wird, wenn In-App-Nachrichten das App-Erlebnis der Nutzer:innen beeinträchtigen würden.
Rückgabewert InAppMessageOperation |
Verhalten |
|---|---|
DISPLAY_NOW |
Die Nachricht wird angezeigt |
DISPLAY_LATER |
Die Nachricht wird an den Stack zurückgegeben und bei der nächsten Gelegenheit angezeigt |
DISCARD |
Die Nachricht wird verworfen |
null |
Die Nachricht wird ignoriert. Diese Methode sollte NICHT null zurückgeben |
Weitere Informationen finden Sie unter InAppMessageOperation.

Wenn Sie sich für DISCARD entscheiden und die In-App-Nachricht durch Ihre eigene View ersetzen, müssen Sie die Klicks und Impressionen der In-App-Nachricht manuell protokollieren.
Unter Android wird dies durch den Aufruf von logClick und logImpression bei In-App-Nachrichten und logButtonClick bei immersiven In-App-Nachrichten erreicht.

Sobald eine In-App-Nachricht im Stack platziert wurde, können Sie jederzeit BrazeInAppMessageManager.getInstance().requestDisplayInAppMessage() aufrufen, damit sie abgerufen und angezeigt wird. Mit dieser Methode wird Braze aufgefordert, die nächste verfügbare In-App-Nachricht aus dem Stack anzuzeigen.
Nachdem Sie IHtmlInAppMessageActionListener erstellt haben, rufen Sie BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener() auf, um BrazeInAppMessageManager anzuweisen, Ihren angepassten IHtmlInAppMessageActionListener anstelle des Standard-Aktions-Listeners zu verwenden.
Wir empfehlen, Ihren IHtmlInAppMessageActionListener in Ihrem Application.onCreate() vor allen anderen Aufrufen von Braze zu setzen. Dadurch wird der angepasste Aktions-Listener festgelegt, bevor eine In-App-Nachricht angezeigt wird:
BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(new CustomHtmlInAppMessageActionListener(context));
BrazeInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(CustomHtmlInAppMessageActionListener(context))
Angepasste Factories einrichten
Sie können eine Reihe von Standardeinstellungen durch angepasste Factory-Objekte überschreiben. Diese können nach 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 den Standard 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.
Arten von In-App-Nachrichten
class BrazeDemoApplication : Application(){
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(BrazeActivityLifecycleCallbackListener(true, true))
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewWrapperFactory(CustomInAppMessageViewWrapperFactory())
BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewFactory(CustomInAppMessageViewFactory())
}
}
Arten von In-App-Nachrichten
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 in Braze verfügbaren Typen von In-App-Nachrichten 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 das Festlegen einer angepassten View-Factory.
BrazeInAppMessageManager platziert das In-App-Nachrichten-Modell mit DefaultInAppMessageViewWrapper standardmäßig automatisch in der bestehenden View-Hierarchie der Activity. Wenn Sie die Platzierung der In-App-Nachrichten in der View-Hierarchie anpassen müssen, sollten Sie eine angepasste IInAppMessageViewWrapperFactory verwenden.
In-App-Nachrichten haben ein voreingestelltes Animationsverhalten. Slideup-Nachrichten gleiten in den Bildschirm hinein; full- und modal-Nachrichten werden ein- und ausgeblendet. Wenn Sie angepasste Animationsverhalten für Ihre In-App-Nachrichten definieren möchten, ermöglicht Braze dies durch die Einrichtung einer angepassten Animations-Factory.
1. Schritt: Implementieren Sie die Factory
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 einen IInAppMessageViewWrapper zurückgibt.
Diese Factory wird unmittelbar nach der Erstellung der In-App-Nachrichten-View aufgerufen. Der einfachste Weg, einen angepassten IInAppMessageViewWrapper zu implementieren, besteht darin, den standardmäßigen 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
}
}
2. Schritt: Weisen Sie Braze an, die Factory zu verwenden
Nachdem Ihre IInAppMessageViewFactory erstellt wurde, rufen Sie BrazeInAppMessageManager.getInstance().setCustomInAppMessageViewFactory() auf, um BrazeInAppMessageManager anzuweisen, Ihre angepasste IInAppMessageViewFactory anstelle der standardmäßigen View-Factory zu verwenden.

Wir empfehlen, Ihre IInAppMessageViewFactory in Ihrem Application.onCreate() vor allen anderen Aufrufen von Braze zu setzen. 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. Wenn Sie eine dieser Klassen implementieren, kann Braze Ihrer angepassten View bei Bedarf Klick-Listener hinzufügen. Alle Braze-View-Klassen erweitern die Android-Klasse View.
Durch die Implementierung von IInAppMessageView können Sie einen bestimmten Teil Ihrer angepassten View als anklickbar definieren. Durch die Implementierung von IInAppMessageImmersiveView können Sie Views für Nachrichten-Buttons sowie eine View für einen Schließen-Button definieren.
Nachdem Ihr IInAppMessageViewWrapper erstellt ist, 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 Ihrem Application.onCreate() vor allen anderen Aufrufen von Braze zu setzen. 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 standardmäßigen Animations-Factory zu verwenden.
Wir empfehlen, Ihre IInAppMessageAnimationFactory in Ihrem Application.onCreate() vor allen anderen Aufrufen von Braze zu setzen. Dadurch wird die angepasste Animations-Factory festgelegt, bevor eine In-App-Nachricht angezeigt wird.
Angepasste Stile
Die UI-Elemente von Braze sind standardmäßig so gestaltet, dass sie den Standard-UI-Richtlinien von Android entsprechen und ein nahtloses Erlebnis bieten. Dieser Referenzartikel behandelt angepasste Stile für In-App-Nachrichten in Ihrer Android- oder FireOS-Anwendung.
Einstellen eines Standard-Stils
Sie können die Standardstile 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 möchten, können Sie diese Stile überschreiben, um ein Erscheinungsbild zu schaffen, das besser zu Ihrer App passt.
Um einen Stil zu überschreiben, kopieren Sie ihn vollständig in die Datei styles.xml Ihres Projekts und nehmen Sie die gewünschten Ä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 umfassende Änderungen an Layouts. Änderungen auf Layout-Ebene müssen mit angepassten Views gehandhabt werden.

Sie können einige Farben direkt in Ihrer Braze-Campaign anpassen, ohne die XML-Datei zu ändern. Beachten Sie, dass die im Braze-Dashboard eingestellten Farben die an anderer Stelle festgelegten Farben überschreiben.
Anpassen der Schriftart
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.
Wenn Sie beispielsweise die Schriftart für den Button-Text Ihrer In-App-Nachricht aktualisieren möchten, überschreiben Sie den Stil Braze.InAppMessage.Button und referenzieren Sie Ihre angepasste Schriftfamilie. Der Attributwert sollte auf eine Schriftfamilie in Ihrem Verzeichnis res/font verweisen.
Hier ist ein verkürztes Beispiel mit einer angepassten Schriftfamilie my_custom_font_family, auf die in der letzten Zeile verwiesen 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 den Button-Text ist der Stil für den Nachrichtentext Braze.InAppMessage.Message und der Stil für die Nachrichtenüberschriften Braze.InAppMessage.Header. Wenn Sie Ihre angepasste Schriftfamilie für alle In-App-Nachrichtentexte verwenden möchten, können Sie Ihre Schriftfamilie auf den Stil Braze.InAppMessage setzen, 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
Durch Wischen Slideup-Nachrichten schließen
Standardmäßig können Slideup-In-App-Nachrichten durch eine Wischgeste geschlossen werden. Die Richtung des Wischens hängt von der Position des Slideups ab:
- Nach links oder rechts wischen: Schließt das Slideup unabhängig von seiner Position.
- Slideup von unten: Durch Wischen von oben nach unten wird die Nachricht geschlossen. Durch Wischen von unten nach oben wird sie nicht geschlossen.
- Slideup von oben: Durch Wischen von unten nach oben wird die Nachricht geschlossen. Durch Wischen von oben nach unten wird sie nicht geschlossen.
Dieses Wischverhalten ist standardmäßig in DefaultInAppMessageViewWrapper integriert und gilt ausschließlich für Slideup-In-App-Nachrichten. Modale und vollständige In-App-Nachrichten unterstützen das Wegwischen nicht. Um dieses Verhalten anzupassen, können Sie eine angepasste View-Wrapper-Factory implementieren.

Durch Antippen außerhalb einer Slideup-Nachricht wird diese standardmäßig nicht geschlossen. Dieses Verhalten unterscheidet sich von modalen Nachrichten, die für das Schließen durch Tippen außerhalb konfiguriert werden können. Bei Slideups können Sie die Nachricht durch Wischen oder über den Schließen-Button ausblenden.
Deaktivieren des Schließens über die Zurück-Taste
Standardmäßig werden In-App-Nachrichten von Braze mit der Hardware-Zurück-Taste geschlossen. Dieses Verhalten kann für jede einzelne 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 ist und angibt, ob die Nachricht über die Zurück-Taste geschlossen werden kann:
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)
}
})

Wenn diese Funktion deaktiviert ist, wird stattdessen das Standardverhalten der Zurück-Taste der Host-Activity verwendet. Dies kann dazu führen, dass die Zurück-Taste die Anwendung statt der angezeigten In-App-Nachricht schließt.
Aktivieren des Schließens durch Tippen außerhalb
Standardmäßig ist das Schließen des Modals durch Antippen außerhalb auf false eingestellt. Wenn Sie diesen Wert auf true setzen, wird die modale In-App-Nachricht geschlossen, wenn Nutzer:innen auf eine Stelle außerhalb der In-App-Nachricht tippen. Dieses Verhalten kann durch folgenden Aufruf aktiviert werden:
BrazeInAppMessageManager.getInstance().setClickOutsideModalViewDismissInAppMessageView(true)
Anpassen der Ausrichtung
Um eine feste Ausrichtung für eine In-App-Nachricht festzulegen, richten Sie zunächst einen angepassten In-App-Nachrichten-Manager:in-Listener ein. Aktualisieren Sie anschließend die Ausrichtung des IInAppMessage-Objekts 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
}
Bei Tablet-Geräten werden In-App-Nachrichten in der von den Nutzer:innen bevorzugten Ausrichtung angezeigt, unabhängig von der tatsächlichen Bildschirmausrichtung.
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 Beschränkungen und Einschränkungen werden angepasste Google Play-Bewertungsaufforderungen derzeit nicht von Braze unterstützt. Während einige Nutzer:innen diese Aufforderungen erfolgreich integrieren konnten, waren die Erfolgsquoten bei anderen aufgrund der Google Play-Quoten gering. Die Integration erfolgt auf Ihr eigenes Risiko. Weitere Informationen finden Sie in der Dokumentation zu den In-App-Bewertungsaufforderungen von Google Play.
Voraussetzungen
Bevor Sie dieses Feature nutzen können, müssen Sie das Swift Braze SDK integrieren.
Einrichten des UI-Delegates (erforderlich)
Um die Darstellung von In-App-Nachrichten anzupassen und auf verschiedene Lifecycle-Ereignisse zu reagieren, müssen Sie BrazeInAppMessageUIDelegate einrichten. Dies ist ein Delegate-Protokoll, das zum Empfangen und Verarbeiten von getriggerten In-App-Nachrichten-Payloads, zum Empfangen von Anzeige-Lifecycle-Ereignissen und zur 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: Implementieren Sie das BrazeInAppMessageUIDelegate-Protokoll
Implementieren Sie zunächst das BrazeInAppMessageUIDelegate-Protokoll und alle entsprechenden Methoden, die Sie verwenden möchten. 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: Weisen Sie das delegate-Objekt zu
Weisen Sie das delegate-Objekt 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 mit der Sprach-Laufzeitumgebung nicht kompatibel sind.

Eine schrittweise Implementierung des In-App-Nachrichten-UI-Delegates finden Sie in diesem Tutorial.
Verhalten bei Klick
Jedes Braze.InAppMessage-Objekt enthält eine entsprechende ClickAction, die das Verhalten beim Klick definiert.
Klick-Aktionstypen
Die Eigenschaft clickAction Ihrer Braze.InAppMessage ist standardmäßig auf .none gesetzt, kann aber auf einen der folgenden Werte eingestellt werden:
ClickAction |
Verhalten bei Klick |
|---|---|
.url(URL, useWebView: Bool) |
Öffnet die angegebene URL in einem externen Browser. Wenn useWebView auf true gesetzt ist, wird sie in einer Web-View geöffnet. |
.none |
Die Nachricht wird beim Klick 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.
Verhalten bei Klick anpassen
Um dieses Verhalten anzupassen, können Sie die Eigenschaft clickAction ändern, indem Sie das folgende Beispiel verwenden:
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.
Behandlung des angepassten Verhaltens
Die folgende Delegate-Methode von BrazeInAppMessageUIDelegate wird aufgerufen, wenn Nutzer:innen auf eine In-App-Nachricht klicken. Dieser Callback wird bei nutzer:innen-initiierten Klicks auf Buttons von In-App-Nachrichten 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 die Klick-Aktion weiterhin ausführen 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;
}
Slideup-Nachrichten durch Wischen schließen
Standardmäßig können Slideup-In-App-Nachrichten durch eine Wischgeste geschlossen werden. Die Wischrichtung 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 in die Standard-BrazeInAppMessageUI SlideupView 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 die Slideup-Ansicht weiter anzupassen, einschließlich des Wischverhaltens, können Sie die SlideupView.Attributes ändern oder eine angepasste Ansicht durch Subklassen 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 außerhalb der Nachricht mithilfe des Attributs dismissOnBackgroundTap aktivieren, das im folgenden Abschnitt beschrieben wird.
Modale Schließvorgänge anpassen
Um das Schließen durch Tippen außerhalb der Nachricht zu aktivieren, können Sie die Eigenschaft dismissOnBackgroundTap in der Attributes-Struktur des 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.
Nachrichtenausrichtung anpassen
Sie können die Ausrichtung Ihrer In-App-Nachrichten anpassen. Sie können eine neue Standardausrichtung für alle Nachrichten festlegen oder eine benutzerdefinierte Ausrichtung für eine einzelne Nachricht konfigurieren.
Um eine Standardausrichtung für alle In-App-Nachrichten festzulegen, verwenden Sie die Methode inAppMessage(_:prepareWith:), um die Eigenschaft preferredOrientation im PresentationContext zu setzen.
Um beispielsweise „Hochformat“ als Standardausrichtung festzulegen:
func inAppMessage(
_ ui: BrazeInAppMessageUI,
prepareWith context: inout BrazeInAppMessageUI.PresentationContext
) {
context.preferredOrientation = .portrait
}
- (void)inAppMessage:(BrazeInAppMessageUI *)ui
prepareWith:(BrazeInAppMessageUIPresentationContextRaw *)context {
context.preferredOrientation = BRZInAppMessageRawOrientationPortrait;
}
Um die Ausrichtung für eine einzelne Nachricht festzulegen, ändern Sie die Eigenschaft orientation von Braze.InAppMessage:
// Set inAppMessage orientation to support any configuration
inAppMessage.orientation = .any
// Set inAppMessage orientation to only display in portrait
inAppMessage.orientation = .portrait
// Set inAppMessage orientation to only display in landscape
inAppMessage.orientation = .landscape
// Set inAppMessage orientation to support any configuration
inAppMessage.orientation = BRZInAppMessageRawOrientationAny;
// Set inAppMessage orientation to only display in portrait
inAppMessage.orientation = BRZInAppMessageRawOrientationPortrait;
// Set inAppMessage orientation to only display in landscape
inAppMessage.orientation = BRZInAppMessageRawOrientationLandscape;
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 außerdem 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 der Zieleinstellungen in Xcode enthalten ist.


Die Ausrichtung wird nur für die Darstellung der Nachricht angewendet. Nachdem das Gerät die Ausrichtung geändert hat, übernimmt die Nachrichtenansicht eine der von ihr unterstützten Ausrichtungen. Auf kleineren Geräten (iPhones, iPod Touch) kann das Festlegen einer Querformat-Ausrichtung für eine modale oder bildschirmfüllende In-App-Nachricht zu abgeschnittenen Inhalten führen.
Anzeigezeitpunkt anpassen
Sie können steuern, ob eine verfügbare In-App-Nachricht an bestimmten Stellen der Nutzererfahrung angezeigt wird. Wenn es Situationen gibt, in denen die In-App-Nachricht nicht erscheinen soll – beispielsweise während eines Vollbildspiels oder auf einem Ladebildschirm –, können Sie ausstehende In-App-Nachrichten verzögern oder verwerfen. Um den Zeitpunkt von In-App-Nachrichten 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 verwenden Sie .reenqueue) |
.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
Für 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 |
Die Statusleiste wird immer ausgeblendet. |
.visible |
Die Statusleiste wird immer angezeigt. |
Dark Mode deaktivieren
Um zu verhindern, dass In-App-Nachrichten das Dark-Mode-Styling ü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 InAppMessage-Objekt, das angezeigt werden soll. Jede InAppMessage hat 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 Light-Theme an.
In-App-Nachrichtentypen mit Buttons haben ein zusätzliches themes-Objekt in ihrer buttons-Eigenschaft. Um zu verhindern, dass Buttons das Dark-Mode-Styling ü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;
}
}
App Store-Bewertungsaufforderung anpassen
Sie können In-App-Nachrichten in einer Campaign verwenden, um Nutzer:innen um eine App Store-Bewertung zu bitten.

Da diese Beispiel-Aufforderung das Standardverhalten von Braze überschreibt, können Impressionen nicht automatisch erfasst werden, wenn sie implementiert wird. Sie müssen Ihre eigenen Analytics protokollieren.
Schritt 1: In-App-Nachrichten-Delegate einrichten
Richten Sie zunächst das BrazeInAppMessageUIDelegate in Ihrer App ein.
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: Deeplink erstellen
Fügen Sie in Ihrem scene:openURLContexts:-Handler den folgenden Code hinzu, um den {YOUR-APP-SCHEME}:app-store-review-Deeplink 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 folgenden Einstellungen:
- Das Schlüssel-Wert-Paar
"AppStore Review" : "true" - Das Klickverhalten auf „Deeplink in 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 frequenzlimitiert werden.
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 nutzen, indem Sie Ihre BrazeInAppMessage-Instanz zur Protokollierung von Analytics und zur Durchführung von Aktionen übergeben:
| Methode | Beschreibung |
|---|---|
logInAppMessageClicked(inAppMessage) |
Protokolliert einen Klick für die bereitgestellten Daten der In-App-Nachricht. |
logInAppMessageImpression(inAppMessage) |
Protokolliert eine Impression für die bereitgestellten In-App-Nachricht-Daten. |
logInAppMessageButtonClicked(inAppMessage, buttonId) |
Protokolliert einen Button-Klick für die angegebenen In-App-Nachricht-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 Button einer In-App-Nachricht aus. |
Umgang mit 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.
Außerdem können Sie auf die Daten der In-App-Nachricht im JavaScript-Layer zugreifen, indem Sie die Methode Braze.subscribeToInAppMessage aufrufen, damit die SDKs ein inAppMessageReceived-Event veröffentlichen, wenn eine In-App-Nachricht getriggert wird. Übergeben Sie einen Callback an diese Methode, um Ihren eigenen Code auszuführen, wenn die In-App-Nachricht getriggert und vom Listener empfangen wird.
Um die Behandlung von Nachrichten-Daten anzupassen, sehen Sie sich die folgenden Implementierungsbeispiele an:
Um das Standardverhalten zu verbessern oder wenn Sie keinen Zugang zur Anpassung des nativen iOS- oder Android-Codes haben, empfehlen wir Ihnen, die Standard-UI zu deaktivieren, während Sie weiterhin In-App-Nachrichten-Events von Braze erhalten. Um die Standard-UI zu deaktivieren, übergeben Sie false an die Methode Braze.subscribeToInAppMessage und verwenden Sie die Daten der In-App-Nachricht, 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 möchten.
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 eine fortgeschrittenere Logik einzubauen, die bestimmt, ob eine In-App-Nachricht über die integrierte UI angezeigt wird oder nicht, implementieren Sie In-App-Nachrichten über den nativen Layer.

Da es sich hierbei um eine fortgeschrittene Anpassungsoption handelt, beachten Sie bitte, dass durch das Überschreiben der Standard-Implementierung von Braze auch die Logik zum Senden von In-App-Nachrichten-Events an Ihre JavaScript-Listener aufgehoben wird. 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 IInAppMessageManagerListener wie in unserem Android-Artikel über angepasste Manager:in-Listener beschrieben. In Ihrer beforeInAppMessageDisplayed-Implementierung können Sie auf die Daten von inAppMessage zugreifen, sie an den JavaScript-Layer senden und anhand des Rückgabewerts entscheiden, ob Sie die native Nachricht anzeigen oder nicht.
Mehr über diese Werte erfahren 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 Instanz braze initialisieren. BrazeInAppMessageUI ist eine Implementierung des BrazeInAppMessagePresenter-Protokolls und verfügt über die Eigenschaft delegate, mit der Sie die Behandlung von empfangenen In-App-Nachrichten anpassen können.
-
Implementieren Sie den Delegaten
BrazeInAppMessageUIDelegatewie in diesem iOS-Tutorial zur In-App-Nachrichten-UI beschrieben. -
In der Delegate-Methode
inAppMessage(_:displayChoiceForMessage:)können Sie auf die Daten voninAppMessagezugreifen, sie an den JavaScript-Layer senden und anhand des Rückgabewerts entscheiden, ob die native Nachricht angezeigt werden soll oder nicht.
Weitere Einzelheiten 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 brazeInAppMessagePresenter.delegate zu, nachdem Sie die Instanz braze initialisiert haben.

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;
}
Native Standard-UI überschreiben
Wenn Sie die Darstellung Ihrer In-App-Nachrichten auf der nativen iOS-Ebene vollständig anpassen möchten, halten Sie sich an das BrazeInAppMessagePresenter-Protokoll und weisen Sie Ihren angepassten Presenter nach dem folgenden 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.
}