Zum Inhalt springen

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
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.

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.

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:

  1. 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 ein ERROR-Event mit dem Grund FEATURE_DISABLED gesendet. In beiden Fällen bleibt Ihr Abonnement aktiv.
  2. Wenn sich der Cache ändert: Das SDK sendet ein CACHE_LOAD-Event, wenn sich der Cache ohne Server-Aktualisierung geändert hat, oder ein DATA_UPDATED-Event, wenn eine Aktualisierung abgeschlossen ist oder Sie die Daten lokal geändert haben.
  3. Wenn Sie oder das SDK Analytics protokollieren: Das SDK sendet ein IMPRESSION-, CLICK- oder DISMISS-Event mit der Aktion ENQUEUED und sendet es erneut mit der Aktion FLUSHED, nachdem Braze es akzeptiert hat.
  4. 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);
// 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()
// 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)

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:

  1. 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.
  2. 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- und DATA_UPDATED-Events lesen Sie die Daten aus cacheSnapshot und rendern neu.
  3. (Optional) Behandeln Sie ERROR-Events, um herauszufinden, wann eine Aktualisierung oder ein Analytics-Vorgang fehlschlägt. Unter Android ersetzen sie subscribeToBannersErrors. Details finden Sie unter Fehlergründe.
  4. Entfernen Sie das Abonnement. Unter Android übergeben Sie die neue Event-Klasse (BannersEvent, ContentCardsEvent oder FeatureFlagsEvent) an removeSingleSubscription, 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.

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.
New Stuff!