Bannerplatzierungen verwalten
Erfahren Sie, wie Sie Bannerplatzierungen im Braze SDK erstellen und verwalten, einschließlich des Zugriffs auf deren eindeutige Eigenschaften und der Protokollierung von Impressionen. Weitere allgemeine Informationen finden Sie unter Über Banner.
Über Platzierungsanfragen
Wenn Sie Platzierungen in Ihrer App oder Website erstellen, sendet Ihre App eine Anfrage an Braze, um Banner-Nachrichten für jede Platzierung abzurufen.
- Sie können bis zu 10 Platzierungen pro Aktualisierungsanfrage anfordern.
- Für jede Platzierung gibt Braze das Banner mit der höchsten Priorität zurück, für das die Nutzer:in berechtigt ist.
- Wenn bei einer Aktualisierung mehr als 10 Platzierungen angefragt werden, werden nur die ersten 10 zurückgegeben; die übrigen werden verworfen.
Beispielsweise könnte eine App in einer Aktualisierungsanfrage drei Platzierungen anfordern: homepage_promo, cart_abandonment und seasonal_offer. Jede Anfrage gibt das für diese Platzierung relevanteste Banner zurück.
Rate-Limiting für Aktualisierungsanfragen
Wenn Sie ältere SDK-Versionen verwenden (vor Swift 13.1.0, Android 38.0.0, Web 6.1.0, React Native 17.0.0 und Flutter 15.0.0), ist nur eine Aktualisierungsanfrage pro Nutzersitzung zulässig.
Wenn Sie neuere Mindest-SDK-Versionen verwenden (Swift 13.1.0+, Android 38.0.0+, Web 6.1.0+, React Native 17.0.0+ und Flutter 15.0.0+), werden Aktualisierungsanfragen durch einen Token-Bucket-Algorithmus gesteuert, um übermäßiges Polling zu verhindern:
- Jede Nutzersitzung beginnt mit fünf Aktualisierungs-Token.
- Die Token werden mit einer Rate von einem Token alle 180 Sekunden (3 Minuten) aufgefüllt.
Jeder explizite Aufruf von requestBannersRefresh verbraucht ein Token. Die automatische Aktualisierung, die zu Beginn einer neuen Sitzung oder beim Aufruf von changeUser erfolgt, verbraucht kein Token, da bei dieser Aktualisierung das zuletzt zwischengespeicherte Banner für die jeweilige Nutzer:in veröffentlicht wird. Wenn Sie versuchen, eine Aktualisierung durchzuführen, obwohl keine Token verfügbar sind, sendet das SDK die Anfrage nicht und protokolliert einen Fehler, bis ein Token wieder aufgefüllt ist. Dies ist für Updates während der Sitzung und Event-getriggerte Updates von Bedeutung. Um dynamische Updates durchzuführen (beispielsweise nachdem eine Nutzer:in eine Aktion auf derselben Seite abgeschlossen hat), rufen Sie die Aktualisierungsmethode auf, nachdem das angepasste Event protokolliert wurde. Beachten Sie jedoch die erforderliche Verzögerung, die Braze benötigt, um das Event zu erfassen und zu verarbeiten, bevor die Nutzer:in für eine andere Banner-Campaign qualifiziert ist.
Platzierung erstellen
Voraussetzungen
Dies sind die mindestens erforderlichen SDK-Versionen, um Banner-Platzierungen zu erstellen:
Schritt 1: Platzierungen in Braze erstellen
Falls Sie dies noch nicht getan haben, müssen Sie in Braze Banner-Platzierungen erstellen, mit denen Sie die Standorte in Ihrer App oder Website definieren, an denen Banner angezeigt werden können. Um eine Platzierung zu erstellen, gehen Sie zu Einstellungen > Banner-Platzierungen und wählen Sie dann Platzierung erstellen.

Geben Sie Ihrer Platzierung einen Namen und weisen Sie eine Platzierungs-ID zu. Stimmen Sie sich unbedingt mit anderen Teams ab, bevor Sie eine ID zuweisen, da diese während des gesamten Lebenszyklus der Karte verwendet wird und später nicht mehr geändert werden sollte. Weitere Informationen finden Sie unter Platzierungs-IDs.

Schritt 2: Platzierungen in Ihrer App aktualisieren
Um Platzierungen zu aktualisieren, rufen Sie requestBannersRefresh() für Ihr SDK auf.
requestBannersRefresh() wird mit dem bestehenden Banner-Cache zusammengeführt. Nur die von Ihnen übergebenen Platzierungs-IDs werden hinzugefügt, aktualisiert oder entfernt:
- Wenn der Server ein Banner für eine angeforderte Platzierung zurückgibt, wird das im Cache gespeicherte Banner für diese Platzierung ersetzt.
- Wenn der Server kein Banner für eine angeforderte Platzierung zurückgibt, wird diese Platzierung aus dem Cache entfernt.
- Im Cache gespeicherte Banner für Platzierungen, die Sie nicht angefordert haben, bleiben bis zum Ablauf im Cache.
Informationen darüber, wie viele Platzierungen Sie pro Aktualisierung anfordern können, finden Sie unter Über Platzierungsanfragen. Sie können im Laufe der Zeit verschiedene Gruppen von Platzierungen aktualisieren (z. B. Platzierungen auf dem aktuellen Bildschirm) und Banner für andere Platzierungen im Cache behalten.
Das Aktualisierungsverhalten von Bannern hat zwei Pfade:
- Explizite Aktualisierung: Sie können die Aktualisierungsmethode jederzeit während einer aktiven Sitzung aufrufen.
- Automatische Aktualisierung bei einer neuen Sitzung: Nachdem Sie mindestens eine explizite Aktualisierungsanfrage gestellt haben, kann das SDK die zuletzt angeforderten Platzierungs-IDs erneut anfordern, wenn eine neue Braze-Sitzung beginnt (z. B. nach
changeUser()oder nach einem Sitzungs-Timeout).
Die Rolle des Abonnierens von Banner-Ereignissen unterscheidet sich je nach Plattform:
- iOS und Android:
subscribeToBannersEvents()unter Android (odersubscribeToEvents()unter Swift) registriert einen Event-Handler. Die automatische Aktualisierung beim Sitzungsstart ist nicht davon abhängig, ob das Abonnement aktiv ist. - Web: Die automatische Aktualisierung beim Sitzungsstart ist an die Registrierung von
subscribeToBannersEvents()(oder das veraltetesubscribeToBannersUpdates()) gebunden. Ohne ein aktives Abonnement wiederholt das SDK die Aktualisierung bei einer neuen Sitzung nicht automatisch.
In allen Fällen müssen Sie mindestens eine explizite Aktualisierungsanfrage pro App-Lebenszyklus stellen, damit das SDK weiß, welche Platzierungs-IDs aktuell gehalten werden sollen. Banner werden beim ersten Start ohne diesen initialen Aufruf nicht automatisch abgerufen, und die gespeicherten Platzierungs-IDs werden nach einem App-Neustart zurückgesetzt.
Automatische Aktualisierungen beim Sitzungsstart verbrauchen kein Rate-Limiting-Token.

Aktualisieren Sie Platzierungen so früh wie möglich, um Verzögerungen beim Herunterladen oder Anzeigen von Bannern zu vermeiden.
import * as braze from "@braze/web-sdk";
braze.requestBannersRefresh(["global_banner", "navigation_square_banner"]);
AppDelegate.braze?.banners.requestBannersRefresh(placementIds: ["global_banner", "navigation_square_banner"])
ArrayList<String> placementIds = new ArrayList<>();
placementIds.add("global_banner");
placementIds.add("navigation_square_banner");
Braze.getInstance(context).requestBannersRefresh(placementIds);
Braze.getInstance(context).requestBannersRefresh(listOf("global_banner", "navigation_square_banner"))
Braze.requestBannersRefresh(["global_banner", "navigation_square_banner"]);
This feature is not currently supported on Unity.
This feature is not currently supported on Cordova.
braze.requestBannersRefresh(["global_banner", "navigation_square_banner"]);
This feature is not currently supported on Roku.
Schritt 3: Auf Updates warten

Wenn Sie Banner mithilfe der SDK-Methoden in diesem Leitfaden einfügen, werden alle Analytics-Ereignisse (wie Impressionen und Klicks) automatisch verarbeitet, und Impressionen werden nur protokolliert, wenn das Banner sichtbar ist.
Verwenden Sie subscribeToBannersEvents, um auf Banner-Ereignisse zu warten, und rufen Sie dann requestBannersRefresh auf, um Platzierungen abzurufen. Das SDK ruft Ihren Handler mit einem Ereignisobjekt auf. Verwenden Sie event.type als Switch, um jede Art von Ereignis zu verarbeiten. Weitere Informationen zu den Ereigniswerten finden Sie unter Ereignisabonnements.
Wenn Sie Vanilla JavaScript mit dem Web Braze SDK verwenden, registrieren Sie Ihren Handler, bevor Sie requestBannersRefresh aufrufen.
import * as braze from "@braze/web-sdk";
const placementIds = ["global_banner", "navigation_square_banner"];
// - Available in version 7.0.0+
const subscriptionId = braze.subscribeToBannersEvents((event) => {
switch (event.type) {
case braze.ChannelEventType.CACHE_REPLAY:
// Sent once, right away, with the Banners that are already cached.
// Render them now instead of waiting for the network.
console.log("Cached Banners:", Object.keys(event.cacheSnapshot.banners));
break;
case braze.ChannelEventType.CACHE_LOAD:
// The cache changed without a refresh, such as after changeUser().
// The snapshot can be empty, so clear Banners from the previous user.
console.log("Cache reloaded:", Object.keys(event.cacheSnapshot.banners));
break;
case braze.ChannelEventType.DATA_UPDATED:
// A refresh finished, even if nothing changed, or a Banner was dismissed.
console.log("Banners were updated:", event.reason);
break;
case braze.ChannelEventType.ERROR:
switch (event.retryState) {
case braze.RetryState.SDK_WILL_RETRY:
// The SDK is retrying. Keep the current Banners and wait.
break;
case braze.RetryState.INTEGRATOR_MAY_RETRY: {
// The SDK stopped retrying. Try again later, and limit how often you retry.
const delayMs = event.rateLimitedUntil
? Math.max(event.rateLimitedUntil.getTime() - Date.now(), 0)
: 30000;
setTimeout(() => braze.requestBannersRefresh(placementIds), delayMs);
break;
}
case braze.RetryState.DO_NOT_RETRY:
// The failure is final. For example, Banners are disabled for this workspace.
if (event.reason === braze.ChannelErrorReason.FEATURE_DISABLED) {
// Hide the Banner containers.
}
break;
}
break;
}
});
const deprecatedSubscriptionId = braze.subscribeToBannersUpdates((banners) => {
console.log("Banners were updated");
});
// Always refresh after your subscriber function has been registered
braze.requestBannersRefresh(placementIds);
// Remove the subscription when you no longer need it
// braze.removeSubscription(subscriptionId);
Wenn Sie React mit dem Web Braze SDK verwenden, richten Sie subscribeToBannersEvents innerhalb eines useEffect-Hooks ein und rufen Sie requestBannersRefresh nach der Registrierung Ihres Listeners auf.
import * as braze from "@braze/web-sdk";
useEffect(() => {
const placementIds = ["global_banner", "navigation_square_banner"];
// - Available in version 7.0.0+
const subscriptionId = braze.subscribeToBannersEvents((event) => {
switch (event.type) {
case braze.ChannelEventType.CACHE_REPLAY:
case braze.ChannelEventType.CACHE_LOAD:
// Cached Banners, sent right away on subscribe or after the cache reloads
console.log("Cached Banners:", Object.keys(event.cacheSnapshot.banners));
break;
case braze.ChannelEventType.DATA_UPDATED:
// A refresh finished, even if nothing changed, or a Banner was dismissed
console.log("Banners were updated:", event.reason);
break;
case braze.ChannelEventType.ERROR:
if (event.retryState === braze.RetryState.INTEGRATOR_MAY_RETRY) {
// The SDK stopped retrying. Try again later, and limit how often you retry.
const delayMs = event.rateLimitedUntil
? Math.max(event.rateLimitedUntil.getTime() - Date.now(), 0)
: 30000;
setTimeout(() => braze.requestBannersRefresh(placementIds), delayMs);
}
break;
}
});
const deprecatedSubscriptionId = braze.subscribeToBannersUpdates((banners) => {
console.log("Banners were updated");
});
// Always refresh after your subscriber function has been registered
braze.requestBannersRefresh(placementIds);
// Cleanup listeners
return () => {
braze.removeSubscription(subscriptionId);
braze.removeSubscription(deprecatedSubscriptionId);
};
}, []);
Informationen darüber, wann jedes Ereignis ausgelöst wird und was die einzelnen Update-Gründe, Wiederholungsstatus, Analytics-Aktionen und Fehlergründe bedeuten, finden Sie unter Ereignisabonnements.
event.cacheSnapshot.banners ist ein Objekt, das jede Platzierungs-ID ihrem Banner zuordnet. Es kann Platzierungen aus früheren Aktualisierungen enthalten, nicht nur die Platzierungs-IDs aus Ihrem letzten requestBannersRefresh-Aufruf. Wenn Sie nur an bestimmten Platzierungen interessiert sind, lesen Sie diese Platzierungs-IDs aus dem Snapshot und überspringen Sie den Rest.
Verwenden Sie subscribeToBannersEvents ab Web SDK 7.0.0 und höher. subscribeToBannersUpdates ist das ältere Muster, das ab Version 7.0.0 als veraltet gilt. Das ältere Muster liefert nur die aktuellen Banner, sodass es Ihnen nicht mitteilen kann, warum sich die Banner geändert haben oder wann eine Aktualisierung fehlgeschlagen ist.

Ihr Banner-Update-Listener spiegelt den Zustand der Banner im SDK-Speicher wider. Ein einzelnes Update kann Platzierungen enthalten, die bereits im Cache waren (z. B. aus einer früheren Aktualisierung, einem anderen Bildschirm oder automatischer SDK-Arbeit), nicht nur die Platzierungs-IDs aus Ihrem letzten requestBannersRefresh-Aufruf. Wenn Sie nur an bestimmten Platzierungen interessiert sind, überprüfen Sie die Platzierungs-ID jedes Banners in Ihrem Listener und überspringen Sie den Rest. Nachdem Sie Ihren Listener registriert haben, rufen Sie requestBannersRefresh für die Platzierungen auf, die Sie mit Braze synchronisieren möchten.
// - Available in version 19.0.0+
let placementIds = ["global_banner", "navigation_square_banner"]
let cancellable = brazeClient.braze()?.banners.subscribeToEvents { event in
switch event {
case .cacheReplay(let cacheSnapshot), .cacheLoad(let cacheSnapshot):
cacheSnapshot.banners.forEach { placementId, banner in
print("Received banner: \(banner) with placement ID: \(placementId)")
}
case .dataUpdated(let cacheSnapshot, let reason):
cacheSnapshot.banners.forEach { placementId, banner in
print("Received banner: \(banner) with placement ID: \(placementId)")
}
default:
break
}
}
// Always refresh after your subscriber is registered
brazeClient.braze()?.banners.requestBannersRefresh(placementIds: placementIds)
let placementIds = ["global_banner", "navigation_square_banner"]
let cancellable = brazeClient.braze()?.banners.subscribeToUpdates { banners in
banners.forEach { placementId, banner in
print("Received banner: \(banner) with placement ID: \(placementId)")
}
}
// Always refresh after your subscriber is registered
brazeClient.braze()?.banners.requestBannersRefresh(placementIds: placementIds)
Verwenden Sie subscribeToEvents(_:) ab Swift SDK 19.0.0 und höher. subscribeToUpdates(_:) ist das ältere Muster, das ab Version 19.0.0 als veraltet gilt.
Informationen darüber, wann jedes Ereignis ausgelöst wird und was die einzelnen Update-Gründe, Wiederholungsstatus, Analytics-Aktionen und Fehlergründe bedeuten, finden Sie unter Ereignisabonnements.

Ihr Banner-Event-Handler spiegelt den Zustand der Banner im SDK-Speicher wider. Ein einzelnes Ereignis kann Platzierungen enthalten, die bereits im Cache waren (z. B. aus einer früheren Aktualisierung, einem anderen Bildschirm oder automatischer SDK-Arbeit), nicht nur die Platzierungs-IDs aus Ihrem letzten requestBannersRefresh-Aufruf. Wenn Sie nur an bestimmten Platzierungen interessiert sind, überprüfen Sie die Platzierungs-ID jedes Banners in Ihrem Handler und überspringen Sie den Rest. Nachdem Sie Ihren Subscriber registriert haben, rufen Sie requestBannersRefresh für die Platzierungen auf, die Sie mit Braze synchronisieren möchten.
ArrayList<String> placementIds = new ArrayList<>();
placementIds.add("global_banner");
placementIds.add("navigation_square_banner");
// - Available in version 44.0.0+
Braze.getInstance(context).subscribeToBannersEvents(event -> {
if (event instanceof BannersEvent.CacheReplay) {
logBanners(((BannersEvent.CacheReplay) event).getCacheSnapshot());
} else if (event instanceof BannersEvent.CacheLoad) {
logBanners(((BannersEvent.CacheLoad) event).getCacheSnapshot());
} else if (event instanceof BannersEvent.DataUpdated) {
logBanners(((BannersEvent.DataUpdated) event).getCacheSnapshot());
}
});
// Always refresh after your subscriber is registered
Braze.getInstance(context).requestBannersRefresh(placementIds);
Braze.getInstance(context).subscribeToBannersUpdates(event -> {
for (Banner banner : event.getBanners()) {
Log.d(TAG, "Received banner: " + banner.getPlacementId());
}
});
// Always refresh after your subscriber is registered
Braze.getInstance(context).requestBannersRefresh(placementIds);
private void logBanners(BannersCacheSnapshot cacheSnapshot) {
for (Banner banner : cacheSnapshot.getBanners().values()) {
Log.d(TAG, "Received banner: " + banner.getPlacementId());
}
}
val placementIds = listOf("global_banner", "navigation_square_banner")
// - Available in version 44.0.0+
Braze.getInstance(context).subscribeToBannersEvents { event ->
when (event) {
is BannersEvent.CacheReplay -> logBanners(event.cacheSnapshot)
is BannersEvent.CacheLoad -> logBanners(event.cacheSnapshot)
is BannersEvent.DataUpdated -> logBanners(event.cacheSnapshot)
else -> {}
}
}
// Always refresh after your subscriber is registered
Braze.getInstance(context).requestBannersRefresh(placementIds)
Braze.getInstance(context).subscribeToBannersUpdates { event ->
event.banners.forEach { banner ->
Log.d(TAG, "Received banner: ${banner.placementId}")
}
}
// Always refresh after your subscriber is registered
Braze.getInstance(context).requestBannersRefresh(placementIds)
private fun logBanners(cacheSnapshot: BannersCacheSnapshot) {
cacheSnapshot.banners.values.forEach { banner ->
Log.d(TAG, "Received banner: ${banner.placementId}")
}
}
Ereignisse werden auf einem Hintergrund-Thread ausgeliefert. Wechseln Sie zum Hauptthread, bevor Sie Views aktualisieren.
Verwenden Sie subscribeToBannersEvents ab Android SDK 44.0.0 und höher. subscribeToBannersUpdates ist das ältere Muster, das ab Version 44.0.0 als veraltet gilt.
Informationen darüber, wann jedes Ereignis ausgelöst wird und was die einzelnen Update-Gründe, Wiederholungsstatus, Analytics-Aktionen und Fehlergründe bedeuten, finden Sie unter Ereignisabonnements.
const bannerCardsSubscription = Braze.addListener(
Braze.Events.BANNER_CARDS_UPDATED,
(data) => {
const banners = data.banners;
console.log(
`Received ${banners.length} Banner Cards with placement IDs:`,
banners.map((banner) => banner.placementId)
);
}
);
This feature is not currently supported on Unity.
This feature is not currently supported on Cordova.
StreamSubscription bannerStreamSubscription = braze.subscribeToBanners((List<BrazeBanner> banners) {
for (final banner in banners) {
print("Received banner: " + banner.toString());
}
});
This feature is not currently supported on Roku.
Schritt 4: Mithilfe der Platzierungs-ID einfügen

Ein vollständiges Schritt-für-Schritt-Tutorial finden Sie unter Banner anhand der Platzierungs-ID anzeigen.
Erstellen Sie ein Container-Element für das Banner. Achten Sie darauf, Breite und Höhe festzulegen.
<div id="global-banner-container" style="width: 100%; height: 450px;"></div>
Wenn Sie Vanilla JavaScript mit dem Web Braze SDK verwenden, rufen Sie die Methode insertBanner auf, um das innere HTML des Container-Elements zu ersetzen.
import * as braze from "@braze/web-sdk";
braze.initialize("sdk-api-key", {
baseUrl: "sdk-base-url",
allowUserSuppliedJavascript: true, // banners require you to opt-in to user-supplied javascript
});
// - Available in version 7.0.0+
braze.subscribeToBannersEvents((event) => {
const container = document.getElementById("global-banner-container");
switch (event.type) {
case braze.ChannelEventType.CACHE_REPLAY:
case braze.ChannelEventType.CACHE_LOAD:
case braze.ChannelEventType.DATA_UPDATED: {
// get this placement's banner. If it's missing the user did not qualify for one.
const globalBanner = event.cacheSnapshot.banners["global_banner"];
if (!globalBanner) {
container.style.display = "none";
return;
}
// Insert the banner which replaces the innerHTML of that container
braze.insertBanner(globalBanner, container);
// Special handling if the user is part of a Control Variant
container.style.display = globalBanner.isControl ? "none" : "";
break;
}
case braze.ChannelEventType.ERROR:
if (event.reason === braze.ChannelErrorReason.FEATURE_DISABLED) {
// Banners are disabled, so hide the container
container.style.display = "none";
}
break;
}
});
braze.subscribeToBannersUpdates((banners) => {
// get this placement's banner. If it's `null` the user did not qualify for one.
const globalBanner = braze.getBanner("global_banner");
if (!globalBanner) {
return;
}
const container = document.getElementById("global-banner-container");
// Insert the banner which replaces the innerHTML of that container
braze.insertBanner(globalBanner, container);
// Special handling if the user is part of a Control Variant
if (globalBanner.isControl) {
// hide or collapse the container
container.style.display = "none";
}
});
braze.requestBannersRefresh(["global_banner", "navigation_square_banner"]);
Verwenden Sie subscribeToBannersEvents ab Web SDK 7.0.0 und höher. subscribeToBannersUpdates ist das ältere Muster, das ab Version 7.0.0 als veraltet gilt.
Wenn Sie React mit dem Web Braze SDK verwenden, rufen Sie die Methode insertBanner mit einer ref auf, um das innere HTML des Container-Elements zu ersetzen.
import { useRef } from 'react';
import * as braze from "@braze/web-sdk";
export default function App() {
const bannerRef = useRef<HTMLDivElement>(null);
useEffect(() => {
const globalBanner = braze.getBanner("global_banner");
if (!globalBanner || globalBanner.isControl) {
// hide the container
} else {
// insert the banner to the container node
braze.insertBanner(globalBanner, bannerRef.current);
}
}, []);
return <div ref={bannerRef}></div>
}

Um Impressionen zu tracken, stellen Sie sicher, dass Sie insertBanner auch für isControl aufrufen. Anschließend können Sie Ihren Container ausblenden oder minimieren.
Nach einer Aktualisierung aktualisiert das SDK eine BannerUIView oder BannerView nur dann, wenn sich der zwischengespeicherte Inhalt dieser Platzierung ändert (hinzugefügt, entfernt oder aktualisiert). Unveränderte angezeigte Banner bleiben bestehen. Der Aufruf von changeUser() aktualisiert jede registrierte Banner-View.
// To get access to the Banner model object:
let globalBanner: Braze.Banner?
AppDelegate.braze?.banners.getBanner(for: "global_banner", { banner in
self.globalBanner = banner
})
// UIKit implementation:
// If you simply want the Banner view, initialize a `UIView` with the placement ID:
if let braze = AppDelegate.braze {
let bannerUIView = BrazeBannerUI.BannerUIView(
placementId: "global_banner",
braze: braze,
// iOS does not perform automatic resizing or visibility changes.
// Use the `processContentUpdates` parameter to adjust the size and visibility of your Banner according to your use case.
processContentUpdates: { result in
switch result {
case .success(let updates):
if let height = updates.height {
// Adjust the visibility and/or height.
}
case .failure(let error):
// Handle the error.
}
}
)
}
// SwiftUI implementation:
// Similarly, if you want a Banner view in SwiftUI, use the corresponding `BannerView` initializer:
if let braze = AppDelegate.braze {
let bannerView = BrazeBannerUI.BannerView(
placementId: "global_banner",
braze: braze,
// iOS does not perform automatic resizing or visibility changes.
// Use the `processContentUpdates` parameter to adjust the size and visibility of your Banner according to your use case.
processContentUpdates: { result in
switch result {
case .success(let updates):
if let height = updates.height {
// Adjust the visibility and/or height according to your parent controller.
}
case .failure(let error):
// Handle the error.
}
}
)
}
Nach einer Aktualisierung aktualisiert das SDK eine BannerView nur dann, wenn sich der zwischengespeicherte Inhalt dieser Platzierung ändert (hinzugefügt, entfernt oder aktualisiert). Unveränderte angezeigte Banner bleiben bestehen. Der Aufruf von changeUser() aktualisiert dennoch jede registrierte BannerView.
Um das Banner im Java-Code zu erhalten, verwenden Sie:
Banner globalBanner = Braze.getInstance(context).getBanner("global_banner");
Sie können Banner in Ihrem Android-Views-Layout erstellen, indem Sie dieses XML einbinden:
<com.braze.ui.banners.BannerView
android:id="@+id/global_banner_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:placementId="global_banner" />
Wenn Sie Android Views verwenden, nutzen Sie dieses XML:
<com.braze.ui.banners.BannerView
android:id="@+id/global_banner_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:placementId="global_banner" />
Um Jetpack Compose zu verwenden, fügen Sie das Artefakt com.braze:android-sdk-jetpack-compose zu Ihrem App-Modul hinzu. Verwenden Sie dieselbe Version wie Ihre anderen Braze Android SDK-Abhängigkeiten. Dieses Modul ist separat von android-sdk-ui und stellt das Banner-Composable unter com.braze.jetpackcompose.banners bereit.

Einige Compose-UI-Bibliotheken definieren ihr eigenes Banner-Composable. Importieren Sie com.braze.jetpackcompose.banners.Banner explizit, damit Sie die Braze-API aufrufen.
import com.braze.jetpackcompose.banners.Banner
@Composable
fun myBannerSlot() {
Banner(placementId = "global_banner")
}
Optional können Sie heightCallback übergeben, um die gerenderte Höhe in dp zu erhalten, wenn sich die Bannergröße ändert. Als Referenz siehe die KDoc für Banner.
Wenn Sie das Jetpack Compose-Modul nicht hinzufügen, umschließen Sie BannerView mit AndroidView:
import android.view.ViewGroup
import androidx.compose.runtime.Composable
import androidx.compose.ui.viewinterop.AndroidView
import com.braze.ui.banners.BannerView
@Composable
fun myBannerSlot() {
AndroidView(
factory = { context ->
BannerView(context, "global_banner").apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
}
},
update = { it.placementId = "global_banner" }
)
}
Um das Banner in Kotlin zu erhalten, verwenden Sie:
val banner = Braze.getInstance(context).getBanner("global_banner")
Wenn Sie die neue Architektur von React Native verwenden, müssen Sie BrazeBannerView als Fabric-Komponente in Ihrer AppDelegate.mm registrieren.
#ifdef RCT_NEW_ARCH_ENABLED
/// Register the `BrazeBannerView` for use as a Fabric component.
- (NSDictionary<NSString *,Class<RCTComponentViewProtocol>> *)thirdPartyFabricComponents {
NSMutableDictionary * dictionary = [super thirdPartyFabricComponents].mutableCopy;
dictionary[@"BrazeBannerView"] = [BrazeBannerView class];
return dictionary;
}
#endif
Für die einfachste Integration fügen Sie das folgende JavaScript-XML-Snippet (JSX) in Ihre View-Hierarchie ein und geben Sie lediglich die Platzierungs-ID an.
<Braze.BrazeBannerView
placementId='global_banner'
/>
Um das Datenmodell des Banners in React Native zu erhalten oder das Vorhandensein dieser Platzierung im Cache des Benutzers/der Benutzerin zu prüfen, verwenden Sie:
const banner = await Braze.getBanner("global_banner");
This feature is not currently supported on Unity.
This feature is not currently supported on Cordova.
Für die einfachste Integration fügen Sie das folgende Widget in Ihre View-Hierarchie ein und geben Sie lediglich die Platzierungs-ID an.
BrazeBannerView(
placementId: "global_banner",
),
To get the Banner's data model in Flutter, use:
Sie können die Methode getBanner verwenden, um das Vorhandensein dieser Platzierung im Cache des Benutzers/der Benutzerin zu prüfen.
braze.getBanner("global_banner").then((banner) {
if (banner == null) {
// Handle null cases.
} else {
print(banner.toString());
}
});
This feature is not currently supported on Roku.
Schritt 5: Testbanner senden (optional)
Bevor Sie eine Banner-Campaign starten, können Sie ein Testbanner senden, um Ihre Integration zu überprüfen. Testbanner werden in einem separaten In-Memory-Cache gespeichert und bleiben nicht über App-Neustarts hinweg bestehen. Obwohl keine zusätzliche Einrichtung erforderlich ist, muss Ihr Testgerät in der Lage sein, Vordergrund-Push-Benachrichtigungen zu empfangen, damit es den Test anzeigen kann.

Testbanner sind wie alle anderen Banner, mit der Ausnahme, dass sie bei der nächsten App-Sitzung entfernt werden.
Impressionen protokollieren
Braze protokolliert automatisch Impressionen für Banner, die sichtbar sind, wenn Sie SDK-Methoden verwenden, um ein Banner einzufügen—eine manuelle Erfassung von Impressionen ist daher nicht erforderlich.
Klicks protokollieren
Welche Methode zum Protokollieren von Banner-Klicks verwendet wird, hängt davon ab, wie Ihr Banner gerendert wird und wo sich Ihr Klick-Handler befindet.
Standard-Banner-Inhalte (automatisch)
Wenn Sie die standardmäßigen, mitgelieferten SDK-Methoden zum Einfügen von Bannern verwenden und Ihr Banner Standard-Editor-Komponenten (Bilder, Buttons, Text) nutzt, werden Klicks automatisch erfasst. Das SDK fügt diesen Elementen Klick-Listener hinzu, und es ist kein zusätzlicher Code erforderlich.
Custom-Code-Blöcke
Wenn Ihr Banner den Editor-Block Custom Code im Braze-Dashboard verwendet, müssen Sie brazeBridge.logClick() nutzen, um Klicks aus diesem benutzerdefinierten HTML heraus zu protokollieren. Dies gilt auch dann, wenn Sie SDK-Methoden zum Rendern des Banners verwenden, da das SDK Listenern nicht automatisch an Elemente innerhalb Ihres benutzerdefinierten Codes anhängen kann.
<button onclick="brazeBridge.logClick()">
Click me
</button>
Die vollständige Referenz finden Sie unter Benutzerdefinierter Code und JavaScript-Pont für Banner. Die brazeBridge stellt eine Kommunikationsschicht zwischen dem internen HTML des Banners und dem übergeordneten Braze SDK bereit.
Benutzerdefinierte UI-Implementierungen (Headless)
Wenn Sie eine vollständig benutzerdefinierte UI mithilfe der benutzerdefinierten Eigenschaften des Banners erstellen, anstatt das Banner-HTML zu rendern, müssen Sie Klicks und Impressionen manuell aus Ihrem Anwendungscode heraus protokollieren. Da das SDK das Banner nicht rendert, kann es Interaktionen mit Ihren benutzerdefinierten UI-Elementen nicht automatisch erfassen.
Methodensignaturen und vollständige Details finden Sie in der Braze SDK-Referenzdokumentation.
Impressionen protokollieren
Rufen Sie die Impression-Methode der jeweiligen Plattform für Banner auf, wenn Ihre benutzerdefinierte UI das Banner als „gesehen“ betrachtet. Implementieren Sie eine robuste Logik dafür, was als Impression zählt, um doppelte Ereignisse zu vermeiden – protokollieren Sie beispielsweise nur, wenn das Banner in den sichtbaren Bereich (oder Äquivalent) eintritt, und protokollieren Sie nicht erneut, wenn dasselbe Banner zurück in den sichtbaren Bereich gescrollt wird oder wenn Ihre Komponente ohne ein neues Ansichtsereignis neu gerendert wird.
import * as braze from "@braze/web-sdk";
// Log impression when your custom UI considers the banner viewed (for example, once when it enters viewport)
const banner = braze.getBanner("placement_id_homepage_top");
if (banner) {
braze.logBannerImpressions([banner]);
}
// Log impression when your custom UI considers the banner viewed (for example, once when it enters viewport)
Braze.getInstance(context).logBannerImpression("placement_id_homepage_top")
// Log impression when your custom UI considers the banner viewed (for example, once when it enters viewport)
Braze.getInstance(context).logBannerImpression("placement_id_homepage_top");
// Retrieve a banner and log an impression on it (for example, once when it enters viewport)
braze.banners.getBanner(for: "placement_id_homepage_top") { banner in
banner?.context.logImpression()
}
// Log impression when your custom UI considers the banner viewed (for example, once when it enters viewport)
Braze.logBannerImpression("placement_id_homepage_top");
Die neuesten Methodensignaturen finden Sie im React Native SDK-Repository.
// Log impression when your custom UI considers the banner viewed (for example, once when it enters viewport)
braze.logBannerImpression("placement_id_homepage_top");
Klicks protokollieren
Rufen Sie die Klick-Methode der jeweiligen Plattform für Banner auf, wenn Nutzer:innen auf Ihr benutzerdefiniertes Banner (oder einen bestimmten Button) tippen. Übergeben Sie die optionale buttonId, wenn der Klick auf einen bestimmten Button erfolgt, damit die Analytics den Klick korrekt zuordnen können.
import * as braze from "@braze/web-sdk";
// Log click
braze.logBannerClick("placement_id_homepage_top", buttonId); // buttonID is optional
// Log click
Braze.getInstance(context).logBannerClick("placement_id_homepage_top", buttonId) // buttonID parameter can be null
// Log click
Braze.getInstance(context).logBannerClick("placement_id_homepage_top", buttonId); // buttonID parameter can be null
// Retrieve a banner and log a click on it
braze.banners.getBanner(for: "placement_id_homepage_top") { banner in
banner?.context.logClick(buttonId: buttonId) // buttonID is optional
}
// Log click
Braze.logBannerClick("placement_id_homepage_top", buttonId); // buttonID is optional
Die neuesten Methodensignaturen finden Sie im React Native SDK-Repository.
// Log click
braze.logBannerClicked("placement_id_homepage_top", buttonId); // buttonID parameter can be null
Schließen protokollieren
Das Schließen eines Banners entfernt ein Banner programmatisch aus einer Platzierung, wenn Nutzer:innen es aktiv schließen. Nach dem Schließen wird das Banner für diese:n Nutzer:in unterdrückt. Beim nächsten Aktualisieren der Platzierungsliste wird ein neues Banner zurückgegeben, sofern die:der Nutzer:in für eines infrage kommt.
Voraussetzungen
Dies sind die minimal erforderlichen SDK-Versionen, um das Schließen von Bannern zu protokollieren:
Integrationen
Standard-Banner-Integrationen (Drag-and-Drop-Editor)
Wenn Ihr Banner den Drag-and-Drop-Editor verwendet und eine Schließen-Button-Komponente enthält, ist kein zusätzlicher Code erforderlich. Wenn Nutzer:innen auf den Schließen-Button klicken, wird die Nachricht ausgeblendet, ein Schließen ausgelöst und anschließend ein Schließen-Ereignis für Analytics aufgezeichnet.
Custom-Code-Blöcke
Wenn Ihr Banner den Custom Code-Editor-Block verwendet, können Sie ein Schließen direkt aus dem HTML des Banners heraus mit brazeBridge.closeMessage() auslösen.
<button onclick="brazeBridge.closeMessage()">
Dismiss
</button>
Ein Banner programmatisch schließen
Wenn Sie die Standard-BrazeBannerView mit dem im Drag-and-Drop-Editor erstellten Schließen-Button verwenden, ist kein zusätzlicher Code erforderlich – das Schließen wird automatisch behandelt.
Für benutzerdefinierte UI-Integrationen können Sie die Dismiss-Methode direkt auf Ihrer Braze-Instanz aufrufen, um ein Banner programmatisch zu schließen und ein Schließen-Ereignis zu protokollieren. Die Dismiss-Methode kann sicher mehrfach aufgerufen werden – das SDK ignoriert doppelte Aufrufe für dasselbe Banner.
Dies sind die minimal erforderlichen SDK-Versionen, um ein Banner programmatisch zu schließen:
Übergeben Sie das Banner-Objekt an braze.dismissBanner(). Sie können das Banner-Objekt über braze.getAllBanners() oder aus dem cacheSnapshot.banners-Objekt eines subscribeToBannersEvents-Ereignisses erhalten.
import * as braze from "@braze/web-sdk";
const banners = braze.getAllBanners();
const banner = banners["global_banner"];
if (banner) {
braze.dismissBanner(banner);
}
import * as braze from "@braze/web-sdk";
const banners = braze.getAllBanners();
const banner = banners["global_banner"];
if (banner) {
braze.dismissBanner(banner);
}
Braze.getInstance(context).dismissBanner("your-placement-id");
Braze.getInstance(context).dismissBanner("your-placement-id")
dismissBanner() entfernt das Banner aus dem Cache und veröffentlicht BannersEvent.DataUpdated mit ChannelUpdateReason.CLIENT_ACTION, sodass benutzerdefinierte UIs neu gerendert werden können. BannerView-Widgets werden ausgeblendet, wenn sie BannerDismissedEvent empfangen. BannersEvent.DismissEvent ist der Analytics-Lebenszyklus für dieses Schließen und kein Signal zum Ausblenden der Ansicht.
Verwenden Sie dismiss() auf dem Kontext des Banners, wenn verfügbar. Diese Methode ist idempotent und löst den onDismiss-Callback automatisch aus. Wenn der Kontext nicht verfügbar ist, rufen Sie dismiss(using:) direkt auf dem Banner auf. Beide Methoden müssen vom Hauptthread aufgerufen werden.
// Preferred: dismiss via context.
banner.context?.dismiss()
// Fallback: if context is unavailable.
banner.dismiss(using: braze)
In Objective-C stehen diese als [banner.context dismiss] und [banner dismissUsing:braze] zur Verfügung.
Braze.dismissBanner("your-placement-id");
braze.dismissBanner("your-placement-id");
Benutzerdefinierte Analytics beim Schließen eines Banners protokollieren
Um beim Schließen eines Banners benutzerdefinierte Logik auszuführen – z. B. das Protokollieren von Analytics – verwenden Sie den Dismiss-Callback Ihres SDK. Der Callback empfängt ein Ereignisobjekt mit der placementId, dem stableKey und der trackingId des Banners.
Verwenden Sie Banner.subscribeToDismissedEvent(), um benutzerdefinierte Logik auszuführen, wenn ein bestimmtes Banner geschlossen wird. Abonnieren Sie das Ereignis, bevor Sie das Banner anzeigen.

Banner.subscribeToDismissedEvent() erfordert Web SDK 6.9.0 oder höher. In früheren Versionen verwenden Sie braze.subscribeToBannersUpdates() und erkennen das Schließen, indem Sie prüfen, ob das Banner nicht mehr in der aktualisierten Banner-Map vorhanden ist. Ab Web SDK 7.0.0 können Sie auch das DISMISS-Ereignis von braze.subscribeToBannersEvents() abfangen.
import * as braze from "@braze/web-sdk";
// - Available in version 7.0.0+
braze.subscribeToBannersEvents((event) => {
if (
event.type !== braze.ChannelEventType.CACHE_REPLAY &&
event.type !== braze.ChannelEventType.CACHE_LOAD &&
event.type !== braze.ChannelEventType.DATA_UPDATED
) {
return;
}
const banner = event.cacheSnapshot.banners["global_banner"];
if (banner) {
banner.subscribeToDismissedEvent(() => {
// Run any custom logic here, such as logging custom analytics
console.log("Banner was dismissed");
});
}
});
braze.subscribeToBannersUpdates((banners) => {
const banner = banners["global_banner"];
if (banner) {
banner.subscribeToDismissedEvent(() => {
// Run any custom logic here, such as logging custom analytics
console.log("Banner was dismissed");
});
}
});
braze.requestBannersRefresh(["global_banner"]);
Verwenden Sie subscribeToBannersEvents ab Web SDK 7.0.0. subscribeToBannersUpdates ist das ältere Muster, das ab Version 7.0.0 als veraltet markiert ist.
import { useEffect } from "react";
import * as braze from "@braze/web-sdk";
useEffect(() => {
// - Available in version 7.0.0+
const subscriptionId = braze.subscribeToBannersEvents((event) => {
if (
event.type !== braze.ChannelEventType.CACHE_REPLAY &&
event.type !== braze.ChannelEventType.CACHE_LOAD &&
event.type !== braze.ChannelEventType.DATA_UPDATED
) {
return;
}
const banner = event.cacheSnapshot.banners["global_banner"];
if (banner) {
banner.subscribeToDismissedEvent(() => {
// Run any custom logic here, such as logging custom analytics
console.log("Banner was dismissed");
});
}
});
const deprecatedSubscriptionId = braze.subscribeToBannersUpdates((banners) => {
const banner = banners["global_banner"];
if (banner) {
banner.subscribeToDismissedEvent(() => {
// Run any custom logic here, such as logging custom analytics
console.log("Banner was dismissed");
});
}
});
braze.requestBannersRefresh(["global_banner"]);
return () => {
braze.removeSubscription(subscriptionId);
braze.removeSubscription(deprecatedSubscriptionId);
};
}, []);
Verwenden Sie subscribeToBannersEvents ab Web SDK 7.0.0. subscribeToBannersUpdates ist das ältere Muster, das ab Version 7.0.0 als veraltet markiert ist.
Setzen Sie die optionale onDismissCallback-Eigenschaft auf BannerView.
import android.util.Log;
import com.braze.ui.banners.BannerView;
import kotlin.Unit;
// After obtaining your BannerView instance (for example from XML via findViewById, or `new BannerView(context, "global_banner")`)
bannerView.setOnDismissCallback((snapshot) -> {
Log.d(TAG, "placementId: " + snapshot.getPlacementId()
+ ", stableKey: " + snapshot.getStableKey()
+ ", trackingId: " + snapshot.getTrackingId());
// Run any custom logic here, such as logging custom analytics
return Unit.INSTANCE;
});
import android.util.Log
import com.braze.ui.banners.BannerView
// After obtaining your BannerView instance (for example via findViewById or `BannerView(context, "global_banner")`)
bannerView.onDismissCallback = { snapshot ->
Log.d(TAG, "placementId: ${snapshot.placementId}, stableKey: ${snapshot.stableKey}, trackingId: ${snapshot.trackingId}")
// Run any custom logic here, such as logging custom analytics
}
// After initializing your banner view instance using UIKit or SwiftUI
bannerView.onDismiss = { event in
print("Banner dismissed — placementId: \(event.placementId ?? "unknown")")
print(" stableKey: \(event.stableKey ?? "unknown")")
print(" trackingId: \(event.trackingId ?? "unknown")")
// Run any custom logic here, such as logging custom analytics
}
Setzen Sie die onDismiss-Prop auf Braze.BrazeBannerView, um beim Schließen eines Banners benutzerdefinierte Logik auszuführen.
import Braze from "@braze/react-native-sdk";
<Braze.BrazeBannerView
placementId="global_banner"
onDismiss={(event) => {
console.log("placementId:", event.placementId, "stableKey:", event.stableKey, "trackingId:", event.trackingId);
// Run any custom logic here, such as logging custom analytics
}}
/>
Setzen Sie den onDismiss-Parameter auf BrazeBannerView, um beim Schließen eines Banners benutzerdefinierte Logik auszuführen.
BrazeBannerView(
placementId: 'global_banner',
onDismiss: (BrazeBannerDismissEvent event) {
print('placementId: ${event.placementId}, stableKey: ${event.stableKey}, trackingId: ${event.trackingId}');
// Run any custom logic here, such as logging custom analytics
},
)
Speicherlimit für ausstehende Schließungen
Schließen-Ereignisse werden lokal als ausstehende Einträge gespeichert, bis sie beim nächsten requestBannersRefresh-Aufruf mit dem Braze-Server synchronisiert werden können.

In seltenen Fällen, in denen eine große Anzahl von Schließungen ohne erfolgreiche Synchronisierung angesammelt wird, können ältere ausstehende Schließungen verworfen werden. In diesem Fall können zuvor geschlossene Banner wieder erscheinen, bis die nächste erfolgreiche Synchronisierung abgeschlossen ist. Um dieses Risiko zu minimieren, rufen Sie requestBannersRefresh auf, sobald Ihre App die Netzwerkverbindung wiederherstellt.
Abmessungen und Größenanpassung
Folgendes sollten Sie über Abmessungen und Größenanpassung von Bannern wissen:
- Obwohl der Composer eine Vorschau von Bannern in verschiedenen Abmessungen ermöglicht, werden diese Informationen weder gespeichert noch an das SDK gesendet.
- Das HTML nimmt die gesamte Breite des Containers ein, in dem es gerendert wird.
- Wir empfehlen, ein Element mit festen Abmessungen zu erstellen und diese Abmessungen im Composer zu testen.
Benutzerdefinierte Eigenschaften
Sie können benutzerdefinierte Eigenschaften aus Ihrer Banner-Campaign verwenden, um Schlüssel-Wert-Daten über das SDK abzurufen und das Verhalten oder das Erscheinungsbild Ihrer App anzupassen. Beispielsweise könnten Sie:
- Senden Sie Metadaten für Ihre Drittanbieter-Analytics oder Integrationen.
- Verwenden Sie Metadaten wie einen
timestampoder ein JSON-Objekt, um bedingte Logik zu triggern. - Steuern Sie das Verhalten eines Banners basierend auf enthaltenen Metadaten wie
ratiooderformat.
Voraussetzungen
Sie müssen Ihrer Banner-Campaign benutzerdefinierte Eigenschaften hinzufügen. Darüber hinaus sind dies die erforderlichen Mindestversionen des SDK, um auf benutzerdefinierte Eigenschaften zugreifen zu können:
Auf benutzerdefinierte Eigenschaften zugreifen
Um auf die benutzerdefinierten Eigenschaften eines Banners zuzugreifen, verwenden Sie eine der folgenden Methoden basierend auf dem im Dashboard definierten Typ der Eigenschaft. Wenn der Schlüssel nicht mit einer Eigenschaft dieses Typs übereinstimmt oder nicht existiert, gibt die Methode null zurück.
// Returns the Banner instance
const banner = braze.getBanner("placement_id_homepage_top");
// banner may be undefined or null
if (banner) {
// Returns the string property
const stringProperty = banner.getStringProperty("color");
// Returns the boolean property
const booleanProperty = banner.getBooleanProperty("expanded");
// Returns the number property
const numberProperty = banner.getNumberProperty("height");
// Returns the timestamp property (as a number)
const timestampProperty = banner.getTimestampProperty("account_start");
// Returns the image URL property as a string of the URL
const imageProperty = banner.getImageProperty("homepage_icon");
// Returns the JSON object property
const jsonObjectProperty = banner.getJsonProperty("footer_settings");
}
// Passes the specified banner to the completion handler
AppDelegate.braze?.banners.getBanner(for: "placement_id_homepage_top") { banner in
// Returns the string property
let stringProperty: String? = banner.stringProperty(key: "color")
// Returns the boolean property
let booleanProperty: Bool? = banner.boolProperty(key: "expanded")
// Returns the number property as a double
let numberProperty: Double? = banner.numberProperty(key: "height")
// Returns the Unix UTC millisecond timestamp property as an integer
let timestampProperty: Int? = banner.timestampProperty(key: "account_start")
// Returns the image property as a String of the image URL
let imageProperty: String? = banner.imageProperty(key: "homepage_icon")
// Returns the JSON object property as a [String: Any] dictionary
let jsonObjectProperty: [String: Any]? = banner.jsonObjectProperty(key: "footer_settings")
}
// Returns the Banner instance
Banner banner = Braze.getInstance(context).getBanner("placement_id_homepage_top");
// banner may be undefined or null
if (banner != null) {
// Returns the string property
String stringProperty = banner.getStringProperty("color");
// Returns the boolean property
Boolean booleanProperty = banner.getBooleanProperty("expanded");
// Returns the number property
Number numberProperty = banner.getNumberProperty("height");
// Returns the timestamp property (as a Long)
Long timestampProperty = banner.getTimestampProperty("account_start");
// Returns the image URL property as a String of the URL
String imageProperty = banner.getImageProperty("homepage_icon");
// Returns the JSON object property as a JSONObject
JSONObject jsonObjectProperty = banner.getJSONProperty("footer_settings");
}
// Returns the Banner instance
val banner: Banner = Braze.getInstance(context).getBanner("placement_id_homepage_top") ?: return
// Returns the string property
val stringProperty: String? = banner.getStringProperty("color")
// Returns the boolean property
val booleanProperty: Boolean? = banner.getBooleanProperty("expanded")
// Returns the number property
val numberProperty: Number? = banner.getNumberProperty("height")
// Returns the timestamp property (as a Long)
val timestampProperty: Long? = banner.getTimestampProperty("account_start")
// Returns the image URL property as a String of the URL
val imageProperty: String? = banner.getImageProperty("homepage_icon")
// Returns the JSON object property as a JSONObject
val jsonObjectProperty: JSONObject? = banner.getJSONProperty("footer_settings")
// Get the Banner instance
const banner = await Braze.getBanner('placement_id_homepage_top');
if (!banner) return;
// Get the string property
const stringProperty = banner.getStringProperty('color');
// Get the boolean property
const booleanProperty = banner.getBooleanProperty('expanded');
// Get the number property
const numberProperty = banner.getNumberProperty('height');
// Get the timestamp property (as a number)
const timestampProperty = banner.getTimestampProperty('account_start');
// Get the image URL property as a string
const imageProperty = banner.getImageProperty('homepage_icon');
// Get the JSON object property
const jsonObjectProperty = banner.getJSONProperty('footer_settings');
// Fetch the banner asynchronously
_braze.getBanner(placementId).then(('placement_id_homepage_top') {
// Get the string property
final String? stringProperty = banner?.getStringProperty('color');
// Get the boolean property
final bool? booleanProperty = banner?.getBooleanProperty('expanded');
// Get the number property
final num? numberProperty = banner?.getNumberProperty('height');
// Get the timestamp property
final int? timestampProperty = banner?.getTimestampProperty('account_start');
// Get the image URL property
final String? imageProperty = banner?.getImageProperty('homepage_icon');
// Get the JSON object property
final Map<String, dynamic>? jsonObjectProperty = banner?.getJSONProperty('footer_settings');
// Use these properties as needed in your UI or logic
});