Guide du dépôt du SDK React Native
À propos du SDK React Native de Braze
Le SDK React Native de Braze connecte vos applications iOS et Android à Braze : profils utilisateurs, canaux de communication, analyses et feature flags. Il encapsule les SDK natifs Braze Swift SDK et Braze Android SDK 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 contrôlez ainsi entièrement le moment où le SDK s’initialise et les identifiants qu’il utilise. Une fois l’initialisation effectuée, appelez les autres méthodes du SDK (par exemple changeUser ou 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
- Messages in-app : utilisez l’interface utilisateur par défaut de Braze ou une gestion personnalisée grâce aux abonnements et aux API de journalisation
- Content Cards : utilisez l’interface utilisateur du flux par défaut, ou récupérez les cartes et créez votre propre interface
- Bannières : bannières HTML basées sur des emplacements, y compris
BrazeBannerView - Notifications push : demandes d’autorisation, enregistrement des jetons, écouteurs de payload (voir les remarques sur les plateformes ci-dessous)
- Feature flags : actualisez-les, lisez leurs propriétés et enregistrez les impressions
- Analyses : événements personnalisés, achats, envoi immédiat des données
- Contrôles du SDK : activez ou désactivez le SDK, effacez les données locales et gérez les 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 de FCM (Android) et des APN (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.
- Installez le package npm (voir ci-dessus).
- Effectuez la configuration native pour Android et iOS (configuration, autorisations, notifications push si nécessaire).
- 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 de réinitialiser le SDK en cours de session.
Configuration native
Source de référence : Les écrans détaillés étape par étape, les modifications Gradle/CocoaPods et la liste complète des clés XML Android se trouvent dans le guide du développeur React Native de Braze. Les extraits de code ci-dessous sont des exemples minimaux.
Android
- Ajoutez le plugin Gradle Kotlin dans votre fichier
build.gradleracine 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.xmldansres/valuesavec 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 que les autorisations de base, telles que
INTERNETetACCESS_NETWORK_STATE, figurent dansAndroidManifest.xml. - Pour les notifications push, effectuez l’intégration FCM et configurez l’ID d’expéditeur ainsi que 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>

** La clé API et l’endpoint ne sont plus définis dans braze.xml : ils sont transmis depuis JavaScript via Braze.initialize(apiKey, endpoint).
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 objetBraze.Configurationet 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’instanceBrazeactive après sa création, pour les configurations qui nécessitent l’instance (par exemple, stocker une référence ou définir des délégués).

** BrazeReactInitializer.configure est une API conçue en priorité pour Swift qui remplace la méthode obsolète BrazeReactBridge.initBraze(_:). Elle résout également un problème de résolution de type Swift avec Braze.Configuration dans le pont Objective-C.
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 couramment utilisées :
| Clé | Type de ressource | Description |
|---|---|---|
com_braze_enable_delayed_initialization |
bool |
Obligatoire. Définissez 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 (les identifiants sont transmis depuis JS). Obligatoire uniquement pour l’initialisation native héritée. |
com_braze_custom_endpoint |
string |
Inutile si vous utilisez Braze.initialize() depuis JavaScript. Obligatoire uniquement pour l’initialisation native héritée. |
com_braze_server_target |
string |
Sélecteur facultatif de cluster ou d’environnement (par exemple pour certains builds internes ou de staging). Privilégiez com_braze_custom_endpoint en production, sauf indication contraire de votre intégration Braze. |
com_braze_firebase_cloud_messaging_registration_enabled |
bool |
Si true, Braze s’enregistre auprès de FCM (configuration push classique). |
com_braze_firebase_cloud_messaging_sender_id |
string |
ID d’expéditeur FCM 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 | variés | Clés supplémentaires non listées 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 tous les détails, 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 destinée au développement ; réduisez le bruit en production. |
| Notifications push | push.automation, push.appGroup, … |
L’automatisation simplifie l’enregistrement ; appGroup est nécessaire pour les Push Stories ou les extensions, le cas échéant. |
| Messages in-app | triggerMinimumTimeInterval |
30 secondes par défaut 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 |
Si true, l’abonnement peut passer à l’état opt-in une fois que l’utilisateur autorise les notifications. |
| Messages in-app et changements d’utilisateur | preventInAppMessageDisplayForDifferentUser |
Limite l’affichage de messages in-app au mauvais utilisateur si 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 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 comme 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 de changeUser, ou appelez Braze.setSdkAuthenticationSignature(signature) lorsque cette fonctionnalité est activée dans le tableau de bord.
Messages in-app
- Avec l’interface utilisateur par défaut de Braze, suivez la documentation sur les messages in-app ; en général, vous n’avez pas besoin d’appeler
subscribeToInAppMessageuniquement 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: à utiliser lorsque l’application s’ouvre depuis une notification, afin d’éviter les conditions de concurrence avecLinkingde React Native. Cette méthode nécessite une configuration native sur chaque plateforme.- iOS, avec les options de lancement de l’app delegate : appelez
populateInitialPayloadFromLaunchOptions:surBrazeReactUtilsdepuisapplication:didFinishLaunchingWithOptions:. - iOS, avec le cycle de vie des scènes : appelez
populateInitialPayloadFromNotificationResponse:surBrazeReactUtilsdepuisscene:willConnectToSession:options:. - Android : appelez
BrazeReactUtils.populateInitialPushPayloadFromIntentdepuisMainActivity.onCreate().
- iOS, avec les options de lancement de l’app delegate : appelez
Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, ...)est réservé à Android d’après 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");
Analyses 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 uniquement à 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 afin 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 mis en cache de l’utilisateur, de la session et des cartes, association du jeton push, etc.). À utiliser 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, ainsi que pour une fonction « supprimer mes données sur cet appareil », des réinitialisations de QA sans réinstallation ou 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 déployez cette fonctionnalité en production.
disableSDK() : arrête le fonctionnement du SDK (aucune collecte ni transmission selon la configuration). À utiliser 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 Braze pour Swift/iOS 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 valeur de retour d’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 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, le câblage natif manuel.
- Nouvelle architecture / Turbo Modules : pris en charge dans les versions récentes du plugin. Si vous effectuez une migration, suivez le guide du développeur ainsi que les exemples de paramètres
AppDelegateet Gradle. - Confidentialité (iOS) : des méthodes telles que
updateTrackingPropertyAllowListprennent 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. Les tests unitaires ne sont pas publiés dans ce dépôt.
Prise en charge des versions

Ce SDK a été testé avec la version 0.88.0 de React Native.
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 Expo de Braze
Pour les workflows gérés par Expo, consultez le dépôt du plugin Expo de Braze.
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 / Logcat Android). Vous pourrez ainsi vérifier l’initialisation, les changements d’utilisateur et la distribution des événements.
- iOS — Dans la closure
configuretransmise àBrazeReactInitializer.configure, définissezconfig.logger.level = .debug(ou.info). Réduisez ou désactivez ce niveau en production pour que les logs ne soient pas visibles par les utilisateurs. - Android — Utilisez la ressource
com_braze_logger_initial_log_leveldansbraze.xmlou définissez l’équivalent surBrazeConfig.Builder(voir BrazeConfigurationProvider). Utilisez un niveau moins détaillé ou supprimez ce paramètre avant la publication.
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
- Guide du développeur Braze — React Native
- Notifications push — React Native
- Dépôt GitHub
- Package npm
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.