Event-Abonnements
Erfahren Sie, wie Event-Abonnements im Braze SDK für Banner, Content Cards und Feature-Flags funktionieren. Dieser Artikel erklärt, wann jedes Event ausgelöst wird und was Ihre Integration damit tun sollte.
Voraussetzungen
Dies sind die minimalen SDK-Versionen, die für die Verwendung von Event-Abonnements erforderlich sind:
Über Event-Abonnements
Jeder Kanal verfügt über eine Event-Abonnement-Methode. Sie registrieren einen Callback, und das SDK ruft diesen jedes Mal auf, wenn etwas auf diesem Kanal passiert – zum Beispiel ein Cache-Replay, eine abgeschlossene Aktualisierung, ein Analytics-Event oder ein Fehler. Jedes Event teilt Ihnen mit, welche Art von Event Sie empfangen haben.
Die Event-Abonnement-Methoden ersetzen die älteren Update-Abonnement-Methoden. Die älteren Methoden liefern nur die aktuellen Daten. Die Event-Methoden teilen Ihnen außerdem mit, warum sich die Daten geändert haben, wann Analytics-Events protokolliert und gesendet werden und wann eine Anfrage fehlschlägt.
| Kanal | Event-Abonnement-Methode | Ersetzt | Anleitung |
|---|---|---|---|
| Banner | subscribeToBannersEvents |
subscribeToBannersUpdates |
Banner-Platzierungen verwalten |
| Content Cards | subscribeToContentCardsEvents |
subscribeToContentCardsUpdates |
Content Cards erstellen |
| Feature-Flags | subscribeToFeatureFlagsEvents |
subscribeToFeatureFlagsUpdates |
Feature-Flags erstellen |

subscribeToBannersUpdates, subscribeToContentCardsUpdates und subscribeToFeatureFlagsUpdates sind veraltet und werden in einer zukünftigen Hauptversion entfernt. Verwenden Sie stattdessen die entsprechende Event-Abonnement-Methode.
| Kanal | Event-Abonnement-Methode | Ersetzt | Anleitung |
|---|---|---|---|
| Banner | braze.banners.subscribeToEvents(_:) |
subscribeToUpdates(_:) |
Banner-Platzierungen verwalten |
| Content Cards | braze.contentCards.subscribeToEvents(_:) |
subscribeToUpdates(_:) |
Content Cards erstellen |
| Feature-Flags | braze.featureFlags.subscribeToEvents(_:) |
subscribeToUpdates(_:) |
Feature-Flags erstellen |
Die vollständige API-Referenz finden Sie in der BrazeKit-Dokumentation.
Jeder Kanal hat außerdem eine eventsStream-Eigenschaft, die dieselben Events als AsyncStream liefert. Objective-C-Apps verwenden die subscribeToEvents:-Methode auf denselben Kanalobjekten.

Die ältere subscribeToUpdates(_:)-Methode und die kanalspezifischen Update-Streams wie bannersStream sind veraltet. Verwenden Sie stattdessen subscribeToEvents(_:) oder eventsStream.
| Kanal | Event-Abonnement-Methode | Event-Klasse | Ersetzt | Anleitung |
|---|---|---|---|---|
| Banner | subscribeToBannersEvents |
BannersEvent |
subscribeToBannersUpdates |
Banner-Platzierungen verwalten |
| Content Cards | subscribeToContentCardsEvents |
ContentCardsEvent |
subscribeToContentCardsUpdates |
Content Cards erstellen |
| Feature-Flags | subscribeToFeatureFlagsEvents |
FeatureFlagsEvent |
subscribeToFeatureFlagsUpdates |
Feature-Flags erstellen |
Die vollständige API-Referenz finden Sie im Braze Android SDK KDoc.

subscribeToBannersUpdates, subscribeToContentCardsUpdates, subscribeToFeatureFlagsUpdates und subscribeToBannersErrors sind veraltet. Verwenden Sie stattdessen die entsprechende Event-Abonnement-Methode.
Namen nach Plattform
Dieser Artikel verwendet die Web-Namen für Event-Typen, Aktualisierungsgründe, Wiederholungsstatus, Analytics-Aktionen und Fehlergründe. Swift und Android verwenden dieselben Konzepte mit Namen, die den Konventionen der jeweiligen Plattform entsprechen.
| Web | Swift | Android |
|---|---|---|
CACHE_REPLAY |
cacheReplay |
CacheReplay |
CACHE_LOAD |
cacheLoad |
CacheLoad |
DATA_UPDATED |
dataUpdated |
DataUpdated |
IMPRESSION |
impressionEvent |
ImpressionEvent |
CLICK |
clickEvent |
ClickEvent |
DISMISS |
dismissEvent |
DismissEvent |
ERROR |
error |
ErrorEvent |
AUTO_SERVER_REFRESH |
autoServerRefresh |
AUTO_SERVER_REFRESH |
SDK_WILL_RETRY |
sdkWillRetry |
SDK_WILL_RETRY |
ENQUEUED |
enqueued |
ENQUEUED |
SERVER_ERROR |
.common(.serverError) |
Common(ErrorReason.ServerError) |
FEATURE_DISABLED |
.featureDisabled |
FeatureDisabled |
Die übrigen Aktualisierungsgründe, Wiederholungsstatus, Analytics-Aktionen und Fehlergründe folgen demselben Muster. In Swift ist der Typ für Aktualisierungsgründe Braze.ChannelUpdateReason. In Android hat jeder Kanal seinen eigenen Aktualisierungsgrund-Typ, wie z. B. BannersUpdateReason.
Wie Events zugestellt werden
Das SDK stellt Events in dieser Reihenfolge zu:
- Wenn Sie abonnieren: Das SDK ruft Ihren Callback sofort mit einem
CACHE_REPLAY-Event auf, das die zwischengespeicherten Daten enthält. Wenn der Kanal deaktiviert ist, wird stattdessen einERROR-Event mit dem GrundFEATURE_DISABLEDgesendet. In beiden Fällen bleibt Ihr Abonnement aktiv. - Wenn sich der Cache ändert: Das SDK sendet ein
CACHE_LOAD-Event, wenn sich der Cache ohne Server-Aktualisierung geändert hat, oder einDATA_UPDATED-Event, wenn eine Aktualisierung abgeschlossen ist oder Sie die Daten lokal geändert haben. - Wenn Sie oder das SDK Analytics protokollieren: Das SDK sendet ein
IMPRESSION-,CLICK- oderDISMISS-Event mit der AktionENQUEUEDund sendet es erneut mit der AktionFLUSHED, nachdem Braze es akzeptiert hat. - Wenn etwas fehlschlägt: Das SDK sendet ein
ERROR-Event.
Ihr Callback empfängt das Event als einziges Argument. Behandeln Sie jede Art von Event mit einem Switch auf den Event-Typ. Im Web protokolliert das SDK einen Fehler, den Ihr Callback auslöst, und stellt das Event trotzdem an andere Abonnent:innen zu.
import * as braze from "@braze/web-sdk";
// Register the subscription
const subscriptionId = braze.subscribeToBannersEvents((event) => {
switch (event.type) {
case braze.ChannelEventType.CACHE_REPLAY:
// Sent once, right away, with the cached data
break;
case braze.ChannelEventType.DATA_UPDATED:
// A refresh finished or the data changed locally
break;
case braze.ChannelEventType.ERROR:
// A request or analytics operation failed
break;
}
});
// Remove the subscription when you no longer need it
braze.removeSubscription(subscriptionId);

Rufen Sie die Event-Abonnement-Methode auf, nachdem Sie das SDK initialisiert haben. Rufen Sie sie vor openSession() auf, damit Ihr Callback die Events der ersten Sitzung empfängt. Wenn das SDK deaktiviert ist, gibt die Methode undefined zurück.
// Register the subscription and keep a strong reference to it
let cancellable = AppDelegate.braze?.banners.subscribeToEvents { event in
switch event {
case .cacheReplay(let cacheSnapshot):
// Sent once, right away, with the cached data
break
case .dataUpdated(let cacheSnapshot, let reason):
// A refresh finished or the data changed locally
break
case .error(let reason, let retryState):
// A request or analytics operation failed
break
default:
break
}
}
// Remove the subscription when you no longer need it
cancellable?.cancel()

Behalten Sie eine starke Referenz auf das zurückgegebene Cancellable. Das SDK beendet das Abonnement, wenn das Cancellable freigegeben wird. Das SDK ruft Ihren Handler auf dem Hauptthread auf.
// Register the subscription
val subscriber = IEventSubscriber<BannersEvent> { event ->
when (event) {
is BannersEvent.CacheReplay -> {
// Sent once, right away, with the cached data
}
is BannersEvent.DataUpdated -> {
// A refresh finished or the data changed locally
}
is BannersEvent.ErrorEvent -> {
// A request or analytics operation failed
}
else -> Unit
}
}
Braze.getInstance(context).subscribeToBannersEvents(subscriber)
// Remove the subscription when you no longer need it
Braze.getInstance(context).removeSingleSubscription(subscriber, BannersEvent::class.java)

Das SDK ruft Ihren Subscriber von einem Hintergrund-Thread aus auf. Wechseln Sie zum Hauptthread, bevor Sie Ihre UI aktualisieren.
Cache-Snapshots
CACHE_REPLAY-, CACHE_LOAD- und DATA_UPDATED-Events enthalten eine cacheSnapshot-Eigenschaft mit den Daten, die das SDK für die aktuelle Nutzerin bzw. den aktuellen Nutzer zwischengespeichert hat.
| Kanal | Daten in cacheSnapshot |
|---|---|
| Banner | banners: eine Map, die jede Platzierungs-ID dem zugehörigen zwischengespeicherten Banner zuordnet. Platzierungen ohne Banner sind nicht in der Map enthalten. |
| Content Cards | Web: contentCards, ein ContentCards-Objekt. Verwenden Sie contentCards.cards, um die Liste der Karten zu erhalten. Swift und Android: cards, die Liste der Karten. |
| Feature-Flags | featureFlags: die Liste der Feature-Flags. |
Jeder Snapshot enthält außerdem lastSyncAt, den Zeitpunkt der letzten erfolgreichen Synchronisierung für die aktuelle Nutzerin bzw. den aktuellen Nutzer als Unix-Zeitstempel in Sekunden. Der Wert ist 0, wenn noch keine Synchronisierung erfolgreich war, und null (nil in Swift), wenn der Kanal deaktiviert ist.
Migration von Update-Abonnements
Die Update-Abonnement-Methoden funktionieren weiterhin, sind aber veraltet. Um jedes Abonnement zu migrieren, nachdem Sie die Voraussetzungen erfüllt haben:
- Ersetzen Sie die veraltete Methode durch die Event-Abonnement-Methode für den jeweiligen Kanal. Die Tabellen unter Über Event-Abonnements listen jedes Paar auf.
- Aktualisieren Sie Ihren Callback. Der alte Callback empfing nur die aktuellen Daten. Der neue Callback empfängt ein Event – prüfen Sie daher den Event-Typ. Für
CACHE_REPLAY-,CACHE_LOAD- undDATA_UPDATED-Events lesen Sie die Daten auscacheSnapshotund rendern neu. - (Optional) Behandeln Sie
ERROR-Events, um herauszufinden, wann eine Aktualisierung oder ein Analytics-Vorgang fehlschlägt. Unter Android ersetzen siesubscribeToBannersErrors. Details finden Sie unter Fehlergründe. - Entfernen Sie das Abonnement. Unter Android übergeben Sie die neue Event-Klasse (
BannersEvent,ContentCardsEventoderFeatureFlagsEvent) anremoveSingleSubscription, nicht die veraltete…UpdatedEvent-Klasse.
Vorher-Nachher-Code finden Sie in der Anleitung für jeden Kanal in den Tabellen unter Über Event-Abonnements.
Event-Typen
Jedes Event gehört zu einem der Event-Typen in dieser Tabelle. Im Web hat das Event eine type-Eigenschaft mit einem der ChannelEventType-Werte. In Swift und Android ist jeder Event-Typ ein eigener Case oder eine eigene Klasse. Nicht jeder Kanal sendet jeden Event-Typ.
| Event-Typ | Gesendet von | Wann es ausgelöst wird | Was zu tun ist |
|---|---|---|---|
CACHE_REPLAY |
Banner, Content Cards, Feature-Flags | Einmalig, sofort, jedes Mal wenn Sie abonnieren. Enthält einen cacheSnapshot mit dem aktuellen Cache. |
Rendern Sie die zwischengespeicherten Daten, damit Ihre UI Inhalte hat, ohne auf das Netzwerk zu warten. |
CACHE_LOAD |
Banner, Content Cards, Feature-Flags | Der Cache hat sich ohne Server-Aktualisierung geändert. Dies passiert, wenn sich die Nutzerin bzw. der Nutzer ändert, wenn Sie SDK-Daten löschen oder wenn der Kanal deaktiviert wird. Im Web senden Content Cards es auch, wenn Karten vom Service Worker eintreffen. In Swift und Android wird es auch ausgelöst, wenn das SDK den Cache aus dem lokalen Speicher lädt, bevor eine Netzwerksynchronisierung stattfindet. Enthält einen cacheSnapshot mit dem neuen Cache. |
Rendern Sie aus dem Snapshot neu. Nach einem Nutzerwechsel oder wenn der Kanal deaktiviert wird, kann der Snapshot leer sein – löschen Sie daher Inhalte der vorherigen Nutzerin bzw. des vorherigen Nutzers. |
DATA_UPDATED |
Banner, Content Cards, Feature-Flags | Der Cache hat sich geändert. Das SDK sendet es bei jeder abgeschlossenen Aktualisierung, auch wenn sich nichts geändert hat, sowie bei lokalen Änderungen wie einer Ausblendung. Enthält einen cacheSnapshot und einen reason. |
Rendern Sie aus dem Snapshot neu. Prüfen Sie reason, um festzustellen, ob die Änderung von einer Aktualisierung oder von Ihrer eigenen Aktion stammt. |
IMPRESSION |
Banner, Content Cards, Feature-Flags | Eine Impression wurde protokolliert. Enthält eine action und das protokollierte Element (banner, card oder flag). |
Optional. Verwenden Sie es, um Impressionen in Ihrem eigenen Analytics-System zu spiegeln. |
CLICK |
Banner, Content Cards | Ein Klick wurde protokolliert. Enthält eine action und das angeklickte Element (banner oder card). Banner-Klicks enthalten auch eine Button-ID, wenn der Klick von einem Button mit einer ID kam. |
Optional. Verwenden Sie es, um Klicks in Ihrem eigenen Analytics-System zu spiegeln. |
DISMISS |
Banner, Content Cards | Eine Ausblendung wurde protokolliert. Enthält eine action und das ausgeblendete Element (banner oder card). |
Optional. DISMISS ist das Analytics-Event – aktualisieren Sie daher Ihre UI über das DATA_UPDATED-Event, das auf eine Ausblendung folgt. |
ERROR |
Banner, Content Cards, Feature-Flags | Eine Anfrage oder ein Vorgang ist fehlgeschlagen. Enthält einen reason und einen retryState. Im Web enthält es manchmal rateLimitedUntil. In Swift und Android ist die Rate-Limit-Zeit Teil des RATE_LIMITED-Grunds. |
Prüfen Sie retryState, um zu entscheiden, ob Sie es erneut versuchen sollten, und prüfen Sie reason, um die Ursache zu finden. |
Aktualisierungsgründe
DATA_UPDATED-Events enthalten einen reason mit einem der ChannelUpdateReason-Werte.
| Wert | Bedeutung | Was zu tun ist |
|---|---|---|
AUTO_SERVER_REFRESH |
Eine vom SDK gestartete Aktualisierung wurde abgeschlossen, z. B. eine Aktualisierung bei einer neuen Sitzung, einschließlich der Wiederholungsversuche. | Rendern Sie aus dem Snapshot neu. |
MANUAL_SERVER_REFRESH |
Eine von Ihnen angeforderte Aktualisierung wurde abgeschlossen, einschließlich der Wiederholungsversuche. Beispiele sind requestBannersRefresh(), requestContentCardsRefresh() und refreshFeatureFlags() im Web und Android oder requestRefresh() in Swift. |
Rendern Sie aus dem Snapshot neu. Verwenden Sie dies, um einen Ladeindikator auszublenden, den Sie beim Anfordern der Aktualisierung angezeigt haben. |
CLIENT_ACTION |
Der Cache hat sich aufgrund einer lokalen Aktion geändert, anstatt durch eine Serverantwort – z. B. das Ausblenden eines Banners oder einer Content-Card. | Rendern Sie aus dem Snapshot neu, ohne einen Lade- oder Fehlerstatus anzuzeigen. Feature-Flags sendet diesen Grund derzeit nicht, aber behandeln Sie ihn trotzdem, damit Ihr Code weiterhin funktioniert, falls sich das ändert. |
Wiederholungsstatus
ERROR-Events enthalten einen retryState mit einem der RetryState-Werte. Er teilt Ihnen mit, ob das SDK den fehlgeschlagenen Vorgang erneut versucht und was Sie tun sollten.
| Wert | Bedeutung | Was zu tun ist |
|---|---|---|
SDK_WILL_RETRY |
Das SDK versucht es automatisch erneut oder wartet, bis ein Rate-Limit abgelaufen ist, und versucht es dann erneut. | Zeigen Sie weiterhin die zwischengespeicherten Inhalte an. Fordern Sie keine weitere Aktualisierung an, da das SDK ein DATA_UPDATED- oder ein weiteres ERROR-Event sendet, wenn der Wiederholungsversuch abgeschlossen ist. |
INTEGRATOR_MAY_RETRY |
Das SDK hat aufgehört, es erneut zu versuchen. | Zeigen Sie weiterhin die zwischengespeicherten Inhalte an. Sie können die Aktualisierungsmethode nach einer Verzögerung erneut aufrufen. Wenn das Event rateLimitedUntil enthält, warten Sie bis zu diesem Zeitpunkt. |
DO_NOT_RETRY |
Der Fehler ist für diesen Vorgang endgültig. Ein erneuter Versuch wird nicht helfen. | Versuchen Sie es nicht erneut. Beheben Sie stattdessen die Ursache, z. B. den API-Schlüssel oder die Workspace-Einstellungen. Wenn der Grund FEATURE_DISABLED ist, hören Sie auf, Inhalte des Kanals anzuzeigen. |

Aktualisierungen werden nach einem Client-Fehler (einer HTTP-4xx-Antwort außer 429) nicht automatisch wiederholt. Das SDK meldet diese Fehler mit dem Wiederholungsstatus DO_NOT_RETRY. Es versucht weiterhin HTTP 429, HTTP 5xx und Netzwerkfehler erneut.
Analytics-Aktionen
IMPRESSION-, CLICK- und DISMISS-Events enthalten eine action mit einem der AnalyticsAction-Werte. Jedes Analytics-Event wird zweimal gesendet: zuerst mit ENQUEUED, dann mit FLUSHED.
| Wert | Bedeutung | Was zu tun ist |
|---|---|---|
ENQUEUED |
Das SDK hat das Analytics-Event lokal gespeichert. Braze hat es noch nicht empfangen. | Verwenden Sie es, um Ihre UI oder Ihre eigene Protokollierung sofort zu aktualisieren. |
FLUSHED |
Das SDK hat das Analytics-Event mit einer erfolgreichen Netzwerkantwort an Braze gesendet. | Verwenden Sie es als Bestätigung, dass das Event gesendet wurde. |
Fehlergründe
ERROR-Events enthalten einen reason mit einem der ChannelErrorReason-Werte. Jeder Grund kann auf jeden Kanal zutreffen.
| Wert | Bedeutung | Was zu tun ist |
|---|---|---|
SERVER_ERROR |
Braze hat einen serverseitigen Fehler zurückgegeben (z. B. eine HTTP-5xx-Antwort oder eine HTTP-429-Antwort ohne verwertbaren Retry-After-Header), oder die Anfrage hat Braze nicht erreicht. |
Folgen Sie dem retryState. Das SDK versucht es zuerst erneut und meldet dann INTEGRATOR_MAY_RETRY. Zeigen Sie weiterhin die zwischengespeicherten Inhalte an. |
CLIENT_ERROR |
Braze hat die Anfrage abgelehnt (z. B. eine HTTP-4xx-Antwort außer 429 oder ein SDK-Authentifizierungsfehler). Im Web kann es bei Feature-Flags auch bedeuten, dass das SDK eine Impression nicht lokal speichern konnte. | Folgen Sie dem retryState. Eine HTTP-4xx-Antwort ist sofort DO_NOT_RETRY. Bei einem SDK-Authentifizierungsfehler versucht das SDK es zuerst erneut und meldet dann DO_NOT_RETRY. Überprüfen Sie Ihren API-Schlüssel, SDK-Endpunkt und die Einrichtung der SDK-Authentifizierung. |
RATE_LIMITED |
Die Anfrage wurde durch ein Rate-Limit begrenzt. Das Event enthält rateLimitedUntil, ein Datum für den frühesten Zeitpunkt, zu dem ein weiterer Versuch erfolgreich sein kann. |
Wenn der retryState SDK_WILL_RETRY ist, warten Sie. Wenn er INTEGRATOR_MAY_RETRY ist, warten Sie bis rateLimitedUntil, bevor Sie erneut aktualisieren, da eine frühere Anfrage erneut fehlschlagen würde. Weitere Informationen finden Sie unter Rate-Limits. |
SDK_DISABLED |
Das SDK ist lokal deaktiviert und führt daher keine Netzwerkanfragen durch. | Behandeln Sie es als endgültig und versuchen Sie es nicht erneut. |
INVALID_SERVER_DATA |
Braze hat Daten zurückgegeben, die das SDK nicht interpretieren konnte. | Versuchen Sie es nicht erneut. Der retryState ist DO_NOT_RETRY. Zeigen Sie weiterhin die zwischengespeicherten Inhalte an und kontaktieren Sie den Braze-Support, wenn das Problem weiterbesteht. |
FEATURE_DISABLED |
Der Kanal ist für diesen Workspace deaktiviert. Das SDK meldet den Kanal auch als deaktiviert, bis es seine erste Konfiguration von Braze erhält. | Blenden Sie die UI für den Kanal aus. Dies ist nicht dasselbe wie eine leere Inhaltsliste. Behalten Sie Ihr Abonnement bei: Wenn Braze den Kanal dann aktiviert, aktualisiert das SDK und sendet ein DATA_UPDATED-Event. |

Sie können einen FEATURE_DISABLED-Fehler erhalten, wenn Sie abonnieren, bevor das SDK seine erste Konfiguration von Braze erhalten hat, selbst wenn der Kanal für Ihren Workspace aktiviert ist. Halten Sie Ihr Abonnement aktiv und behandeln Sie das darauffolgende DATA_UPDATED-Event.