Zum Inhalt springen

React Native SDK Repository-Leitfaden

Über das Braze React Native SDK

Das Braze React Native SDK verbindet Ihre iOS- und Android-Apps mit Braze: Nutzerprofile, Messaging-Oberflächen, Analytics und Feature-Flags. Es kapselt das native Braze Swift SDK und das Braze Android SDK hinter einer JavaScript-API.

Die Initialisierung erfolgt über JavaScript: Sie richten die native Konfiguration (Push, Logging, Delegates) in den Android-Ressourcen und im iOS-AppDelegate ein und rufen dann Braze.initialize(apiKey, endpoint) aus JavaScript auf, um das SDK zu starten. So haben Sie die volle Kontrolle darüber, wann das SDK initialisiert wird und mit welchen Zugangsdaten. Nach der Initialisierung rufen Sie bei Bedarf weitere SDK-Methoden auf (zum Beispiel changeUser, logCustomEvent).

Was Sie tun können

  • Nutzerverwaltung: Nutzer:innen identifizieren sowie Profilfelder, angepasste Attribute, Aliase und Abo-Gruppen festlegen
  • In-App-Nachrichten: Standard-UI von Braze oder angepasste Verarbeitung über Abonnements und Logging-APIs
  • Content Cards: Standard-Feed-UI oder Karten abrufen und Ihre eigene UI erstellen
  • Banner: Platzierungsbasierte HTML-Banner, einschließlich BrazeBannerView
  • Push-Benachrichtigungen: Berechtigungsabfragen, Token-Registrierung, Payload-Listener (siehe Plattformhinweise unten)
  • Feature-Flags: Aktualisieren, Eigenschaften lesen, Impressionen protokollieren
  • Analytics: Angepasste Events, Käufe, sofortiges Flushen
  • SDK-Steuerung: SDK aktivieren/deaktivieren, lokale Daten löschen, Signaturen für die SDK-Authentifizierung

Voraussetzungen

  • Braze-Konto mit App-API-Schlüssel und SDK-Endpunkt
  • React Native-Entwicklungsumgebung (React Native-Umgebung einrichten)
  • iOS: Xcode, CocoaPods (cd ios && pod install)
  • Android: Android Studio / Gradle; Kotlin-Gradle-Plugin, wie von Ihrem React Native-Template gefordert
  • Push (falls verwendet): Einrichtung von FCM (Android) und APNs (iOS) gemäß der Push-Dokumentation

Informationen dazu, wo Sie Ihre Zugangsdaten im Dashboard finden, erhalten Sie in der Übersicht zur Integration.

Installation

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

Schnellstart

In diesem Abschnitt sehen Sie die minimale Einrichtung, die für die Initialisierung des Braze React Native SDK erforderlich ist.

  1. Installieren Sie das npm-Paket (siehe oben).
  2. Schließen Sie die native Einrichtung für Android und iOS ab (Konfiguration, Berechtigungen und bei Bedarf Push).
  3. Initialisieren Sie das SDK über JavaScript und beginnen Sie mit der Nutzung:
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" });

TypeScript-Typdefinitionen sind im Paket enthalten (src/index.d.ts auf GitHub).

Wenn Sie Braze.initialize erneut mit anderen Zugangsdaten aufrufen, wird die aktuelle Instanz beendet und neu erstellt. So ist eine erneute Initialisierung während einer laufenden Session möglich.


Native Einrichtung

Maßgebliche Quelle: Schritt-für-Schritt-Anleitungen, Änderungen an Gradle/CocoaPods und die vollständige Liste der Android-XML-Schlüssel finden Sie im Braze React Native Entwickler:innen-Leitfaden. Die folgenden Snippets sind minimale Beispiele.

Android

  • Fügen Sie das Kotlin Gradle Plugin in Ihrer Root-Datei build.gradle hinzu, falls Ihr Template es noch nicht enthält (die Versionen hängen von Ihrer React-Native-Version ab).
  • Fügen Sie eine Ressourcendatei braze.xml in res/values mit Ihrer Konfiguration hinzu. Aktivieren Sie die verzögerte Initialisierung, damit das SDK vor dem Start auf Braze.initialize() aus JavaScript wartet. Andere Konfigurationswerte (Push, Session-Timeout usw.) werden weiterhin aus dieser Datei gelesen und bei der Initialisierung angewendet.
  • Stellen Sie grundlegende Berechtigungen wie INTERNET und ACCESS_NETWORK_STATE in AndroidManifest.xml sicher.
  • Schließen Sie für Push die FCM-Integration ab und setzen Sie alle in der Dokumentation beschriebenen Braze-spezifischen Sender-ID- bzw. Registrierungs-Flags.
<?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

Verwenden Sie BrazeReactInitializer.configure in Ihrem AppDelegate, um die native Konfiguration zu registrieren. Die von Ihnen bereitgestellten Closures werden gespeichert und später angewendet, wenn Braze.initialize(apiKey, endpoint) aus JavaScript aufgerufen wird.

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
  }
}
  • configure-Closure: Erhält eine Braze.Configuration und ermöglicht es Ihnen, native Konfigurationseigenschaften festzulegen (Logging, Push, Sessions usw.). Der API-Schlüssel und der Endpunkt werden aus JavaScript bereitgestellt – Sie legen sie hier nicht fest.
  • postInitialization-Closure (optional): Erhält die aktive Braze-Instanz nach ihrer Erstellung, für Einrichtungsschritte, die die Instanz benötigen (z. B. Speichern einer Referenz, Festlegen von Delegates).

Konfigurationsreferenz

In React Native ist die Konfiguration nativ: Android liest res/values/braze.xml, und iOS verwendet Closures, die über BrazeReactInitializer.configure registriert werden. Beide werden angewendet, wenn Braze.initialize(apiKey, endpoint) aus JavaScript aufgerufen wird.

Android (braze.xml)

Standardwerte sind im XML hinterlegt; BrazeConfig.Builder kann sie beim Start überschreiben. Die maßgebliche Liste der Schlüssel und Typen finden Sie im Leitfaden zur Android-SDK-Integration und in BrazeConfigurationProvider (jede Kotlin-Eigenschaft entspricht dokumentierten com_braze_*-Ressourcen).

Häufig verwendete Einträge:

Schlüssel Ressourcentyp Beschreibung
com_braze_enable_delayed_initialization bool Erforderlich. Setzen Sie diesen Wert auf true, damit das SDK auf Braze.initialize() aus JavaScript wartet.
com_braze_api_key string Nicht erforderlich, wenn Sie Braze.initialize() aus JavaScript verwenden (die Zugangsdaten werden aus JS übergeben). Nur für die ältere Native-First-Initialisierung erforderlich.
com_braze_custom_endpoint string Nicht erforderlich, wenn Sie Braze.initialize() aus JavaScript verwenden. Nur für die ältere Native-First-Initialisierung erforderlich.
com_braze_server_target string Optionale Auswahl für Cluster bzw. Umgebung (z. B. für einige interne oder Staging-Builds). Verwenden Sie für die Produktion bevorzugt com_braze_custom_endpoint, sofern Ihre Braze-Integration nichts anderes vorgibt.
com_braze_firebase_cloud_messaging_registration_enabled bool Bei true registriert sich Braze für FCM (typische Push-Einrichtung).
com_braze_firebase_cloud_messaging_sender_id string FCM-Absender-ID, wenn die automatische Registrierung aktiviert ist.
com_braze_handle_push_deep_links_automatically bool Braze öffnet Push-Deeplinks automatisch.
com_braze_trigger_action_minimum_time_interval_seconds integer Mindestanzahl an Sekunden zwischen Trigger-Aktionen für In-App-Nachrichten.
Sonstige verschiedene Weitere hier nicht aufgeführte Schlüssel (Session-Timeout, Geofences, Standort, Standardwerte für Benachrichtigungen, Geräte-Allowlists, verzögerte Initialisierung, SDK-Authentifizierung und mehr). Siehe BrazeConfigurationProvider und den Leitfaden zur Android-SDK-Integration.

iOS (Braze.Configuration)

Legen Sie native Konfigurationseigenschaften in der configure-Closure fest, die an BrazeReactInitializer.configure übergeben wird. Die Closure erhält eine Braze.Configuration-Instanz – API-Schlüssel und Endpunkt werden automatisch aus dem JavaScript-Aufruf Braze.initialize gesetzt. Alle Details: Braze.Configuration und die verschachtelten Typen api, push, logger, location.

Bereich Mitglieder (Auswahl) Hinweise
Zugangsdaten api.key, api.endpoint Werden automatisch aus Braze.initialize(apiKey, endpoint) in JavaScript gesetzt. Legen Sie diese nicht in der configure-Closure fest.
Logging logger.level Ausführliches Logging ist für die Entwicklung gedacht; reduzieren Sie die Ausgabe in der Produktion.
Push push.automation, push.appGroup, … Die Automatisierung vereinfacht die Registrierung; appGroup wird für Push Stories bzw. Erweiterungen benötigt, sofern verwendet.
In-App-Nachrichten triggerMinimumTimeInterval Standardmäßig 30 Sekunden zwischen Triggern.
Sessions sessionTimeout Inaktivitätsdauer bis zu einer neuen Session (siehe Braze-Dokumentation zu Sessions).
Datenschutz/Daten api.trackingPropertyAllowList, devicePropertyAllowList, api.sdkAuthentication Stimmen Sie diese mit dem Privacy Manifest und den Produkteinstellungen zur SDK-Authentifizierung ab.
Netzwerk api.requestPolicy, api.flushInterval Wiederholungsrichtlinie für Anfragen und Flush-Intervall.
Push-Abo optInWhenPushAuthorized Bei true kann das Abo auf „opted-in“ wechseln, nachdem Nutzer:innen Benachrichtigungen autorisiert haben.
IAM + Nutzerwechsel preventInAppMessageDisplayForDifferentUser Verringert falsch zugeordnete IAMs, wenn sich die Nutzer-ID ändert.
Sonstige forwardUniversalLinks, ephemeralEvents, useUUIDAsDeviceId, … Das vollständige Verhalten finden Sie in der Swift-Dokumentation.

Die React-Native-Bridge setzt bei der Initialisierung React-spezifische api.sdkFlavor- bzw. SDK-Metadaten; überschreiben Sie diese nur, wenn die Braze-Dokumentation Sie dazu anweist.


JavaScript / TypeScript API

Der Standard-Export des Pakets ist die Klasse Braze mit statischen Methoden (zum Beispiel Braze.changeUser, Braze.logPurchase). Konstanten wie Braze.Events, Braze.Genders und Braze.NotificationSubscriptionTypes sind an denselben Export angehängt.


Kern-Features

Nutzerverwaltung

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");

Optionale SDK-Authentifizierung: Übergeben Sie eine Signatur als zweites Argument an changeUser oder rufen Sie Braze.setSdkAuthenticationSignature(signature) auf, wenn die Funktion im Dashboard aktiviert ist.

In-App-Nachrichten

  • Wenn Sie die Standard-UI von Braze verwenden, folgen Sie der Dokumentation zu In-App-Nachrichten. In der Regel müssen Sie subscribeToInAppMessage nicht aufrufen, nur um die Standard-UI anzuzeigen.
  • Für eine angepasste Verarbeitung abonnieren Sie mit useBrazeUI: false und protokollieren Sie anschließend Impressionen und Klicks nach Bedarf:
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);

Mit Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, ...) können Sie auf Aktualisierungen warten.

Banner

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" />

Push-Benachrichtigungen

Braze.requestPushPermission({
  alert: true,
  badge: true,
  sound: true,
});
// Token registration is usually handled natively; see docs for your setup.
Braze.registerPushToken(token);
  • getInitialPushPayload: Verwenden Sie diese Methode, wenn die App über eine Benachrichtigung geöffnet wird, um Race-Conditions mit Linking in React Native zu vermeiden. Dafür ist auf jeder Plattform eine native Einrichtung erforderlich.
    • iOS mit Launch-Optionen des App-Delegates: Rufen Sie populateInitialPayloadFromLaunchOptions: auf BrazeReactUtils in application:didFinishLaunchingWithOptions: auf.
    • iOS mit Scene-Lebenszyklus: Rufen Sie populateInitialPayloadFromNotificationResponse: auf BrazeReactUtils in scene:willConnectToSession:options: auf.
    • Android: Rufen Sie BrazeReactUtils.populateInitialPushPayloadFromIntent in MainActivity.onCreate() auf.
  • Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, ...) ist laut den öffentlichen Typdefinitionen nur für Android verfügbar.

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");

Analytics und Käufe

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

Hinweis: logPurchase erwartet den Preis als String (siehe Typdefinitionen).

Datenverwaltung und SDK-Status

changeUser teilt Braze lediglich mit, welcher Nutzer-ID neue Aktivitäten zugeordnet werden sollen. Zwischengespeicherte SDK-Daten auf dem Gerät werden dabei nicht gelöscht. Es gibt keine separate „Logout“-API: Wenn Sie eine klassische Abmeldung benötigen (lokalen Braze-Status löschen, sodass das zwischengespeicherte Profil, die Nachrichten und Token der vorherigen Nutzer:innen auf dieser Installation entfernt werden), verwenden Sie in der Regel wipeData(). Dies ist ein vollständiges lokales Zurücksetzen.

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

wipeData(): Löscht die lokalen Braze-Daten dieser Installation (zwischengespeicherter Nutzer-, Sitzungs- und Kartenstatus, Push-Token-Zuordnung usw.). Verwenden Sie diese Methode für abmeldungsähnliches Verhalten, wenn der Braze-Status der vorherigen Nutzer:innen nicht auf dem Gerät verbleiben darf, sowie für „Meine Daten auf diesem Gerät löschen“, QA-Resets ohne Neuinstallation oder strenge Datenschutz-Abläufe. changeUser allein führt diese Bereinigung nicht durch, sondern legt nur fest, welche Nutzer-ID neue Events erhält. Unter iOS kann das Verhalten von Android abweichen (z. B. im Zusammenspiel mit dem deaktivierten SDK-Status). Lesen Sie die nativen Braze-Dokumentationen, wenn Sie dies in der Produktion einsetzen.

disableSDK(): Stoppt den Betrieb des SDK (keine Erfassung oder Weiterleitung gemäß Konfiguration). Verwenden Sie diese Methode für Opt-out-Schalter von Nutzer:innen, eingeschränkte Modi (Compliance, Kindereinstellungen) oder zum Debugging, ohne die Abhängigkeit zu entfernen.

enableSDK(): Schaltet das SDK nach disableSDK() wieder ein. Unter iOS wird die erneute Aktivierung möglicherweise erst beim nächsten App-Start wirksam. Prüfen Sie dies in der Braze-Dokumentation für Swift/iOS, bevor Sie sich auf eine sofortige Reaktivierung verlassen.


Events

Abonnieren Sie Events mit Braze.addListener(event, callback). Der Aufruf gibt ein Abo-Objekt zurück. Rufen Sie darauf .remove() auf, um das Abhören zu beenden.

Einen Listener einrichten:

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

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

Den Listener entfernen:

subscription.remove();

Speichern Sie in einer React-Komponente das Abo-Objekt und rufen Sie .remove() in Ihrer Bereinigung auf (z. B. im Rückgabewert eines useEffect):

useEffect(() => {
  const sub = Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, (update) => {
    setCards(update.cards);
  });
  return () => sub.remove();
}, []);
Event-Konstante Payload (Zusammenfassung)
Braze.Events.CONTENT_CARDS_UPDATED Neueste Content Cards
Braze.Events.BANNER_CARDS_UPDATED Neueste Banner
Braze.Events.FEATURE_FLAGS_UPDATED Array der Feature-Flags
Braze.Events.IN_APP_MESSAGE_RECEIVED Event für In-App-Nachricht
Braze.Events.SDK_AUTHENTICATION_ERROR Details zum SDK-Authentifizierungsfehler
Braze.Events.PUSH_NOTIFICATION_EVENT Push-Payload (nur Android)

Integrationshinweise

  • Expo: Verwenden Sie das Braze Expo Plugin, um manuelle native Verknüpfungen nach Möglichkeit zu vermeiden.
  • New Architecture / Turbo Modules: Werden in aktuellen Plugin-Versionen unterstützt. Folgen Sie bei einer Migration dem Entwicklerleitfaden und den Beispieleinstellungen für AppDelegate / Gradle.
  • Datenschutz (iOS): Methoden wie updateTrackingPropertyAllowList unterstützen die Konfiguration im Zusammenhang mit dem Privacy Manifest. Weitere Informationen finden Sie unter Swift Privacy Manifest.

- Jest: Mocken Sie native Module von react-native oder das Braze Turbo-Modul. Unit-Tests werden in diesem Repository nicht veröffentlicht.

Versionsunterstützung

Die folgende Tabelle listet die unterstützten React Native-Versionen nach Release des Braze Plugins auf.

Braze Plugin React Native New Architecture
9.0.0+ ≥ 0.71 Ja
6.0.0+ ≥ 0.68 Ja (≥ 0.70.0)
2.0.0+ ≥ 0.68 Ja
≤ 1.41.0 ≤ 0.71 Nein

Beachten Sie außerdem die Anforderungen der nativen SDKs:


Braze Expo-Plugin

Informationen zu Expo-verwalteten Workflows finden Sie im Repository des Braze Expo-Plugins.


Beispiel-App

BrazeProject in diesem Repository ist ein vollständiges Beispiel (Nutzerverwaltung, Content Cards, Feature-Flags, Banner usw.).

cd BrazeProject/
yarn install
npx react-native start

iOS (aus BrazeProject):

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

Verwenden Sie RCT_NEW_ARCH_ENABLED=0 pod install, wenn Sie die Legacy-Architektur benötigen.

Android (aus BrazeProject):

npx react-native run-android

Debugging und Fehlerbehebung

Aktivieren Sie während der Entwicklung das Braze-Logging in der nativen Konfiguration, damit das SDK in die Systemkonsole (Xcode / Android Logcat) schreibt. So können Sie die Initialisierung, Nutzerwechsel und die Zustellung von Events überprüfen.

  • iOS – Setzen Sie in der configure-Closure, die an BrazeReactInitializer.configure übergeben wird, config.logger.level = .debug (oder .info). Reduzieren oder deaktivieren Sie das Logging in der Produktion, damit die Logs für Nutzer:innen nicht sichtbar sind.
  • Android – Verwenden Sie die Ressource com_braze_logger_initial_log_level in braze.xml oder legen Sie die entsprechende Einstellung in BrazeConfig.Builder fest (siehe BrazeConfigurationProvider). Verwenden Sie vor dem Release eine weniger ausführliche Log-Stufe oder entfernen Sie die Überschreibung.

Weitere Informationen zur Fehlerbehebung (Netzwerk-, Session- oder Kampagnenverhalten) finden Sie im Braze React Native Entwicklerhandbuch und in der Dokumentation der nativen SDKs (Swift · Android).


Zusätzliche Ressourcen

Kontakt

Wenn Sie Fragen haben, wenden Sie sich an den technischen Support von Braze.

Details zum Repository und Beispielprojekte finden Sie unter https://github.com/braze-inc/braze-react-native-sdk.

New Stuff!