Zum Inhalt springen

Leitfaden zum Web SDK Repository

Über das Braze Web SDK

Mit dem Braze Web SDK können Sie die Customer-Engagement-Plattform von Braze direkt in Ihre Webanwendungen integrieren. Das SDK ist mit TypeScript entwickelt und für moderne Webentwicklung konzipiert. Es bietet umfassende Tools für Nutzerverwaltung, Messaging, Analytics und Feature-Flags.

Was Sie tun können

  • Nutzerverwaltung: Erfassen und verwalten Sie Identitäten, Attribute und Verhalten von Nutzer:innen in Ihrer gesamten Webanwendung.
  • In-App-Messaging: Zeigen Sie Nutzer:innen gezielte Nachrichten und Benachrichtigungen an, während sie Ihre Website aktiv nutzen.
  • Content Cards: Zeigen Sie personalisierte Content-Feeds und Aktionskarten an, die sich in Realtime aktualisieren.
  • Banner: Zeigen Sie Banner-Nachrichten an bestimmten Platzierungen auf Ihrer Website an.
  • Push-Benachrichtigungen: Senden Sie Web-Push-Benachrichtigungen, um Nutzer:innen auch dann anzusprechen, wenn sie nicht auf Ihrer Website sind.
  • Feature-Flags: Steuern Sie Feature-Rollouts und A/B-Tests mit serverseitiger Verwaltung von Feature-Flags.
  • Analytics: Tracken Sie angepasste Events, Nutzerinteraktionen und Conversion-Metriken.
  • Sitzungsverwaltung: Überwachen Sie Sitzungen und Engagement-Muster von Nutzer:innen.

Ob Sie eine Single-Page-Anwendung, eine E-Commerce-Website oder eine Content-Plattform entwickeln: Das Braze Web SDK bietet Ihnen die Tools, die Sie brauchen, um personalisierte und ansprechende Nutzererlebnisse zu schaffen, die Wachstum und Bindung fördern.

Voraussetzungen

Bevor Sie das Braze Web SDK integrieren, benötigen Sie Folgendes:

  • Braze-Konto: Ein Braze-Konto mit API-Zugriff
  • API-Schlüssel: Der API-Schlüssel Ihrer App aus dem Braze-Dashboard
  • SDK-Endpunkt: Die URL Ihres Braze-SDK-Endpunkts (z. B. sdk.iad-01.braze.com)

Zugangsdaten abrufen

  1. API-Schlüssel: Im Braze-Dashboard unter Einstellungen → API-Schlüssel
  2. SDK-Endpunkt: Unter Einstellungen → SDK-Authentifizierung → Endpunkte
  3. Service Worker: Erforderlich für Push-Benachrichtigungen (siehe Abschnitt „Push-Benachrichtigungen“)

Installation

npm install --save @braze/web-sdk
# or, using yarn:
# yarn add @braze/web-sdk

Schnellstart

Das folgende Snippet zeigt die Mindestkonfiguration, die zur Initialisierung des Braze Web SDK erforderlich ist.

import * as braze from "@braze/web-sdk";

// Initialize the SDK
braze.initialize('YOUR-API-KEY-HERE', {
    baseUrl: "YOUR-SDK-ENDPOINT-HERE",
});

braze.changeUser('Jane Doe');

Konfigurationsreferenz

Initialisierungsoptionen

Die Funktion initialize akzeptiert ein Optionsobjekt mit den folgenden Eigenschaften:

Option Typ Standard Beschreibung
baseUrl string Erforderlich Diese Option ist erforderlich, um das Braze Web SDK so zu konfigurieren, dass es den passenden Endpunkt für Ihre Integration verwendet – zum Beispiel: braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'sdk.iad-03.braze.com' })
enableLogging boolean false Setzen Sie diese Option auf true, um die Protokollierung standardmäßig zu aktivieren. Beachten Sie, dass Braze dann in die JavaScript-Konsole protokolliert, die für alle Nutzer:innen sichtbar ist! Sie sollten diese Option entfernen oder mit setLogger einen alternativen Logger bereitstellen, bevor Sie Ihre Seite in der Produktion veröffentlichen.
allowUserSuppliedJavascript boolean false Standardmäßig erlaubt das Braze Web SDK keine von Nutzer:innen bereitgestellten JavaScript-Klickaktionen und aktiviert keine HTML-In-App-Nachrichten und Banner, da diese es Nutzer:innen des Braze-Dashboards ermöglichen, JavaScript auf Ihrer Website auszuführen. Um anzugeben, dass Sie den Nutzer:innen des Braze-Dashboards vertrauen, keine schädlichen JavaScript-Klickaktionen zu schreiben, setzen Sie diese Eigenschaft auf true.
doNotLoadFontAwesome boolean false Braze verwendet Font Awesome für Icons in In-App-Nachrichten. Standardmäßig lädt Braze FontAwesome 4.7.0 automatisch über das FontAwesome-CDN. Um dieses Verhalten zu deaktivieren (z. B. weil Ihre Website eine angepasste Version von FontAwesome verwendet), setzen Sie diese Option auf true. Beachten Sie, dass Sie in diesem Fall selbst dafür verantwortlich sind, dass FontAwesome auf Ihrer Website geladen wird – andernfalls werden In-App-Nachrichten möglicherweise nicht korrekt dargestellt.
inAppMessageZIndex number 999999 Standardmäßig zeigt das Braze SDK In-App Messages mit einem z-index von 999999 an. Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben.
sessionTimeoutInSeconds number 30 Standardmäßig läuft eine Sitzung nach 30 Sekunden Inaktivität ab. Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben.
deviceId string Automatisch generiert Standardmäßig weist Braze eine zufällige GUID als Geräte-ID zu. Geben Sie einen Wert für diese Konfigurationsoption an, um diesen Standard mit einem eigenen Wert zu überschreiben.
appVersion string undefined Wenn Sie einen Wert für diese Option angeben, werden die an Braze gesendeten Nutzer-Events mit der angegebenen Version verknüpft, die zur Segmentierung von Nutzer:innen verwendet werden kann.
appVersionNumber string undefined Ein numerischer Wert für die App-Version, der zur Segmentierung von Nutzer:innen verwendet werden kann. Dieser Wert muss mit vier Feldern gesendet werden, etwa „1.2.3.4“, andernfalls wird er ignoriert. Hinweis: appVersion muss ebenfalls gesetzt sein, entweder mit demselben Wert oder einem eindeutigen Namen für diese Version.
contentSecurityNonce string undefined Wenn Sie einen Wert für diese Option angeben, fügt das Braze SDK die Nonce allen vom SDK erstellten <script>- und <style>-Elementen hinzu. So kann das Braze SDK mit der Content Security Policy Ihrer Website zusammenarbeiten. Beachten Sie, dass Sie zusätzlich zum Setzen dieser Nonce möglicherweise auch das Laden von FontAwesome erlauben müssen. Dazu fügen Sie entweder use.fontawesome.com der Allowlist Ihrer Content Security Policy hinzu oder verwenden die Option doNotLoadFontAwesome und laden FontAwesome manuell.
noCookies boolean false Standardmäßig verwendet das Braze Web SDK Cookies. Um die Verwendung von Cookies zu deaktivieren, setzen Sie diese Option auf true. Beachten Sie, dass die Deaktivierung von Cookies die Fähigkeit des SDK beeinträchtigen kann, die Identitäten von Nutzer:innen zwischen Sitzungen zu speichern.
allowCrawlerActivity boolean false Standardmäßig ignoriert das Braze Web SDK anhand des User-Agent-Strings Aktivitäten bekannter Spider oder Web-Crawler, etwa von Google. Das spart Datenpunkte, macht Analytics genauer und kann das Page-Ranking verbessern. Wenn Braze stattdessen Aktivitäten dieser Crawler protokollieren soll, können Sie diese Option auf true setzen.
disablePushTokenMaintenance boolean false Standardmäßig synchronisieren Nutzer:innen, die bereits eine Web-Push-Berechtigung erteilt haben (z. B. über requestPushPermission oder über einen früheren Push-Anbieter), ihr Push-Token bei einer neuen Sitzung automatisch mit dem Braze-Backend, um die Zustellbarkeit sicherzustellen. Um dieses Verhalten zu deaktivieren, setzen Sie diese Option auf true.
enableSdkAuthentication boolean false Setzen Sie diese Option auf true, um das Feature SDK-Authentifizierung zu aktivieren. Weitere Informationen zur SDK-Authentifizierung finden Sie in unserer Produktdokumentation.
manageServiceWorkerExternally boolean false Standardmäßig verwaltet das Braze Web SDK einen eigenen Service Worker für Push-Benachrichtigungen. Wenn Sie in Ihrer Anwendung bereits einen Service Worker verwalten und die Funktionen des Braze Service Workers darin integrieren möchten, setzen Sie diese Option auf true und fügen Sie den Code des Braze Service Workers in Ihre Service-Worker-Datei ein.
minimumIntervalBetweenTriggerActionsInSeconds number 30 Standardmäßig können Trigger-Aktionen (z. B. das Anzeigen einer In-App-Nachricht) höchstens einmal alle 30 Sekunden pro Nutzer:in ausgelöst werden. Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben.
serviceWorkerLocation string undefined Standardmäßig sucht das Braze Web SDK seine Service-Worker-Datei im Stammverzeichnis Ihrer Domain. Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben und einen angepassten Speicherort für die Service-Worker-Datei festzulegen.
safariWebsitePushId string undefined Erforderlich für Safari-Push-Benachrichtigungen. Diesen Wert finden Sie in Ihrem Apple-Developer-Konto. Weitere Informationen zur Einrichtung von Safari-Push-Benachrichtigungen finden Sie in unserer Produktdokumentation.
localization string undefined Wenn Sie einen Wert für diese Option angeben, versucht das Braze SDK, In-App-Nachrichten und Content-Cards in dieser Sprache anzuzeigen.
openInAppMessagesInNewTab boolean false Standardmäßig werden Links in In-App-Nachrichten im selben Tab geöffnet. Setzen Sie diese Option auf true, damit sie stattdessen in einem neuen Tab geöffnet werden.
openCardsInNewTab boolean false Standardmäßig werden Links in Content-Cards im selben Tab geöffnet. Setzen Sie diese Option auf true, damit sie stattdessen in einem neuen Tab geöffnet werden.
requireExplicitInAppMessageDismissal boolean false Standardmäßig lassen sich In-App-Nachrichten schließen, indem Nutzer:innen außerhalb der Nachricht klicken oder die Escape-Taste drücken. Setzen Sie diese Option auf true, damit Nutzer:innen zum Schließen der Nachricht explizit auf einen Schließen-Button oder einen Aktions-Button klicken müssen.
devicePropertyAllowlist string[] undefined Standardmäßig erkennt und erfasst das Braze SDK automatisch alle Geräteeigenschaften in DeviceProperties. Um dieses Verhalten zu überschreiben, geben Sie ein Array von DeviceProperties an. Um das Senden sämtlicher Eigenschaften an die Braze-Server zu deaktivieren, geben Sie ein leeres Array an. Beachten Sie, dass ohne bestimmte Eigenschaften nicht alle Features ordnungsgemäß funktionieren. Ohne die Zeitzone funktioniert beispielsweise die Zustellung nach Ortszeit nicht.
serviceWorkerScope string undefined Standardmäßig registriert das Braze Web SDK seinen Service Worker mit dem Standard-Scope (dem Verzeichnis des Service Workers). Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben und einen angepassten Scope für den Service Worker festzulegen.

Kern-Features

Initialisierung und Einrichtung

Grundlegende Initialisierung

import * as braze from "@braze/web-sdk";

// Initialize the SDK
braze.initialize('YOUR-API-KEY-HERE', {
    baseUrl: 'YOUR-SDK-ENDPOINT-HERE',
    enableLogging: true // Remove in production
});

// Start a session
braze.openSession();

Erweiterte Initialisierungsoptionen

import * as braze from "@braze/web-sdk";

braze.initialize('YOUR-API-KEY-HERE', {
    baseUrl: 'YOUR-SDK-ENDPOINT-HERE',
    enableLogging: true,
    allowUserSuppliedJavascript: true,
    doNotLoadFontAwesome: false,
    inAppMessageZIndex: 999999,
    sessionTimeoutInSeconds: 30,
    deviceId: 'custom-device-id',
    appVersion: '1.0.0',
    contentSecurityNonce: 'your-nonce-here'
});

Nutzer:innenverwaltung

Nutzer:in wechseln

import { changeUser } from "@braze/web-sdk";

// Change to a new user
changeUser('user-123');

Nutzerattribute festlegen

import { getUser } from "@braze/web-sdk";

const user = getUser();
if (user) {
    user.setEmail('[email protected]');
    user.setFirstName('John');
    user.setLastName('Doe');
    user.setCustomUserAttribute('subscription_tier', 'premium');
    user.setCustomUserAttribute('last_login', new Date());
}

Nutzerstandort festlegen

import { getUser } from "@braze/web-sdk";

const user = getUser();
if (user) {
    user.setCountry('US');
    user.setHomeCity('San Francisco');
    user.setLanguage('en');
    user.setCustomLocationAttribute('latitude', 37.7749);
    user.setCustomLocationAttribute('longitude', -122.4194);
}

Nutzer-Aliasse und Abo-Gruppen

import { getUser } from "@braze/web-sdk";

const user = getUser();
if (user) {
    // Add alias
    user.addAlias('external_id', '12345');

    // Add to subscription group
    user.addToSubscriptionGroup('newsletter_subscribers');

    // Remove from subscription group
    user.removeFromSubscriptionGroup('old_subscribers');
}

Nutzer:in abmelden

import { wipeData } from "@braze/web-sdk";

// There is no explicit method to logout. To "forget" the current users entirely, use wipeData().
// This is a complete data wipe (use with caution, this wipes things such as device ID)
wipeData();

In-App Messages

Automatische Anzeige

import { automaticallyShowInAppMessages } from "@braze/web-sdk";

// Automatically show in-app messages
automaticallyShowInAppMessages();

Manuelle Anzeige

import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";

// Subscribe to in-app messages
subscribeToInAppMessage((inAppMessage) => {
    // Show the message
    showInAppMessage(inAppMessage);
});

Angepasste Verarbeitung von In-App-Nachrichten

import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";

subscribeToInAppMessage((inAppMessage) => {
    // Custom logic before showing
    if (inAppMessage.getExtras()['priority'] === 'high') {
        showInAppMessage(inAppMessage);
    }
});

Interaktionen mit In-App-Nachrichten protokollieren

import {
    logInAppMessageClick,
    logInAppMessageImpression,
    logInAppMessageButtonClick
} from "@braze/web-sdk";

// Log when user sees the message
logInAppMessageImpression(inAppMessage);

// Log when user clicks the message
logInAppMessageClick(inAppMessage);

// Log when user clicks a button in the message
logInAppMessageButtonClick(inAppMessage, button);

Angepasste HTML-In-App-Nachrichten

import { subscribeToInAppMessage, logInAppMessageImpression, logInAppMessageClick } from "@braze/web-sdk";

// Don't call automaticallyShowInAppMessages() when using custom rendering
// braze.automaticallyShowInAppMessages(); // Comment this out

subscribeToInAppMessage((inAppMessage) => {
    // Extract message data
    const messageData = {
        title: inAppMessage.getMessage(),
        body: inAppMessage.getBody(),
        imageUrl: inAppMessage.getImageUrl(),
        buttons: inAppMessage.getButtons(),
        deepLink: inAppMessage.getExtras()['deep_link_url']
    };

    // Define your own HTML structure, using messageData
    const customHTML = ` <!-- Add your custom styling and structure -->`;

    /* Render the In-App Message here */

    // Here we naively log an impression once the message is rendered.
    // Be precise about exactly when you want to log an impression (ie. only the first time it enters the view port).
    logInAppMessageImpression(inAppMessage);
});

// Handle button clicks and deep linking
const handleButtonClick = (button, inAppMessage) => {
    logInAppMessageClick(inAppMessage);
    // Handle additional click actions (ie. deep linking)
};

Content Cards

Content Cards anzeigen

import { showContentCards } from "@braze/web-sdk";

// Show content cards in default location
showContentCards();

// Show in specific container
const container = document.getElementById('content-cards-container');
showContentCards(container);

Updates der Content Cards abonnieren

import { subscribeToContentCardsUpdates } from "@braze/web-sdk";

subscribeToContentCardsUpdates((cards) => {
    console.log('Content cards updated:', cards);
    // Display cards or update UI
});

Interaktionen mit Content-Cards protokollieren

import {
    logContentCardClick,
    logContentCardImpressions,
    logCardDismissal
} from "@braze/web-sdk";

// Log card impressions
logContentCardImpressions(cards);

// Log card clicks
logContentCardClick(card);

// Log card dismissals
logCardDismissal(card);

Content Cards filtern

import { showContentCards } from "@braze/web-sdk";

// Show only pinned cards
// You can also provide a parent element instead of null
showContentCards(null, (cards) => {
    return cards.filter(card => card.getIsPinned());
});

Aktualisierung der Content Cards anfordern

import { requestContentCardsRefresh } from "@braze/web-sdk";

requestContentCardsRefresh(
    () => console.log('Content cards refreshed'),
    () => console.log('Failed to refresh content cards')
);

Angepasste Content Cards

import { subscribeToContentCardsUpdates, logContentCardClick, logContentCardImpressions, requestContentCardsRefresh } from "@braze/web-sdk";

// State for impression de-duping
const loggedImpressions = new Set();
const idToCard = new Map();

subscribeToContentCardsUpdates((cards) => {
    // Build cards one by one
    cards.getCards().forEach(card => {
        // Skip control cards
        if (card.getIsControl()) return;

        // Extract card data
        const cardData = {
            id: card.getId(),
            title: card.getTitle(),
            description: card.getDescription(),
            imageUrl: card.getImageUrl(),
            url: card.getUrl(),
            extras: card.getExtras()
        };

        // Define your own HTML structure, using cardData
        const customHTML = ` <!-- Add your custom styling and structure -->`;

        /* Render each card here */

        // Basic observer for impression logging.
        // Be precise about exactly when you want to log an impression (ie. only the first time it enters the view port).
        const observer = new IntersectionObserver((entries) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    logContentCardImpressions([card]);
                }
            });
        });

        // Observe card element when rendered
        // observer.observe(cardElement);
    });
});

// Handle card clicks
const handleCardClick = (card) => {
    logContentCardClick(card);
    // Handle additional click actions (ie. navigation)
};

Push-Benachrichtigungen

Push-Berechtigung anfordern

import { requestPushPermission } from "@braze/web-sdk";

requestPushPermission(
    () => console.log('Push permission granted'),
    () => console.log('Push permission denied')
);

Push-Unterstützung prüfen

import { isPushSupported, isPushPermissionGranted } from "@braze/web-sdk";

if (isPushSupported()) {
    if (isPushPermissionGranted()) {
        console.log('Push notifications are enabled');
    } else {
        console.log('Push permission not granted');
    }
}

Push-Registrierung aufheben

import { unregisterPush } from "@braze/web-sdk";

unregisterPush(
    () => console.log('Successfully unregistered'),
    () => console.log('Failed to unregister')
);

Feature-Flags

Feature-Flag abrufen

import { getFeatureFlag } from "@braze/web-sdk";

const featureFlag = getFeatureFlag('new_checkout_flow');
if (featureFlag) {
    const isEnabled = featureFlag.getBooleanProperty('enabled', false);
    const rolloutPercentage = featureFlag.getNumberProperty('rollout_percentage', 0);

    if (isEnabled) {
        // Enable new checkout flow
    }
}

Feature-Flag-Updates abonnieren

import { subscribeToFeatureFlagsUpdates } from "@braze/web-sdk";

subscribeToFeatureFlagsUpdates((featureFlags) => {
    featureFlags.forEach(flag => {
        console.log(`Feature flag ${flag.getId()}: ${flag.getBooleanProperty('enabled')}`);
    });
});

Feature-Flag-Impressionen protokollieren

import { logFeatureFlagImpression } from "@braze/web-sdk";

const featureFlag = getFeatureFlag('new_feature');
if (featureFlag) {
    logFeatureFlagImpression(featureFlag);
}

Aktualisierung der Feature-Flags anfordern

import { refreshFeatureFlags } from "@braze/web-sdk";

refreshFeatureFlags(
    () => console.log('Feature flags refreshed'),
    () => console.log('Failed to refresh feature flags')
);

Banner

Banner abrufen und anzeigen

import { getBanner, insertBanner } from "@braze/web-sdk";

const banner = getBanner('homepage_banner');
if (banner) {
    // Insert banner into specific element
    const container = document.getElementById('banner-container');
    insertBanner(banner, container);
}

Banner-Updates abonnieren

Der Subscriber erhält den In-Memory-Banner-Cache des SDK. Ein einzelnes Update kann Platzierungen aus früheren Aktualisierungen enthalten – nicht nur die Platzierungs-IDs aus dem letzten Aufruf von requestBannersRefresh.

import { insertBanner, subscribeToBannersUpdates } from "@braze/web-sdk";

subscribeToBannersUpdates((banners) => {
    Object.entries(banners).forEach(([placementId, banner]) => {
        if (banner) {
            console.log(`Banner for ${placementId}:`, banner);

            // Insert banner into specific element
            const container = document.getElementById(`banner-container-${placementId}`);
            insertBanner(banner, container);
        }
    });
});

Banner in einer angepassten UI ausblenden

import { dismissBanner, getBanner, subscribeToBannersUpdates } from "@braze/web-sdk";

subscribeToBannersUpdates((banners) => {
    const banner = getBanner("homepage_banner");
    const container = document.getElementById("custom-banner-container");
    if (!container) {
        return;
    }

    if (!banner) {
        container.replaceChildren();
        return;
    }

    banner.subscribeToDismissedEvent(() => {
        console.log("Dismissed banner:", banner);
    });

    const closeButton = document.createElement("button");
    closeButton.textContent = "Close";
    closeButton.addEventListener("click", () => {
        dismissBanner(banner);
    });

    // Render your custom UI here and include the close button.
});

Wenn Sie dismissBanner(banner) aufrufen, verwaltet das SDK den Ausblendestatus des Banners, entfernt das Banner aus den aktiven Banner-Updates, benachrichtigt die für das Dismissed-Event des Banners registrierten Subscriber und synchronisiert das Ausblenden mit Braze. Angepasste UIs sollten subscribeToBannersUpdates verwenden, um auf das Entfernen des ausgeblendeten Banners zu reagieren, anstatt dismissBanner nur als lokale UI-Änderung oder nur als Methode zur Analytics-Protokollierung zu behandeln.

Banner-Aktualisierung anfordern

requestBannersRefresh() führt die Ergebnisse mit dem vorhandenen Banner-Cache zusammen. Nur die von Ihnen angeforderten Platzierungs-IDs werden hinzugefügt, aktualisiert oder entfernt. Zwischengespeicherte Banner für andere Platzierungen bleiben im Cache und laufen zu ihrem ursprünglichen Ablaufzeitpunkt ab. Wenn der Server für eine angeforderte Platzierung kein Banner zurückgibt, wird diese Platzierung aus dem Cache entfernt.

import { requestBannersRefresh } from "@braze/web-sdk";

requestBannersRefresh(
    ["placement_1", "placement_2"],
    () => console.log('Banners refreshed'),
    () => console.log('Failed to refresh banners')
);

Analytics und Events

Angepasste Events protokollieren

import { logCustomEvent } from "@braze/web-sdk";

// Simple event
logCustomEvent('button_clicked');

// Event with properties
logCustomEvent('purchase', {
    product_id: '123',
    price: 29.99,
    currency: 'USD'
});

Käufe protokollieren

import { logPurchase } from "@braze/web-sdk";

logPurchase('product-123', 29.99, 'USD', 1, {
    category: 'electronics',
    brand: 'Apple'
});

Sofortiges Senden der Daten anfordern

import { requestImmediateDataFlush } from "@braze/web-sdk";

// Force immediate data send
requestImmediateDataFlush();

Sitzungsverwaltung

Sitzung öffnen

import { openSession } from "@braze/web-sdk";

// Start a new session
openSession();

SDK-Status prüfen

import { isInitialized, isDisabled } from "@braze/web-sdk";

if (isInitialized()) {
    console.log('SDK is initialized');

    if (isDisabled()) {
        console.log('SDK is disabled');
    }
}

SDK aktivieren/deaktivieren

import { enableSDK, disableSDK } from "@braze/web-sdk";

// Disable SDK
disableSDK();

// Re-enable SDK
enableSDK();

Datenverwaltung

Daten löschen

import { wipeData } from "@braze/web-sdk";

// Remove all locally stored data
wipeData();

SDK zerstören

import { destroy } from "@braze/web-sdk";

// Clean up SDK resources
destroy();

Geräte-ID abrufen

import { getDeviceId } from "@braze/web-sdk";

const deviceId = getDeviceId();
console.log('Device ID:', deviceId);

SDK-Authentifizierung

import { setSdkAuthenticationSignature } from "@braze/web-sdk";

// Set authentication signature
setSdkAuthenticationSignature('your-signature-here');

Authentifizierungsfehler abonnieren

import { subscribeToSdkAuthenticationFailures } from "@braze/web-sdk";

subscribeToSdkAuthenticationFailures((error) => {
    console.log('Authentication failed:', error);
    // Provide new signature
    setSdkAuthenticationSignature('new-signature');
});

Integrationsmuster

SSR-Frameworks

Wenn Sie ein Server-Side-Rendering-Framework (SSR) wie Next.js verwenden, können Fehler auftreten, da das SDK für die Ausführung in einer Browser-Umgebung vorgesehen ist. Sie können diese Probleme beheben, indem Sie das SDK dynamisch importieren.

Dabei können Sie die Vorteile von Tree-Shaking beibehalten, indem Sie die benötigten Teile des SDK in eine separate Datei exportieren und diese Datei anschließend dynamisch in Ihre Komponente importieren.

// MyComponent/braze-exports.js
// export the parts of the SDK you need here
export { initialize, openSession } from "@braze/web-sdk";

// MyComponent/MyComponent.js
// import the functions you need from the braze exports file
useEffect(() => {
    import("./braze-exports.js").then(({ initialize, openSession }) => {
        initialize("YOUR-API-KEY-HERE", {
            baseUrl: "YOUR-SDK-ENDPOINT",
            enableLogging: true,
        });
        openSession();
    });
}, []);

Wenn Sie Ihre App mit webpack bündeln, können Sie alternativ dessen Magic Comments nutzen, um nur die benötigten Teile des SDK dynamisch zu importieren.

// MyComponent.js
useEffect(() => {
    import(
        /* webpackExports: ["initialize", "openSession"] */
        "@braze/web-sdk"
    ).then(({ initialize, openSession }) => {
        initialize("YOUR-API-KEY-HERE", {
            baseUrl: "YOUR-SDK-ENDPOINT",
            enableLogging: true,
        });
        openSession();
    });
}, []);

Vite

Wenn Sie Vite verwenden und eine Warnung zu zirkulären Abhängigkeiten oder Uncaught TypeError: Class extends value undefined is not a constructor or null sehen, müssen Sie das Braze SDK möglicherweise von der Abhängigkeitserkennung ausschließen:

export default {
    optimizeDeps: {
        exclude: ['@braze/web-sdk']
    }
}

Jest-Framework

Bei der Verwendung von Jest kann ein Fehler ähnlich wie SyntaxError: Unexpected token 'export' auftreten. Um dies zu beheben, passen Sie Ihre Konfiguration in package.json so an, dass das Braze SDK ignoriert wird:

{
  "jest": {
    "transformIgnorePatterns": [
      "/node_modules/(?!@braze)"
    ]
  }
}

Asynchronous Module Definition (AMD)

AMD-Unterstützung deaktivieren

Wenn Ihre Website RequireJS oder einen anderen AMD-Modul-Loader verwendet, Sie das Braze Web SDK aber lieber über das CDN laden möchten, können Sie eine Version der Bibliothek laden, die keine AMD-Unterstützung enthält. Diese Version der Bibliothek kann von folgendem CDN-Speicherort geladen werden: https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js

Modul-Loader

Wenn Sie RequireJS oder andere AMD-Modul-Loader verwenden, empfehlen wir, eine Kopie unserer Bibliothek selbst zu hosten und sie wie andere Ressourcen zu referenzieren:

require(['path/to/braze.min.js'], function(braze) {
  braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT' });
  braze.automaticallyShowInAppMessages();
  braze.openSession();
});

Accelerated Mobile Pages (AMP)

Für die AMP-Integration müssen Sie Folgendes tun:

  1. AMP-Web-Push-Skript einbinden: Fügen Sie das asynchrone Script-Tag in Ihren Head ein.
  2. Abo-Widgets hinzufügen: Fügen Sie Widgets hinzu, mit denen sich Nutzer:innen an- und abmelden können.
  3. Hilfsdateien hinzufügen: Binden Sie helper-iframe.html und permission-dialog.html ein.
  4. Service-Worker erstellen: Fügen Sie die Braze-Service-Worker-Datei hinzu.
  5. AMP-Web-Push-Element konfigurieren: Fügen Sie das Element amp-web-push mit Ihrem API-Schlüssel und Ihrer Basis-URL als Abfrageparameter hinzu.

Ausführliche Anweisungen zur AMP-Integration finden Sie im Braze-Entwicklerleitfaden.

Electron

Electron unterstützt Web-Push-Benachrichtigungen offiziell nicht (siehe dieses GitHub-Issue). Es gibt weitere Open-Source-Workarounds, die Sie ausprobieren können, die jedoch nicht von Braze getestet wurden.

CDN-Integration

  • Laden des Skripts: Initialisieren Sie das SDK, nachdem das Script-Tag geladen wurde, indem Sie den Initialisierungscode nach dem Script-Tag platzieren, oder verwenden Sie den Event-Handler onload des Script-Tags.
  • Globaler Zugriff: Wenn das SDK über das CDN geladen wird, ist es als window.braze verfügbar.

Service-Worker (Push-Benachrichtigungen)

  • Erforderlich: Der Braze-Service-Worker muss eingebunden sein, damit Push-Benachrichtigungen funktionieren.
  • Standardregistrierung: Standardmäßig registriert und verwaltet das Braze Web SDK Ihren Service-Worker automatisch, wenn requestPushPermission() aufgerufen wird, sowie zu Beginn jeder neuen Sitzung für Nutzer:innen, die bereits die Push-Berechtigung erteilt haben. Sie müssen dennoch eine Service-Worker-Datei mit dem Braze-Service-Worker-Code am erwarteten Speicherort hosten.
  • Eigenen Service-Worker verwalten: Wenn Sie in Ihrer Anwendung bereits einen Service-Worker verwalten, setzen Sie die Initialisierungsoption manageServiceWorkerExternally auf true, fügen Sie den Braze-Service-Worker-Code in Ihre Service-Worker-Datei ein und registrieren Sie ihn selbst mit navigator.serviceWorker.register().
  • Push-Berechtigungen: Rufen Sie braze.requestPushPermission() als Reaktion auf Nutzerinteraktionen auf (z. B. Button-Klicks). Verwenden Sie Soft-Push-Prompts (angepasste UI), bevor Sie die Browser-Berechtigung anfordern.

Tag-Manager

Tealium iQ

Tealium iQ bietet eine einfache, sofort einsatzbereite Braze-Integration. Um die Integration zu konfigurieren, suchen Sie in der Tealium-Tag-Management-Oberfläche nach Braze und geben Sie den Web-SDK-API-Schlüssel aus Ihrem Dashboard an. Weitere Details oder ausführliche Unterstützung bei der Tealium-Konfiguration finden Sie in unserer Integrationsdokumentation, oder wenden Sie sich an Ihren Tealium Account Manager.

Google Tag Manager

Das Web SDK kann über ein angepasstes HTML-Tag in Ihrem Google-Tag-Manager-Container initialisiert und aufgerufen werden. Ein Beispiel für das Senden von Events an Braze über GTM finden Sie in unserer Google-Tag-Manager-Beispiel-App. Weitere Details finden Sie in unserer Integrationsdokumentation.

Andere Tag-Manager

Braze ist möglicherweise auch mit anderen Tag-Management-Lösungen kompatibel, wenn Sie unsere Integrationsanweisungen innerhalb eines angepassten HTML-Tags befolgen. Wenden Sie sich an Ihre Braze-Vertretung, wenn Sie Hilfe bei der Bewertung dieser Lösungen benötigen.


Bibliotheken

In der folgenden Tabelle werden die verfügbaren Distributionen des Braze Web SDK beschrieben.

Name Beschreibung npm CDN-URL
Full Vollständiges SDK mit UI. Bei Verwendung der npm-Version entfernen JavaScript-Bundler ungenutzten Code, einschließlich UI-Code. @braze/web-sdk https://js.appboycdn.com/web-sdk/7.1/braze.min.js
Core Enthält das SDK ohne UI. Wenn Sie diese Version des SDK verwenden, implementieren Sie Ihre eigene UI für In-App Messages und Content Cards. Verwenden Sie für die meisten Integrationen die vollständige Bibliothek, da sie über CSS anpassbare UI-Elemente bietet. Nicht verfügbar https://js.appboycdn.com/web-sdk/7.1/braze.core.min.js
No-AMD Enthält das vollständige SDK ohne AMD-Unterstützung. Dies ist nützlich, wenn Ihre Website RequireJS oder einen anderen AMD-Modul-Loader verwendet, Sie das SDK aber lieber über das CDN laden möchten. Nicht verfügbar https://js.appboycdn.com/web-sdk/7.1/braze.no-amd.min.js

Unterstützte Browser

  • Moderne Chromium-basierte Browser (Chrome, Edge, Opera)
  • Firefox
  • Safari

Debugging und Fehlerbehebung

Übergeben Sie die Option enableLogging: true an die Initialisierungsfunktion (braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT', enableLogging: true });), damit Braze in die JavaScript-Konsole protokolliert. Das ist bei der Entwicklung hilfreich, ist aber für alle Nutzer:innen sichtbar. Entfernen Sie diese Option daher oder stellen Sie einen alternativen Logger bereit, bevor Sie Ihre Seite in der Produktion veröffentlichen.

Font Awesome

Braze verwendet Font Awesome 4.7.0 für In-App-Nachricht-Icons. Um das Laden von Font Awesome zu deaktivieren, verwenden Sie die Initialisierungsoption doNotLoadFontAwesome. Durchsuchen Sie den Spickzettel, um verfügbare Icons zu finden.

Zusätzliche Ressourcen

Kontakt

Bei Fragen wenden Sie sich bitte an den technischen Support von Braze.

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

New Stuff!