Passer au contenu

Guide du dépôt du SDK React Native

À propos du SDK React Native de Braze

Le SDK React Native de Braze relie vos applications iOS et Android à Braze : profils utilisateurs, surfaces de communication, analyses et feature flags. Il encapsule le SDK Swift de Braze et le SDK Android de Braze natifs derrière une API JavaScript.

L’initialisation est pilotée par JavaScript : vous définissez la configuration native (notifications push, journalisation, délégués) dans les ressources Android et dans l’AppDelegate iOS, puis vous appelez Braze.initialize(apiKey, endpoint) depuis JavaScript pour démarrer le SDK. Vous gardez ainsi un contrôle total sur le moment où le SDK s’initialise et sur les identifiants utilisés. Une fois l’initialisation effectuée, appelez les autres méthodes du SDK (par exemple changeUser, logCustomEvent) selon vos besoins.

Ce que vous pouvez faire

  • Gestion des utilisateurs : Identifiez les utilisateurs, définissez les champs de profil, les attributs personnalisés, les alias et les groupes d’abonnement
  • In-App Messages : Interface utilisateur Braze par défaut ou gestion personnalisée via les abonnements et les API de journalisation
  • Content Cards : Interface de flux par défaut, ou récupération des cartes pour créer votre propre interface utilisateur
  • Bannières : Bannières HTML basées sur des placements, y compris BrazeBannerView
  • Notifications push : Demandes d’autorisation, enregistrement des jetons, écouteurs de payload (consultez les remarques propres à chaque plateforme dans la section Configuration native)
  • Feature flags : Actualisation, lecture des propriétés, enregistrement des impressions
  • Analyses : Événements personnalisés, achats, envoi immédiat des données
  • Contrôles du SDK : Activation et désactivation du SDK, suppression des données locales, signatures d’authentification du SDK

Conditions préalables

  • Compte Braze avec une clé API d’application et un endpoint SDK
  • Environnement de développement React Native (configuration de l’environnement React Native)
  • iOS : Xcode, CocoaPods (cd ios && pod install)
  • Android : Android Studio / Gradle ; plugin Kotlin Gradle selon les exigences de votre modèle React Native
  • Notifications push (le cas échéant) : configuration FCM (Android) et APNs (iOS) conformément à la documentation sur les notifications push

Pour savoir où trouver vos identifiants dans le tableau de bord, consultez l’aperçu de l’intégration.

Installation

npm install @braze/react-native-sdk
# or:
# yarn add @braze/react-native-sdk

Démarrage rapide

Cette section présente la configuration minimale requise pour initialiser le SDK React Native de Braze.

  1. Installez le package npm. Consultez la section Installation.
  2. Effectuez la configuration native pour Android et iOS (configuration, autorisations, notifications push si nécessaire).
  3. Initialisez le SDK depuis JavaScript et commencez à l’utiliser :
import Braze from "@braze/react-native-sdk";

// Initialize the SDK — call early in your app lifecycle (e.g. in a useEffect).
// The API key and endpoint are passed from JavaScript; native configuration
// (push, logging, etc.) is applied automatically from your native setup.
Braze.initialize("<YOUR_API_KEY>", "<YOUR_SDK_ENDPOINT>");

Braze.changeUser("user-123");
Braze.logCustomEvent("button_clicked", { screen: "home" });

Les définitions de types TypeScript sont fournies avec le package (src/index.d.ts sur GitHub).

Si vous appelez à nouveau Braze.initialize avec des identifiants différents, l’instance actuelle est supprimée puis recréée, ce qui permet une réinitialisation en cours de session.


Configuration native

Source de référence : les écrans étape par étape, les modifications Gradle/CocoaPods et la liste complète des clés XML Android figurent dans le guide du développeur React Native de Braze. Les extraits de code de cette section sont des exemples minimaux.

Android

  • Ajoutez le plugin Gradle Kotlin dans votre fichier build.gradle racine si votre modèle ne l’inclut pas déjà (les versions dépendent de votre version de React Native).
  • Ajoutez un fichier de ressources braze.xml dans res/values avec votre configuration. Activez l’initialisation différée pour que le SDK attende l’appel à Braze.initialize() depuis JavaScript avant de démarrer. Les autres valeurs de configuration (notifications push, délai d’expiration de session, etc.) sont toujours lues depuis ce fichier et appliquées au moment de l’initialisation.
  • Vérifiez la présence des autorisations de base telles que INTERNET et ACCESS_NETWORK_STATE dans AndroidManifest.xml.
  • Pour les notifications push, terminez l’intégration FCM et configurez l’ID d’expéditeur et les indicateurs d’enregistrement propres à Braze décrits dans la documentation.
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <!-- Enable delayed initialization so the SDK starts when
       Braze.initialize() is called from JavaScript. -->
  <bool name="com_braze_enable_delayed_initialization">true</bool>

  <!-- Additional native configuration (applied at initialization time) -->
  <bool name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
  <string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">YOUR_SENDER_ID</string>
</resources>

iOS

cd ios && pod install

Utilisez BrazeReactInitializer.configure dans votre AppDelegate pour enregistrer la configuration native. Les closures que vous fournissez sont stockées, puis appliquées lorsque Braze.initialize(apiKey, endpoint) est appelé depuis JavaScript.

import BrazeKit
import braze_react_native_sdk

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
  static var braze: Braze? = nil

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
  ) -> Bool {
    // Register native configuration for when JS calls Braze.initialize().
    BrazeReactInitializer.configure { config in
      config.logger.level = .info
      config.push.automation = true
    } postInitialization: { braze in
      AppDelegate.braze = braze
    }

    // ... React Native setup
    return true
  }
}
  • Closure configure : reçoit un objet Braze.Configuration et vous permet de définir les propriétés de configuration native (journalisation, notifications push, sessions, etc.). La clé API et l’endpoint sont fournis depuis JavaScript : vous n’avez pas à les définir ici.
  • Closure postInitialization (facultative) : reçoit l’instance Braze active après sa création, pour les opérations de configuration qui nécessitent l’instance (par exemple, conserver une référence ou définir des délégués).

Référence de configuration

Dans React Native, la configuration est native : Android lit res/values/braze.xml, et iOS utilise des closures enregistrées via BrazeReactInitializer.configure. Les deux s’appliquent lorsque Braze.initialize(apiKey, endpoint) est appelé depuis JavaScript.

Android (braze.xml)

Les valeurs par défaut sont définies dans le XML. BrazeConfig.Builder peut les remplacer au démarrage. La liste de référence des clés et de leurs types se trouve dans le guide d’intégration du SDK Android et dans BrazeConfigurationProvider. Chaque propriété Kotlin correspond à une ressource com_braze_* documentée.

Entrées les plus courantes :

Clé Type de ressource Description
com_braze_enable_delayed_initialization bool Obligatoire. Définissez cette clé sur true pour que le SDK attende l’appel à Braze.initialize() depuis JavaScript.
com_braze_api_key string Inutile si vous utilisez Braze.initialize() depuis JavaScript, car les identifiants sont transmis depuis JS. Obligatoire uniquement pour l’ancienne initialisation native.
com_braze_custom_endpoint string Inutile si vous utilisez Braze.initialize() depuis JavaScript. Obligatoire uniquement pour l’ancienne initialisation native.
com_braze_server_target string Sélecteur facultatif de cluster ou d’environnement (par exemple pour certaines versions internes ou de staging). En production, privilégiez com_braze_custom_endpoint, sauf indication contraire de votre intégration Braze.
com_braze_firebase_cloud_messaging_registration_enabled bool Lorsque cette clé vaut true, Braze s’enregistre auprès de FCM (configuration push standard).
com_braze_firebase_cloud_messaging_sender_id string ID d’expéditeur FCM utilisé lorsque l’enregistrement automatique est activé.
com_braze_handle_push_deep_links_automatically bool Permet à Braze d’ouvrir automatiquement les deep links des notifications push.
com_braze_trigger_action_minimum_time_interval_seconds integer Nombre minimum de secondes entre deux actions de déclenchement de messages in-app.
Autres divers D’autres clés ne figurent pas ici : délai d’expiration de session, géorepérages, localisation, paramètres par défaut des notifications, listes d’autorisation des appareils, initialisation différée, authentification SDK, etc. Consultez BrazeConfigurationProvider et le guide d’intégration du SDK Android.

iOS (Braze.Configuration)

Définissez les propriétés de configuration natives dans la closure configure transmise à BrazeReactInitializer.configure. La closure reçoit une instance de Braze.Configuration. La clé API et l’endpoint sont définis automatiquement à partir de l’appel JavaScript à Braze.initialize. Pour en savoir plus, consultez Braze.Configuration et les types imbriqués api, push, logger et location.

Domaine Membres (exemples) Remarques
Identifiants api.key, api.endpoint Définis automatiquement à partir de Braze.initialize(apiKey, endpoint) dans JavaScript. Ne les définissez pas dans la closure configure.
Journalisation logger.level La journalisation détaillée est réservée au développement. En production, réduisez le bruit.
Notifications push push.automation, push.appGroup, … L’automatisation simplifie l’enregistrement. appGroup est nécessaire pour les Push Stories et les extensions, le cas échéant.
Messages in-app triggerMinimumTimeInterval Par défaut, 30 secondes entre deux déclenchements.
Sessions sessionTimeout Durée d’inactivité avant le démarrage d’une nouvelle session (consultez la documentation Braze sur les sessions).
Confidentialité et données api.trackingPropertyAllowList, devicePropertyAllowList, api.sdkAuthentication À aligner avec le manifeste de confidentialité et les paramètres produit de l’authentification SDK.
Réseau api.requestPolicy, api.flushInterval Politique de nouvelle tentative des requêtes et fréquence de vidage.
Abonnement push optInWhenPushAuthorized Lorsque cette option vaut true, l’abonnement peut passer à l’état « abonné » une fois que l’utilisateur a autorisé les notifications.
Messages in-app et changement d’utilisateur preventInAppMessageDisplayForDifferentUser Limite l’affichage de messages in-app destinés à un autre utilisateur lorsque l’ID utilisateur change.
Autres forwardUniversalLinks, ephemeralEvents, useUUIDAsDeviceId, … Consultez la documentation Swift pour connaître le comportement complet.

Le pont React Native définit à l’initialisation api.sdkFlavor et les métadonnées SDK propres à React. Ne les remplacez pas, sauf si la documentation de Braze vous y invite.


API JavaScript / TypeScript

L’export par défaut du paquet est la classe Braze, qui expose des méthodes statiques (par exemple Braze.changeUser, Braze.logPurchase). Les constantes telles que Braze.Events, Braze.Genders et Braze.NotificationSubscriptionTypes sont rattachées à ce même export.


Fonctionnalités principales

Gestion des utilisateurs

import Braze from "@braze/react-native-sdk";

Braze.changeUser("user-123");
Braze.setEmail("[email protected]");
Braze.setCustomUserAttribute("plan", "premium");
Braze.addAlias("external_id", "marketing_id");
Braze.addToSubscriptionGroup("NEWSLETTER_GROUP_UUID");

Authentification SDK (facultative) : transmettez une signature comme second argument à changeUser, ou appelez Braze.setSdkAuthenticationSignature(signature) lorsque cette fonctionnalité est activée dans le tableau de bord.

Messages in-app

  • Avec l’interface utilisateur Braze par défaut, suivez la documentation sur les messages in-app. En général, vous n’avez pas besoin d’appeler subscribeToInAppMessage uniquement pour afficher l’interface par défaut.
  • Pour une gestion personnalisée, abonnez-vous avec useBrazeUI: false, puis enregistrez les impressions et les clics selon vos besoins :
Braze.subscribeToInAppMessage(false, (event) => {
  const msg = event.inAppMessage;
  // Render your own UI from msg.message, msg.buttons, etc.
  Braze.logInAppMessageImpression(msg);
});

Content Cards

const cards = await Braze.getCachedContentCards();
Braze.requestContentCardsRefresh();
Braze.launchContentCards(); // default Braze UI

Braze.logContentCardImpression(cardId);
Braze.logContentCardClicked(cardId);

Écoutez les mises à jour avec Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, ...).

Bannières

import Braze from "@braze/react-native-sdk";

Braze.requestBannersRefresh(["homepage_banner"]);
const banner = await Braze.getBanner("homepage_banner");

// Or use the native Banner view:
// <Braze.BrazeBannerView placementId="homepage_banner" />

Notifications push

Braze.requestPushPermission({
  alert: true,
  badge: true,
  sound: true,
});
// Token registration is usually handled natively; see docs for your setup.
Braze.registerPushToken(token);
  • getInitialPushPayload : utilisez cette méthode lorsque l’application s’ouvre depuis une notification, afin d’éviter les conditions de concurrence avec Linking de React Native. Elle nécessite des hooks natifs (BrazeReactUtils sur iOS, BrazeReactUtils.populateInitialPushPayloadFromIntent sur Android), comme décrit dans les commentaires de documentation TypeScript et dans l’application d’exemple.
  • Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, ...) est réservé à Android selon les typages publics.

Feature flags

const flag = await Braze.getFeatureFlag("new_checkout");
if (flag?.enabled) {
  const rollout = flag.getNumberProperty("rollout_percentage") ?? 0;
}
Braze.refreshFeatureFlags();
Braze.logFeatureFlagImpression("new_checkout");

Analyse et achats

Braze.logCustomEvent("purchase_completed", { sku: "sku-1" });
Braze.logPurchase("sku-1", "29.99", "USD", 1, { source: "cart" });
Braze.requestImmediateDataFlush();

Remarque : logPurchase attend le prix sous forme de chaîne de caractères (voir les typages).

Gestion des données et état du SDK

changeUser indique seulement à Braze à quel ID utilisateur attribuer les nouvelles activités. Cette méthode n’efface pas les données du SDK mises en cache sur l’appareil. Il n’existe pas d’API de « déconnexion » distincte : si vous avez besoin d’une déconnexion classique (effacer l’état local de Braze pour que le profil, les messages et les jetons en cache de l’utilisateur précédent disparaissent de cette installation), utilisez généralement wipeData(). Il s’agit d’une réinitialisation locale complète.

Braze.wipeData();
Braze.disableSDK();
Braze.enableSDK();

wipeData() : efface les données locales de Braze pour cette installation (état de l’utilisateur, de la session et des cartes en cache, association du jeton push, etc.). Utilisez cette méthode pour un comportement de type déconnexion lorsque vous ne devez pas laisser l’état Braze de l’utilisateur précédent sur l’appareil, mais aussi pour « supprimer mes données sur cet appareil », pour des réinitialisations QA sans réinstallation ou pour des parcours stricts de confidentialité. changeUser seul n’effectue pas ce nettoyage : il définit uniquement l’ID utilisateur qui reçoit les nouveaux événements. Sur iOS, le comportement peut différer de celui d’Android (par exemple, l’interaction avec l’état désactivé du SDK) ; consultez la documentation native de Braze si vous utilisez cette méthode en production.

disableSDK() : arrête le fonctionnement du SDK (aucune collecte ni transmission selon la configuration). Utilisez cette méthode pour les options de désabonnement de l’utilisateur, les modes restreints (conformité, paramètres pour enfants) ou le débogage sans supprimer la dépendance.

enableSDK() : réactive le SDK après disableSDK(). Sur iOS, la réactivation peut ne pas prendre effet avant le prochain lancement de l’application ; vérifiez la documentation Swift/iOS de Braze avant de compter sur une réactivation immédiate.


Événements

Abonnez-vous avec Braze.addListener(event, callback). L’appel renvoie un objet d’abonnement ; appelez .remove() sur cet objet pour arrêter l’écoute.

Configurer un écouteur :

import Braze from "@braze/react-native-sdk";

const subscription = Braze.addListener(
  Braze.Events.CONTENT_CARDS_UPDATED,
  (update) => {
    console.log("Content cards:", update.cards);
  }
);

Supprimer l’écouteur :

subscription.remove();

Dans un composant React, stockez l’abonnement et appelez .remove() lors du nettoyage (par exemple, dans la fonction renvoyée par un useEffect) :

useEffect(() => {
  const sub = Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, (update) => {
    setCards(update.cards);
  });
  return () => sub.remove();
}, []);
Constante d’événement Payload (résumé)
Braze.Events.CONTENT_CARDS_UPDATED Dernières Content Cards
Braze.Events.BANNER_CARDS_UPDATED Dernières bannières
Braze.Events.FEATURE_FLAGS_UPDATED Tableau des feature flags
Braze.Events.IN_APP_MESSAGE_RECEIVED Événement de message in-app
Braze.Events.SDK_AUTHENTICATION_ERROR Détails de l’erreur d’authentification du SDK
Braze.Events.PUSH_NOTIFICATION_EVENT Payload de notification push (Android uniquement)

Notes d’intégration

  • Expo : utilisez le plugin Braze Expo pour éviter, dans la mesure du possible, la configuration native manuelle.
  • Nouvelle architecture / Turbo Modules : pris en charge par les versions récentes du plugin. Si vous effectuez la migration, suivez le guide du développeur ainsi que les exemples de paramètres AppDelegate et Gradle.
  • Confidentialité (iOS) : des méthodes telles que updateTrackingPropertyAllowList prennent en charge la configuration liée au manifeste de confidentialité. Consultez la page Manifeste de confidentialité Swift.

- Jest : simulez (mock) les modules natifs de react-native ou le module Turbo de Braze (consultez __tests__/jest.setup.js dans ce dépôt pour des exemples de modèles).

Prise en charge des versions

Le tableau suivant répertorie les versions de React Native prises en charge pour chaque version du plugin Braze.

Plugin Braze React Native Nouvelle architecture
9.0.0+ ≥ 0.71 Oui
6.0.0+ ≥ 0.68 Oui (≥ 0.70.0)
2.0.0+ ≥ 0.68 Oui
≤ 1.41.0 ≤ 0.71 Non

Respectez également les exigences des SDK natifs :


Plugin Braze Expo

Pour les flux de travail gérés par Expo, consultez le dépôt du plugin Braze Expo.


Exemple d’application

BrazeProject dans ce dépôt est un exemple complet (gestion des utilisateurs, Content Cards, feature flags, bannières, etc.).

cd BrazeProject/
yarn install
npx react-native start

iOS (depuis BrazeProject) :

cd ios && pod install && cd ..
npx react-native run-ios

Utilisez RCT_NEW_ARCH_ENABLED=0 pod install si vous avez besoin de l’ancienne architecture.

Android (depuis BrazeProject) :

npx react-native run-android

Débogage et résolution des problèmes

Pendant le développement, activez la journalisation Braze dans la configuration native pour que le SDK écrive dans la console système (Xcode / Android Logcat). Vous pourrez ainsi vérifier l’initialisation, les changements d’utilisateur et la distribution des événements.

  • iOS — Dans la closure configure transmise à BrazeReactInitializer.configure, définissez config.logger.level = .debug (ou .info). Réduisez ou désactivez la journalisation en production pour que les journaux ne soient pas visibles par les utilisateurs.
  • Android — Utilisez la ressource com_braze_logger_initial_log_level dans braze.xml ou définissez l’équivalent sur BrazeConfig.Builder (voir BrazeConfigurationProvider). Avant la publication, utilisez un niveau moins détaillé ou supprimez ce remplacement.

Pour une résolution des problèmes plus approfondie (réseau, session ou comportement des campagnes), consultez le guide du développeur React Native de Braze et la documentation des SDK natifs (Swift · Android).


Ressources supplémentaires

Contact

Pour toute question, contactez le support technique de Braze.

Pour en savoir plus sur le dépôt et consulter des exemples de projets, rendez-vous sur https://github.com/braze-inc/braze-react-native-sdk.

New Stuff!