Diese Seite wurde automatisch übersetzt und kann Ungenauigkeiten enthalten. Um einen Übersetzungsfehler zu melden, nutzen Sie das Feedback unten im Inhaltsverzeichnis rechts auf der Seite.
Leitfaden zum Web SDK Repository
Über das Braze Web SDK
Das Braze Web SDK ermöglicht es Ihnen, die Customer-Engagement-Plattform von Braze direkt in Ihre Webanwendungen zu integrieren. Das SDK wurde mit TypeScript entwickelt und für moderne Webentwicklung konzipiert. Es bietet umfassende Tools für Nutzerverwaltung, Messaging, Analytics und Feature-Flags.
Was Sie damit tun können
- Nutzerverwaltung: Verfolgen und verwalten Sie Nutzeridentitäten, Attribute und Verhalten in Ihrer gesamten Webanwendung
- In-App Messages: Zeigen Sie gezielte Nachrichten und Benachrichtigungen an, während Nutzer:innen Ihre Website aktiv nutzen
- Content Cards: Zeigen Sie personalisierte Inhalts-Feeds und Aktionskarten an, die sich in Echtzeit aktualisieren
- Banner: Zeigen Sie Banner-Nachrichten an bestimmten Platzierungen innerhalb 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 serverseitigem Feature-Flag-Management
- Analytics: Verfolgen Sie angepasste Events, Nutzerinteraktionen und Konversions-Metriken
- Sitzungsverwaltung: Überwachen Sie Nutzersitzungen und Engagement-Muster
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 benötigen, um personalisierte, ansprechende Nutzererlebnisse zu schaffen, die Wachstum und Bindung fördern.
Voraussetzungen
Bevor Sie das Braze Web SDK integrieren, benötigen Sie:
- Braze-Konto: Ein Braze-Konto mit API-Zugriff
- API-Schlüssel: Den API-Schlüssel Ihrer App aus dem Braze-Dashboard
- SDK-Endpunkt: Die URL Ihres Braze SDK-Endpunkts (z. B.
sdk.iad-01.braze.com)
Ihre Zugangsdaten abrufen
- API-Schlüssel: Zu finden in Ihrem Braze-Dashboard unter Einstellungen > API-Schlüssel
- SDK-Endpunkt: Zu finden unter Einstellungen > SDK-Authentifizierung > Endpunkte
- Service Worker: Erforderlich für Push-Benachrichtigungen (siehe Abschnitt „Push-Benachrichtigungen“)
Installation
1
2
3
| 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.
1
2
3
4
5
6
7
8
| 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 Options-Objekt 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 richtigen 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 diesen Wert auf „true“, um das Logging standardmäßig zu aktivieren. Beachten Sie, dass Braze dadurch Meldungen in die JavaScript-Konsole schreibt, die für alle Nutzer:innen sichtbar sind! Sie sollten diese Option entfernen oder über setLogger einen alternativen Logger bereitstellen, bevor Sie Ihre Seite in die Produktion überführen. |
allowUserSuppliedJavascript |
boolean |
false |
Standardmäßig erlaubt das Braze Web SDK keine nutzerseitig bereitgestellten JavaScript-Klickaktionen und aktiviert weder HTML-In-App-Nachrichten noch Banner, da diese es Braze-Dashboard-Nutzer:innen ermöglichen, JavaScript auf Ihrer Website auszuführen. Um anzugeben, dass Sie darauf vertrauen, dass die Braze-Dashboard-Nutzer:innen keine schädlichen JavaScript-Klickaktionen 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 automatisch FontAwesome 4.7.0 vom FontAwesome-CDN. Um dieses Verhalten zu deaktivieren (z. B. weil Ihre Website eine angepasste Version von FontAwesome nutzt), setzen Sie diese Option auf true. Beachten Sie, dass Sie in diesem Fall selbst sicherstellen müssen, dass FontAwesome auf Ihrer Website geladen ist – 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 dem Gerät 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 an Braze gesendete Nutzer-Events mit der angegebenen Version verknüpft, die für die Nutzersegmentierung verwendet werden kann. |
appVersionNumber |
string |
undefined |
Ein numerischer App-Versionswert, der für die Nutzersegmentierung verwendet werden kann. Dieser Wert muss mit vier Feldern gesendet werden, z. B. „1.2.3.4“, andernfalls wird er ignoriert. Hinweis: appVersion muss ebenfalls gesetzt werden – 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. Dies kann verwendet werden, um das Braze SDK mit der Content Security Policy Ihrer Website kompatibel zu machen. Beachten Sie, dass Sie zusätzlich zum Setzen dieser Nonce möglicherweise auch das Laden von FontAwesome erlauben müssen. Dies können Sie tun, indem Sie use.fontawesome.com zur Allowlist Ihrer Content Security Policy hinzufügen oder die Option doNotLoadFontAwesome verwenden und FontAwesome manuell laden. |
noCookies |
boolean |
false |
Standardmäßig verwendet das Braze Web SDK Cookies. Um die Cookie-Nutzung zu deaktivieren, setzen Sie diese Option auf „true“. Beachten Sie, dass das Deaktivieren von Cookies die Fähigkeit des SDK beeinträchtigen kann, die Identität von Nutzer:innen über Sitzungen hinweg zu speichern. |
allowCrawlerActivity |
boolean |
false |
Standardmäßig ignoriert das Braze Web SDK Aktivitäten von bekannten Spidern oder Web-Crawlern, wie z. B. Google, basierend auf dem User-Agent-String. Dies spart Datenpunkte, macht die Analytics genauer und kann das Seitenranking verbessern. Wenn Sie möchten, dass Braze stattdessen die Aktivitäten dieser Crawler protokolliert, können Sie diese Option auf „true“ setzen. |
disablePushTokenMaintenance |
boolean |
false |
Standardmäßig synchronisieren Nutzer:innen, die bereits die Web-Push-Berechtigung erteilt haben (z. B. über requestPushPermission oder von einem 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 diesen Wert 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 seinen eigenen Service Worker für Push-Benachrichtigungen. Wenn Sie in Ihrer Anwendung bereits einen Service Worker verwalten und die Braze-Service-Worker-Funktionalität darin integrieren möchten, setzen Sie diese Option auf „true“ und binden Sie den Braze-Service-Worker-Code in Ihre Service-Worker-Datei ein. |
minimumIntervalBetweenTriggerActionsInSeconds |
number |
30 |
Standardmäßig können Trigger-Aktionen (z. B. das Anzeigen einer In-App-Nachricht) pro Nutzer:in höchstens alle 30 Sekunden 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 nach seiner Service-Worker-Datei im Stammverzeichnis Ihrer Domain. Geben Sie einen Wert für diese Option an, um diesen Standard zu überschreiben und einen benutzerdefinierten Speicherort für die Service-Worker-Datei anzugeben. |
safariWebsitePushId |
string |
undefined |
Erforderlich für Safari-Push-Benachrichtigungen. Dieser Wert ist in Ihrem Apple-Entwicklerkonto zu finden. Weitere Informationen zum Einrichten 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 öffnen sich Links in In-App-Nachrichten im selben Tab. Setzen Sie diese Option auf „true“, damit sie stattdessen in einem neuen Tab geöffnet werden. |
openCardsInNewTab |
boolean |
false |
Standardmäßig öffnen sich Links in Content Cards im selben Tab. Setzen Sie diese Option auf „true“, damit sie stattdessen in einem neuen Tab geöffnet werden. |
requireExplicitInAppMessageDismissal |
boolean |
false |
Standardmäßig können In-App-Nachrichten durch Klicken außerhalb der Nachricht oder durch Drücken der Escape-Taste geschlossen werden. Setzen Sie diese Option auf „true“, damit Nutzer:innen explizit auf eine Schließen-Schaltfläche oder einen Aktions-Button klicken müssen, um die Nachricht zu schließen. |
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 aller Eigenschaften an Braze-Server zu deaktivieren, geben Sie ein leeres Array an. Beachten Sie, dass ohne einige Eigenschaften nicht alle Features ordnungsgemäß funktionieren. Ohne die Zeitzone funktioniert beispielsweise die Zustellung nach lokaler Zeitzone 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 benutzerdefinierten Scope für den Service Worker anzugeben. |
Kernfunktionen
Initialisierung und Einrichtung
Grundlegende Initialisierung
1
2
3
4
5
6
7
8
9
10
| 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
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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
1
2
3
4
| import { changeUser } from "@braze/web-sdk";
// Change to a new user
changeUser('user-123');
|
Nutzerattribute festlegen
1
2
3
4
5
6
7
8
9
10
| 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
1
2
3
4
5
6
7
8
9
10
| 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-Aliase und Abo-Gruppen
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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
1
2
3
4
5
| 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-Nachrichten
Automatische Anzeige
1
2
3
4
| import { automaticallyShowInAppMessages } from "@braze/web-sdk";
// Automatically show in-app messages
automaticallyShowInAppMessages();
|
Manuelle Anzeige
1
2
3
4
5
6
7
| import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";
// Subscribe to in-app messages
subscribeToInAppMessage((inAppMessage) => {
// Show the message
showInAppMessage(inAppMessage);
});
|
Benutzerdefinierte Verarbeitung von In-App-Nachrichten
1
2
3
4
5
6
7
8
| 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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);
|
Benutzerdefinierte HTML-In-App-Nachrichten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| 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
1
2
3
4
5
6
7
8
| 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);
|
Content-Card-Updates abonnieren
1
2
3
4
5
6
| import { subscribeToContentCardsUpdates } from "@braze/web-sdk";
subscribeToContentCardsUpdates((cards) => {
console.log('Content cards updated:', cards);
// Display cards or update UI
});
|
Interaktionen mit Content Cards protokollieren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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
1
2
3
4
5
6
7
| 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());
});
|
Content-Card-Aktualisierung anfordern
1
2
3
4
5
6
| import { requestContentCardsRefresh } from "@braze/web-sdk";
requestContentCardsRefresh(
() => console.log('Content cards refreshed'),
() => console.log('Failed to refresh content cards')
);
|
Benutzerdefinierte Content Cards
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| 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
1
2
3
4
5
6
| import { requestPushPermission } from "@braze/web-sdk";
requestPushPermission(
() => console.log('Push permission granted'),
() => console.log('Push permission denied')
);
|
Push-Unterstützung prüfen
1
2
3
4
5
6
7
8
9
| 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
1
2
3
4
5
6
| import { unregisterPush } from "@braze/web-sdk";
unregisterPush(
() => console.log('Successfully unregistered'),
() => console.log('Failed to unregister')
);
|
Feature-Flags
Feature-Flag abrufen
1
2
3
4
5
6
7
8
9
10
11
| 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
1
2
3
4
5
6
7
| import { subscribeToFeatureFlagsUpdates } from "@braze/web-sdk";
subscribeToFeatureFlagsUpdates((featureFlags) => {
featureFlags.forEach(flag => {
console.log(`Feature flag ${flag.getId()}: ${flag.getBooleanProperty('enabled')}`);
});
});
|
Feature-Flag-Impressionen protokollieren
1
2
3
4
5
6
| import { logFeatureFlagImpression } from "@braze/web-sdk";
const featureFlag = getFeatureFlag('new_feature');
if (featureFlag) {
logFeatureFlagImpression(featureFlag);
}
|
Feature-Flag-Aktualisierung anfordern
1
2
3
4
5
6
| import { refreshFeatureFlags } from "@braze/web-sdk";
refreshFeatureFlags(
() => console.log('Feature flags refreshed'),
() => console.log('Failed to refresh feature flags')
);
|
Banner
Banner abrufen und anzeigen
1
2
3
4
5
6
7
8
| 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
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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 benutzerdefinierten UI schließen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| 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, kümmert sich das SDK um den Ausblendungsstatus des Banners, entfernt das Banner aus den aktiven Banner-Updates, benachrichtigt die Abonnent:innen des Dismissed-Events des Banners und synchronisiert die Ausblendung mit Braze. Benutzerdefinierte UIs sollten subscribeToBannersUpdates verwenden, um auf das Entfernen des ausgeblendeten Banners zu reagieren – anstatt dismissBanner lediglich als lokale UI-Änderung oder reine Analytics-Protokollierungsmethode zu behandeln.
Banner-Aktualisierung anfordern
1
2
3
4
5
6
7
| 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
1
2
3
4
5
6
7
8
9
10
11
| 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
1
2
3
4
5
6
| import { logPurchase } from "@braze/web-sdk";
logPurchase('product-123', 29.99, 'USD', 1, {
category: 'electronics',
brand: 'Apple'
});
|
Sofortige Datenübertragung anfordern
1
2
3
4
| import { requestImmediateDataFlush } from "@braze/web-sdk";
// Force immediate data send
requestImmediateDataFlush();
|
Session-Verwaltung
Session öffnen
1
2
3
4
| import { openSession } from "@braze/web-sdk";
// Start a new session
openSession();
|
SDK-Status prüfen
1
2
3
4
5
6
7
8
9
| import { isInitialized, isDisabled } from "@braze/web-sdk";
if (isInitialized()) {
console.log('SDK is initialized');
if (isDisabled()) {
console.log('SDK is disabled');
}
}
|
SDK aktivieren/deaktivieren
1
2
3
4
5
6
7
| import { enableSDK, disableSDK } from "@braze/web-sdk";
// Disable SDK
disableSDK();
// Re-enable SDK
enableSDK();
|
Datenverwaltung
Daten löschen
1
2
3
4
| import { wipeData } from "@braze/web-sdk";
// Remove all locally stored data
wipeData();
|
SDK zerstören
1
2
3
4
| import { destroy } from "@braze/web-sdk";
// Clean up SDK resources
destroy();
|
Geräte-ID abrufen
1
2
3
4
| import { getDeviceId } from "@braze/web-sdk";
const deviceId = getDeviceId();
console.log('Device ID:', deviceId);
|
SDK-Authentifizierung
1
2
3
4
| import { setSdkAuthenticationSignature } from "@braze/web-sdk";
// Set authentication signature
setSdkAuthenticationSignature('your-signature-here');
|
Authentifizierungsfehler abonnieren
1
2
3
4
5
6
7
| 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 Browserumgebung konzipiert ist. Sie können diese Probleme lösen, indem Sie das SDK dynamisch importieren.
Sie können die Vorteile des Tree-Shakings beibehalten, indem Sie die benötigten Teile des SDK in einer separaten Datei exportieren und diese Datei dann dynamisch in Ihre Komponente importieren.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // 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 alternativ webpack zum Bündeln Ihrer App verwenden, können Sie dessen Magic Comments nutzen, um nur die benötigten Teile des SDK dynamisch zu importieren.
1
2
3
4
5
6
7
8
9
10
11
12
13
| // 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:
1
2
3
4
5
| 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 an, damit das Braze SDK ignoriert wird:
1
2
3
4
5
6
7
| {
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!@braze)"
]
}
}
|
Asynchrone Moduldefinition (AMD)
AMD-Unterstützung deaktivieren
Wenn Ihre Website RequireJS oder einen anderen AMD-Modullader 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 vom CDN-Standort geladen werden: https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js
Modullader
Wenn Sie RequireJS oder andere AMD-Modullader verwenden, empfehlen wir, eine Kopie unserer Bibliothek selbst zu hosten und sie wie andere Ressourcen zu referenzieren:
1
2
3
4
5
| 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:
- AMP-Web-Push-Skript einbinden: Fügen Sie das async-Script-Tag in Ihren Head-Bereich ein.
- Abo-Widgets hinzufügen: Fügen Sie Widgets hinzu, damit Nutzer:innen sich anmelden/abmelden können.
- Hilfsdateien hinzufügen: Binden Sie
helper-iframe.html und permission-dialog.html ein.
- Service Worker erstellen: Fügen Sie die Braze-Service-Worker-Datei hinzu.
- AMP-Web-Push-Element konfigurieren: Fügen Sie das
amp-web-push-Element mit Ihrem API-Schlüssel und Ihrer Basis-URL als Query-Parameter hinzu.
Detaillierte Anweisungen zur AMP-Integration finden Sie im Braze-Entwicklerleitfaden.
Electron
Electron unterstützt Web-Push-Benachrichtigungen nicht offiziell (siehe: dieses GitHub-Issue). Es gibt andere Open-Source-Workarounds, die Sie ausprobieren können und die nicht von Braze getestet wurden.
CDN-Integration
- Skript laden: Initialisieren Sie nach dem Laden des Script-Tags, indem Sie den Initialisierungscode nach dem Script-Tag platzieren, oder verwenden Sie den
onload-Event-Handler des Script-Tags.
- Globaler Zugriff: Das SDK ist als
window.braze verfügbar, wenn es über CDN geladen wird.
Service Worker (Push-Benachrichtigungen)
- Erforderlich: Der Braze-Service-Worker muss eingebunden werden, 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 weiterhin eine Service-Worker-Datei am erwarteten Speicherort hosten, die den Braze-Service-Worker-Code enthält.
- Eigenen Service Worker verwalten: Wenn Sie bereits einen Service Worker in Ihrer Anwendung 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 Nutzer:innen-Interaktionen auf (z. B. Button-Klicks). Verwenden Sie Soft-Push-Prompts (angepasste UI), bevor Sie die Browserberechtigung anfordern.
Tag-Manager
Tealium iQ
Tealium iQ bietet eine einfache schlüsselfertige 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 vertiefenden Tealium-Konfigurationssupport finden Sie in unserer Integrationsdokumentation oder wenden Sie sich an Ihren Tealium Account Manager.
Google Tag Manager
Das Web SDK kann über ein benutzerdefiniertes HTML-Tag in Ihrem Google Tag Manager-Container initialisiert und aufgerufen werden. Sehen Sie sich unsere Google Tag Manager-Beispiel-App an, um ein Beispiel für das Senden von Events an Braze über GTM zu sehen, oder lesen Sie unsere Integrationsdokumentation für weitere Details.
Andere Tag-Manager
Braze kann auch mit anderen Tag-Management-Lösungen kompatibel sein, indem Sie unsere Integrationsanweisungen in einem benutzerdefinierten HTML-Tag befolgen. Wenden Sie sich an eine Braze-Vertretung, wenn Sie Hilfe bei der Bewertung dieser Lösungen benötigen.
Bibliotheken
Die folgende Tabelle beschreibt die verfügbaren Distributionen des Braze Web SDK.
| 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/6.11/braze.min.js |
| Core |
Enthält das SDK ohne UI. Implementieren Sie Ihre eigene UI für In-App Messages und Content Cards, wenn Sie diese Version des SDK verwenden. Verwenden Sie für die meisten Integrationen die vollständige Bibliothek, da sie anpassbare UI-Elemente über CSS bereitstellt. |
N/A |
https://js.appboycdn.com/web-sdk/6.11/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-Modullader verwendet, Sie das SDK aber lieber über das CDN laden möchten. |
N/A |
https://js.appboycdn.com/web-sdk/6.11/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 Protokolleinträge in die JavaScript-Konsole schreibt. Dies ist für die Entwicklung hilfreich, aber für alle Nutzer:innen sichtbar. Entfernen Sie diese Option daher oder stellen Sie einen alternativen Logger bereit, bevor Sie Ihre Seite in die Produktionsumgebung überführen.
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
Bei Fragen wenden Sie sich an den technischen Support von Braze.
Für Repository-Details und Beispielprojekte siehe https://github.com/braze-inc/braze-web-sdk.