Passer au contenu

Abonnements aux événements

Découvrez comment fonctionnent les abonnements aux événements du SDK Braze pour les Banners, Content Cards et Feature Flags. Cet article explique quand chaque événement se déclenche et ce que votre intégration doit faire en conséquence.

Prérequis

Voici les versions minimales du SDK nécessaires pour utiliser les abonnements aux événements :

À propos des abonnements aux événements

Chaque canal dispose d’une méthode d’abonnement aux événements. Vous enregistrez un rappel, et le SDK l’appelle chaque fois que quelque chose se produit sur ce canal, comme une relecture du cache, une actualisation terminée, un événement analytique ou une erreur. Chaque événement vous indique le type d’événement reçu.

Les méthodes d’abonnement aux événements remplacent les anciennes méthodes d’abonnement aux mises à jour. Les anciennes méthodes ne fournissent que les données actuelles. Les méthodes d’événement vous indiquent également pourquoi les données ont changé, quand des événements analytiques sont enregistrés et envoyés, et quand une requête échoue.

Canal Méthode d’abonnement aux événements Remplace Guide
Banners subscribeToBannersEvents subscribeToBannersUpdates Gérer les emplacements Banner
Content Cards subscribeToContentCardsEvents subscribeToContentCardsUpdates Créer des Content Cards
Feature Flags subscribeToFeatureFlagsEvents subscribeToFeatureFlagsUpdates Créer des feature flags
Canal Méthode d’abonnement aux événements Remplace Guide
Banners braze.banners.subscribeToEvents(_:) subscribeToUpdates(_:) Gérer les emplacements Banner
Content Cards braze.contentCards.subscribeToEvents(_:) subscribeToUpdates(_:) Créer des Content Cards
Feature Flags braze.featureFlags.subscribeToEvents(_:) subscribeToUpdates(_:) Créer des feature flags

Pour la référence API complète, consultez la documentation BrazeKit.

Chaque canal dispose également d’une propriété eventsStream qui fournit les mêmes événements sous forme d’AsyncStream. Les applications Objective-C utilisent la méthode subscribeToEvents: sur les mêmes objets de canal.

Canal Méthode d’abonnement aux événements Classe d’événement Remplace Guide
Banners subscribeToBannersEvents BannersEvent subscribeToBannersUpdates Gérer les emplacements Banner
Content Cards subscribeToContentCardsEvents ContentCardsEvent subscribeToContentCardsUpdates Créer des Content Cards
Feature Flags subscribeToFeatureFlagsEvents FeatureFlagsEvent subscribeToFeatureFlagsUpdates Créer des feature flags

Pour la référence API complète, consultez la documentation KDoc du SDK Android Braze.

Noms par plateforme

Cet article utilise les noms Web pour les types d’événements, les raisons de mise à jour, les états de nouvelle tentative, les actions analytiques et les raisons d’erreur. Swift et Android utilisent les mêmes concepts avec des noms qui suivent les conventions de chaque plateforme.

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

Les autres raisons de mise à jour, états de nouvelle tentative, actions analytiques et raisons d’erreur suivent le même schéma. Sur Swift, le type de raison de mise à jour est Braze.ChannelUpdateReason. Sur Android, chaque canal possède son propre type de raison de mise à jour, comme BannersUpdateReason.

Comment les événements sont délivrés

Le SDK délivre les événements dans cet ordre :

  1. Lorsque vous vous abonnez : le SDK appelle votre rappel immédiatement avec un événement CACHE_REPLAY contenant les données en cache. Si le canal est désactivé, il envoie à la place un événement ERROR avec la raison FEATURE_DISABLED. Dans les deux cas, votre abonnement reste actif.
  2. Lorsque le cache change : le SDK envoie un événement CACHE_LOAD si le cache a changé sans actualisation serveur, ou un événement DATA_UPDATED si une actualisation est terminée ou si vous avez modifié les données localement.
  3. Lorsque vous ou le SDK enregistrez des données analytiques : le SDK envoie un événement IMPRESSION, CLICK ou DISMISS avec l’action ENQUEUED, puis le renvoie avec l’action FLUSHED après que Braze l’a accepté.
  4. Lorsqu’un problème survient : le SDK envoie un événement ERROR.

Votre rappel reçoit l’événement comme seul argument. Gérez chaque type d’événement avec un switch sur le type d’événement. Sur Web, le SDK consigne les erreurs que votre rappel lance et continue de délivrer l’événement aux autres abonnés.

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)

Instantanés du cache

Les événements CACHE_REPLAY, CACHE_LOAD et DATA_UPDATED incluent une propriété cacheSnapshot contenant les données que le SDK a mises en cache pour l’utilisateur actuel.

Canal Données dans cacheSnapshot
Banners banners : un dictionnaire associant chaque ID d’emplacement à son Banner en cache. Les emplacements sans Banner ne figurent pas dans le dictionnaire.
Content Cards Web : contentCards, un objet ContentCards. Utilisez contentCards.cards pour obtenir la liste des cards. Swift et Android : cards, la liste des cards.
Feature Flags featureFlags : la liste des feature flags.

Chaque instantané inclut également lastSyncAt, l’horodatage de la dernière synchronisation réussie pour l’utilisateur actuel, exprimé en timestamp Unix en secondes. La valeur est 0 si aucune synchronisation n’a réussi et null (nil sur Swift) si le canal est désactivé.

Migrer depuis les abonnements aux mises à jour

Les méthodes d’abonnement aux mises à jour fonctionnent toujours, mais elles sont dépréciées. Pour migrer chaque abonnement, après avoir rempli les prérequis :

  1. Remplacez la méthode dépréciée par la méthode d’abonnement aux événements correspondante. Les tableaux dans À propos des abonnements aux événements listent chaque paire.
  2. Mettez à jour votre rappel. L’ancien rappel ne recevait que les données actuelles. Le nouveau rappel reçoit un événement, vérifiez donc le type d’événement. Pour les événements CACHE_REPLAY, CACHE_LOAD et DATA_UPDATED, lisez les données depuis cacheSnapshot et effectuez un nouveau rendu.
  3. (Facultatif) Gérez les événements ERROR pour savoir quand une actualisation ou une opération analytique échoue. Sur Android, ils remplacent subscribeToBannersErrors. Pour plus de détails, consultez Raisons d’erreur.
  4. Supprimez l’abonnement. Sur Android, passez la nouvelle classe d’événement (BannersEvent, ContentCardsEvent ou FeatureFlagsEvent) à removeSingleSubscription, et non l’ancienne classe …UpdatedEvent.

Pour consulter le code avant/après, reportez-vous au guide de chaque canal dans les tableaux de la section À propos des abonnements aux événements.

Types d’événements

Chaque événement correspond à l’un des types d’événements de ce tableau. Sur Web, l’événement possède une propriété type avec l’une des valeurs ChannelEventType. Sur Swift et Android, chaque type d’événement est son propre case ou classe. Tous les canaux n’envoient pas tous les types d’événements.

Type d’événement Envoyé par Quand il se déclenche Que faire
CACHE_REPLAY Banners, Content Cards, Feature Flags Une fois, immédiatement, chaque fois que vous vous abonnez. Il contient un cacheSnapshot avec le cache actuel. Affichez les données en cache pour que votre interface ait du contenu sans attendre le réseau.
CACHE_LOAD Banners, Content Cards, Feature Flags Le cache a changé sans actualisation serveur. Cela se produit lors d’un changement d’utilisateur, lorsque vous effacez les données du SDK ou lorsque le canal est désactivé. Sur Web, Content Cards l’envoie également lorsque des cards arrivent du service de traitement. Sur Swift et Android, il se déclenche aussi lorsque le SDK charge le cache depuis le stockage local avant toute synchronisation réseau. Il contient un cacheSnapshot avec le nouveau cache. Effectuez un nouveau rendu à partir de l’instantané. Après un changement d’utilisateur ou lorsque le canal est désactivé, l’instantané peut être vide : effacez donc le contenu de l’utilisateur précédent.
DATA_UPDATED Banners, Content Cards, Feature Flags Le cache a changé. Le SDK l’envoie pour chaque actualisation terminée, même si rien n’a changé, et pour les modifications locales comme un rejet. Il contient un cacheSnapshot et une reason. Effectuez un nouveau rendu à partir de l’instantané. Vérifiez reason pour déterminer si le changement provient d’une actualisation ou de votre propre action.
IMPRESSION Banners, Content Cards, Feature Flags Une impression a été enregistrée. Il contient une action et l’élément enregistré (banner, card ou flag). Facultatif. Utilisez-le pour refléter les impressions dans vos propres outils analytiques.
CLICK Banners, Content Cards Un clic a été enregistré. Il contient une action et l’élément cliqué (banner ou card). Les clics de Banner incluent également un ID de bouton si le clic provient d’un bouton avec un ID. Facultatif. Utilisez-le pour refléter les clics dans vos propres outils analytiques.
DISMISS Banners, Content Cards Un rejet a été enregistré. Il contient une action et l’élément rejeté (banner ou card). Facultatif. DISMISS est l’événement analytique, mettez donc à jour votre interface à partir de l’événement DATA_UPDATED qui suit un rejet.
ERROR Banners, Content Cards, Feature Flags Une requête ou une opération a échoué. Il contient une reason et un retryState. Sur Web, il contient parfois rateLimitedUntil. Sur Swift et Android, le délai de limitation de débit fait partie de la raison RATE_LIMITED. Vérifiez retryState pour décider de retenter ou non, et vérifiez reason pour en trouver la cause.

Raisons de mise à jour

Les événements DATA_UPDATED incluent une reason avec l’une des valeurs ChannelUpdateReason.

Valeur Signification Que faire
AUTO_SERVER_REFRESH Une actualisation initiée par le SDK est terminée, comme une actualisation lors d’une nouvelle session, y compris ses nouvelles tentatives. Effectuez un nouveau rendu à partir de l’instantané.
MANUAL_SERVER_REFRESH Une actualisation que vous avez demandée est terminée, y compris ses nouvelles tentatives. Par exemple requestBannersRefresh(), requestContentCardsRefresh() et refreshFeatureFlags() sur Web et Android, ou requestRefresh() sur Swift. Effectuez un nouveau rendu à partir de l’instantané. Utilisez cette raison pour masquer un indicateur de chargement que vous avez affiché lors de la demande d’actualisation.
CLIENT_ACTION Le cache a changé à la suite d’une action locale au lieu d’une réponse serveur, comme le rejet d’un Banner ou d’une Content Card. Effectuez un nouveau rendu à partir de l’instantané sans afficher d’état de chargement ou d’erreur. Feature Flags n’envoie pas actuellement cette raison, mais gérez-la pour que votre code continue de fonctionner si elle est ajoutée.

États de nouvelle tentative

Les événements ERROR incluent un retryState avec l’une des valeurs RetryState. Il vous indique si le SDK retentera l’opération échouée et ce que vous devez faire.

Valeur Signification Que faire
SDK_WILL_RETRY Le SDK retente automatiquement, ou attend que la limitation de débit soit levée avant de retenter. Continuez à afficher le contenu en cache. Ne demandez pas une autre actualisation, car le SDK envoie un événement DATA_UPDATED ou un autre événement ERROR lorsque la nouvelle tentative est terminée.
INTEGRATOR_MAY_RETRY Le SDK a cessé de retenter. Continuez à afficher le contenu en cache. Vous pouvez rappeler la méthode d’actualisation après un délai. Si l’événement inclut rateLimitedUntil, attendez ce moment.
DO_NOT_RETRY L’échec est définitif pour cette opération. Retenter ne servira à rien. Ne retentez pas. Corrigez plutôt la cause, comme la clé API ou les paramètres du workspace. Si la raison est FEATURE_DISABLED, arrêtez d’afficher le contenu du canal.

Actions analytiques

Les événements IMPRESSION, CLICK et DISMISS incluent une action avec l’une des valeurs AnalyticsAction. Chaque événement analytique est envoyé deux fois : d’abord avec ENQUEUED, puis avec FLUSHED.

Valeur Signification Que faire
ENQUEUED Le SDK a enregistré l’événement analytique localement. Braze ne l’a pas encore reçu. Utilisez-le pour mettre à jour votre interface ou votre propre journalisation immédiatement.
FLUSHED Le SDK a transmis l’événement analytique à Braze avec une réponse réseau réussie. Utilisez-le comme confirmation que l’événement a été transmis.

Raisons d’erreur

Les événements ERROR incluent une reason avec l’une des valeurs ChannelErrorReason. Chaque raison peut s’appliquer à tous les canaux.

Valeur Signification Que faire
SERVER_ERROR Braze a renvoyé une erreur côté serveur (comme une réponse HTTP 5xx, ou une réponse HTTP 429 sans en-tête Retry-After exploitable), ou la requête n’a pas atteint Braze. Suivez le retryState. Le SDK retente d’abord, puis signale INTEGRATOR_MAY_RETRY. Continuez à afficher le contenu en cache.
CLIENT_ERROR Braze a rejeté la requête (comme une réponse HTTP 4xx autre que 429, ou une erreur d’authentification SDK). Sur Web, pour Feature Flags, cela peut aussi signifier que le SDK n’a pas pu enregistrer une impression localement. Suivez le retryState. Une réponse HTTP 4xx est directement DO_NOT_RETRY. Pour une erreur d’authentification SDK, le SDK retente d’abord puis signale DO_NOT_RETRY. Vérifiez votre clé API, votre endpoint SDK et la configuration de l’authentification SDK.
RATE_LIMITED La requête a été limitée en débit. L’événement inclut rateLimitedUntil, une date indiquant le moment le plus proche auquel une nouvelle tentative peut réussir. Si le retryState est SDK_WILL_RETRY, attendez. S’il est INTEGRATOR_MAY_RETRY, attendez jusqu’à rateLimitedUntil avant d’actualiser à nouveau, car une requête antérieure échouera de nouveau. Pour plus d’informations, consultez Limites de débit.
SDK_DISABLED Le SDK est désactivé localement, il n’effectue donc aucune requête réseau. Traitez cela comme définitif et ne retentez pas.
INVALID_SERVER_DATA Braze a renvoyé des données que le SDK n’a pas pu interpréter. Ne retentez pas. Le retryState est DO_NOT_RETRY. Continuez à afficher le contenu en cache et contactez le support Braze si le problème persiste.
FEATURE_DISABLED Le canal est désactivé pour ce workspace. Le SDK signale également le canal comme désactivé jusqu’à ce qu’il reçoive sa première configuration de Braze. Masquez l’interface du canal. Ce n’est pas la même chose qu’une liste de contenu vide. Conservez votre abonnement : si Braze active ensuite le canal, le SDK actualise et envoie un événement DATA_UPDATED.
New Stuff!