Skip to content

Guide du dépôt du SDK Web

À propos du SDK Web de Braze

Le SDK Web de Braze vous permet d’intégrer la plateforme d’engagement client de Braze directement dans vos applications Web. Conçu avec TypeScript et pensé pour le développement Web moderne, ce SDK fournit des outils complets pour la gestion des utilisateurs, la communication, l’analyse et les feature flags.

Ce que vous pouvez faire

  • Gestion des utilisateurs : suivez et gérez les identités, les attributs et le comportement des utilisateurs dans votre application Web.
  • Messages in-app : affichez des messages ciblés et des notifications aux utilisateurs lorsqu’ils utilisent activement votre site.
  • Content Cards : affichez des flux de contenu personnalisés et des cartes promotionnelles qui se mettent à jour en temps réel.
  • Bannières : affichez des messages sous forme de bannières dans des emplacements spécifiques de votre site.
  • Notifications push : envoyez des notifications push Web pour interagir avec les utilisateurs même lorsqu’ils ne sont pas sur votre site.
  • Feature flags : contrôlez le déploiement de fonctionnalités et les tests A/B grâce à la gestion des feature flags côté serveur.
  • Analyse : suivez les événements personnalisés, les interactions des utilisateurs et les indicateurs de conversion.
  • Gestion des sessions : surveillez les sessions des utilisateurs et les tendances d’engagement.

Que vous développiez une application monopage, un site e-commerce ou une plateforme de contenu, le SDK Web de Braze fournit les outils dont vous avez besoin pour créer des expériences utilisateur personnalisées et engageantes qui favorisent la croissance et la fidélisation.

Conditions préalables

Avant d’intégrer le SDK Web de Braze, vous aurez besoin des éléments suivants :

  • Compte Braze : un compte Braze avec accès à l’API
  • Clé API : la clé API de votre application, disponible dans le tableau de bord de Braze
  • Endpoint du SDK : l’URL de votre endpoint du SDK Braze (par exemple, sdk.iad-01.braze.com)

Obtenir vos identifiants

  1. Clé API : disponible dans votre tableau de bord de Braze sous Paramètres > Clés API
  2. Endpoint du SDK : accessible dans Paramètres > Authentification du SDK > Endpoints
  3. Service de traitement : requis pour les notifications push (voir la section Notifications push)

Installation

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

Démarrage rapide

L’extrait de code suivant présente la configuration minimale requise pour initialiser le SDK Web de Braze.

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

Référence de configuration

Options d’initialisation

La fonction initialize accepte un objet d’options avec les propriétés suivantes :

Option Type Défaut Description
baseUrl string Obligatoire Cette option est requise pour configurer le SDK Web de Braze afin d’utiliser l’endpoint approprié pour votre intégration. Par exemple : braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'sdk.iad-03.braze.com' })
enableLogging boolean false Définissez sur true pour activer la journalisation par défaut. Notez que cela amènera Braze à écrire dans la console JavaScript, ce qui est visible par tous les utilisateurs ! Vous devriez probablement retirer cette option ou fournir un logger alternatif avec setLogger avant de mettre votre page en production.
allowUserSuppliedJavascript boolean false Par défaut, le SDK Web de Braze n’autorise pas les actions de clic JavaScript fournies par l’utilisateur, ni les messages In-App Messages en HTML et les Banners, car ils permettent aux utilisateurs du tableau de bord de Braze d’exécuter du JavaScript sur votre site. Pour indiquer que vous faites confiance aux utilisateurs du tableau de bord de Braze pour écrire des actions de clic JavaScript non malveillantes, définissez cette propriété sur true.
doNotLoadFontAwesome boolean false Braze utilise Font Awesome pour les icônes des messages in-app. Par défaut, Braze charge automatiquement FontAwesome 4.7.0 depuis le CDN FontAwesome. Pour désactiver ce comportement (par exemple parce que votre site utilise une version personnalisée de FontAwesome), définissez cette option sur true. Notez que dans ce cas, vous êtes responsable de vous assurer que FontAwesome est chargé sur votre site, sinon les messages in-app pourraient ne pas s’afficher correctement.
inAppMessageZIndex number 999999 Par défaut, le SDK de Braze affiche les In-App Messages avec un z-index de 999999. Fournissez une valeur pour cette option afin de remplacer cette valeur par défaut.
sessionTimeoutInSeconds number 30 Par défaut, une session expire après 30 secondes d’inactivité. Fournissez une valeur pour cette option afin de remplacer cette valeur par défaut.
deviceId string Généré automatiquement Par défaut, Braze attribue un guid aléatoire comme identifiant d’appareil. Fournissez une valeur pour cette option de configuration afin de remplacer cette valeur par défaut par une valeur de votre choix.
appVersion string undefined Si vous fournissez une valeur pour cette option, les événements utilisateur envoyés à Braze seront associés à la version indiquée, qui peut être utilisée pour la segmentation des utilisateurs.
appVersionNumber string undefined Une valeur numérique de version de l’application qui peut être utilisée pour la segmentation des utilisateurs. Cette valeur doit être envoyée avec quatre champs, par exemple « 1.2.3.4 », sinon elle sera ignorée. Remarque : appVersion doit également être défini, soit avec la même valeur, soit avec un nom unique pour cette version.
contentSecurityNonce string undefined Si vous fournissez une valeur pour cette option, le SDK de Braze ajoutera le nonce à tous les éléments <script> et <style> créés par le SDK. Cela peut être utilisé pour permettre au SDK de Braze de fonctionner avec la politique de sécurité du contenu de votre site Web. Notez qu’en plus de définir ce nonce, vous devrez peut-être également autoriser le chargement de FontAwesome, ce que vous pouvez faire en ajoutant use.fontawesome.com à la liste d’autorisation de votre politique de sécurité du contenu ou en utilisant l’option doNotLoadFontAwesome et en le chargeant manuellement.
noCookies boolean false Par défaut, le SDK Web de Braze utilise des cookies. Pour désactiver l’utilisation des cookies, définissez cette option sur true. Notez que la désactivation des cookies peut affecter la capacité du SDK à mémoriser l’identité des utilisateurs entre les sessions.
allowCrawlerActivity boolean false Par défaut, le SDK Web de Braze ignore l’activité des robots d’indexation ou des robots d’exploration Web connus, tels que Google, en se basant sur la chaîne user agent. Cela économise des points de donnée, rend les analyses plus précises et peut améliorer le classement de la page. Cependant, si vous souhaitez que Braze enregistre l’activité de ces robots, vous pouvez définir cette option sur true.
disablePushTokenMaintenance boolean false Par défaut, les utilisateurs qui ont déjà accordé l’autorisation de notification push Web (par exemple via requestPushPermission ou depuis un fournisseur push précédent) synchronisent automatiquement leur jeton push avec le backend de Braze lors de chaque nouvelle session pour assurer la livrabilité. Pour désactiver ce comportement, définissez cette option sur true.
enableSdkAuthentication boolean false Définissez sur true pour activer la fonctionnalité d’authentification du SDK. Pour plus d’informations sur l’authentification du SDK, consultez notre documentation produit.
manageServiceWorkerExternally boolean false Par défaut, le SDK Web de Braze gère son propre service de traitement pour les notifications push. Si vous gérez déjà un service de traitement dans votre application et souhaitez y intégrer la fonctionnalité du service de traitement de Braze, définissez cette option sur true et incluez le code du service de traitement de Braze dans votre fichier de service de traitement.
minimumIntervalBetweenTriggerActionsInSeconds number 30 Par défaut, les actions de déclenchement (par exemple, l’affichage d’un message in-app) ne peuvent être déclenchées qu’une fois toutes les 30 secondes par utilisateur. Fournissez une valeur pour cette option afin de remplacer cette valeur par défaut.
serviceWorkerLocation string undefined Par défaut, le SDK Web de Braze recherche son fichier de service de traitement à la racine de votre domaine. Fournissez une valeur pour cette option afin de remplacer cette valeur par défaut et de spécifier un emplacement personnalisé pour le fichier du service de traitement.
safariWebsitePushId string undefined Requis pour les notifications push Safari. Cette valeur se trouve dans votre compte Apple Developer. Pour plus d’informations sur la configuration des notifications push Safari, consultez notre documentation produit.
localization string undefined Si vous fournissez une valeur pour cette option, le SDK de Braze tentera d’afficher les messages in-app et les Content Cards dans la langue correspondante.
openInAppMessagesInNewTab boolean false Par défaut, les liens dans les messages in-app s’ouvrent dans le même onglet. Définissez cette option sur true pour les ouvrir dans un nouvel onglet.
openCardsInNewTab boolean false Par défaut, les liens dans les Content Cards s’ouvrent dans le même onglet. Définissez cette option sur true pour les ouvrir dans un nouvel onglet.
requireExplicitInAppMessageDismissal boolean false Par défaut, les messages in-app peuvent être fermés en cliquant à l’extérieur ou en appuyant sur la touche Échap. Définissez cette option sur true pour obliger les utilisateurs à cliquer explicitement sur un bouton de fermeture ou un bouton d’action pour fermer le message.
devicePropertyAllowlist string[] undefined Par défaut, le SDK de Braze détecte et collecte automatiquement toutes les propriétés d’appareil dans DeviceProperties. Pour remplacer ce comportement, fournissez un tableau de DeviceProperties. Pour désactiver l’envoi de toutes les propriétés aux serveurs Braze, fournissez un tableau vide. Notez que sans certaines propriétés, toutes les fonctionnalités ne fonctionneront pas correctement. Par exemple, sans le fuseau horaire, la distribution selon le fuseau horaire local ne fonctionnera pas.
serviceWorkerScope string undefined Par défaut, le SDK Web de Braze enregistre son service de traitement avec la portée par défaut (le répertoire du service de traitement). Fournissez une valeur pour cette option afin de remplacer cette valeur par défaut et de spécifier une portée personnalisée pour le service de traitement.

Fonctionnalités principales

Initialisation et configuration

Initialisation de base

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

Options d’initialisation avancées

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'
});

Gestion des utilisateurs

Changer d’utilisateur

1
2
3
4
import { changeUser } from "@braze/web-sdk";

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

Définir les attributs utilisateur

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());
}

Définir la localisation de l’utilisateur

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

Alias d’utilisateur et groupes d’abonnement

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');
}

Déconnexion de l’utilisateur

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

Messages in-app

Affichage automatique

1
2
3
4
import { automaticallyShowInAppMessages } from "@braze/web-sdk";

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

Affichage manuel

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

Gestion personnalisée des messages in-app

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

Enregistrer les interactions avec les messages in-app

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

Messages in-app HTML personnalisés

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

Afficher les Content Cards

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

S’abonner aux mises à jour des Content Cards

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

Enregistrer les interactions avec les Content Cards

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

Filtrer les Content Cards

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());
});

Demander l’actualisation des Content Cards

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

Content Cards personnalisées

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

Notifications push

Demander l’autorisation push

1
2
3
4
5
6
import { requestPushPermission } from "@braze/web-sdk";

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

Vérifier la prise en charge des notifications push

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');
    }
}

Désenregistrer les notifications push

1
2
3
4
5
6
import { unregisterPush } from "@braze/web-sdk";

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

Feature flags

Obtenir un feature flag

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
    }
}

S’abonner aux mises à jour des feature flags

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')}`);
    });
});

Enregistrer les impressions de feature flags

1
2
3
4
5
6
import { logFeatureFlagImpression } from "@braze/web-sdk";

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

Demander l’actualisation des feature flags

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

Bannières

Obtenir et afficher les bannières

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

S’abonner aux mises à jour des bannières

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

Fermer des bannières dans une interface personnalisée

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.
});

Lorsque vous appelez dismissBanner(banner), le SDK gère l’état de fermeture de la bannière, la retire des mises à jour actives, notifie les abonnés à l’événement de fermeture de la bannière et synchronise la fermeture avec Braze. Les interfaces personnalisées doivent utiliser subscribeToBannersUpdates pour réagir au retrait de la bannière fermée, plutôt que de traiter dismissBanner comme un simple changement d’interface local ou une méthode d’enregistrement analytique uniquement.

Demander l’actualisation des bannières

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

Analyse et événements

Enregistrer des événements personnalisés

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'
});

Enregistrer des achats

1
2
3
4
5
6
import { logPurchase } from "@braze/web-sdk";

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

Demander un envoi immédiat des données

1
2
3
4
import { requestImmediateDataFlush } from "@braze/web-sdk";

// Force immediate data send
requestImmediateDataFlush();

Gestion des sessions

Ouvrir une session

1
2
3
4
import { openSession } from "@braze/web-sdk";

// Start a new session
openSession();

Vérifier l’état du SDK

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');
    }
}

Activer/Désactiver le SDK

1
2
3
4
5
6
7
import { enableSDK, disableSDK } from "@braze/web-sdk";

// Disable SDK
disableSDK();

// Re-enable SDK
enableSDK();

Gestion des données

Effacer les données

1
2
3
4
import { wipeData } from "@braze/web-sdk";

// Remove all locally stored data
wipeData();

Détruire le SDK

1
2
3
4
import { destroy } from "@braze/web-sdk";

// Clean up SDK resources
destroy();

Obtenir l’ID de l’appareil

1
2
3
4
import { getDeviceId } from "@braze/web-sdk";

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

Authentification du SDK

1
2
3
4
import { setSdkAuthenticationSignature } from "@braze/web-sdk";

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

S’abonner aux échecs d’authentification

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');
});

Modèles d’intégration

Frameworks SSR

Si vous utilisez un framework de rendu côté serveur (SSR) tel que Next.js, vous pouvez rencontrer des erreurs car le SDK est conçu pour être exécuté dans un environnement de navigateur. Vous pouvez résoudre ces problèmes en important dynamiquement le SDK.

Vous pouvez conserver les avantages du tree-shaking en exportant les parties du SDK dont vous avez besoin dans un fichier séparé, puis en important dynamiquement ce fichier dans votre composant.

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();
    });
}, []);

Vous pouvez également, si vous utilisez webpack pour empaqueter votre application, tirer parti de ses commentaires magiques pour n’importer dynamiquement que les parties du SDK dont vous avez besoin.

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

Si vous utilisez Vite et que vous voyez un avertissement concernant des dépendances circulaires ou Uncaught TypeError: Class extends value undefined is not a constructor or null, vous devrez peut-être exclure le SDK de Braze de sa découverte de dépendances :

1
2
3
4
5
export default {
    optimizeDeps: {
        exclude: ['@braze/web-sdk']
    }
}

Framework Jest

Lorsque vous utilisez Jest, vous pouvez voir une erreur semblable à SyntaxError: Unexpected token 'export'. Pour corriger cela, ajustez votre configuration dans package.json pour ignorer le SDK de Braze :

1
2
3
4
5
6
7
{
  "jest": {
    "transformIgnorePatterns": [
      "/node_modules/(?!@braze)"
    ]
  }
}

Asynchronous Module Definition (AMD)

Désactiver la prise en charge AMD

Si votre site utilise RequireJS ou un autre chargeur de modules AMD, mais que vous préférez charger le SDK Web de Braze via le CDN, vous pouvez charger une version de la bibliothèque qui n’inclut pas la prise en charge AMD. Cette version de la bibliothèque peut être chargée depuis l’emplacement CDN : https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js

Chargeur de modules

Si vous utilisez RequireJS ou d’autres chargeurs de modules AMD, nous vous recommandons d’héberger vous-même une copie de notre bibliothèque et de la référencer comme vous le feriez avec d’autres ressources :

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();
});

Pages mobiles accélérées (AMP)

Pour l’intégration AMP, vous devrez :

  1. Inclure le script AMP web push : ajouter la balise script asynchrone à votre en-tête
  2. Ajouter des widgets d’abonnement : ajouter des widgets pour permettre aux utilisateurs de s’abonner/se désabonner
  3. Ajouter des fichiers d’aide : inclure helper-iframe.html et permission-dialog.html
  4. Créer un service de traitement : ajouter le fichier de service de traitement de Braze
  5. Configurer l’élément AMP web push : ajouter l’élément amp-web-push avec votre clé API et l’URL de base en tant que paramètres de requête

Pour des instructions détaillées sur l’intégration AMP, consultez le Guide développeur de Braze.

Electron

Electron ne prend pas officiellement en charge les notifications push Web (voir : ce ticket GitHub). Il existe d’autres solutions open source que vous pouvez essayer, mais qui n’ont pas été testées par Braze.

Intégration CDN

  • Chargement du script : initialisez après le chargement de la balise script en plaçant le code d’initialisation après la balise script, ou utilisez le gestionnaire d’événement onload de la balise script
  • Accès global : le SDK est disponible en tant que window.braze lorsqu’il est chargé via CDN

Service de traitement (notifications push)

  • Requis : vous devez inclure le service de traitement de Braze pour que les notifications push fonctionnent
  • Enregistrement par défaut : par défaut, le SDK Web de Braze enregistre et gère automatiquement votre service de traitement lorsque requestPushPermission() est appelé, ainsi qu’au début de chaque nouvelle session pour les utilisateurs qui ont déjà accordé l’autorisation push. Vous devez tout de même héberger un fichier de service de traitement à l’emplacement attendu contenant le code du service de traitement de Braze.
  • Gérer votre propre service de traitement : si vous gérez déjà un service de traitement dans votre application, définissez l’option d’initialisation manageServiceWorkerExternally sur true, ajoutez le code du service de traitement de Braze dans votre fichier de service de traitement et enregistrez-le vous-même en utilisant navigator.serviceWorker.register()
  • Autorisations push : appelez braze.requestPushPermission() en réponse aux interactions utilisateur (par exemple, les clics sur des boutons). Utilisez des invites push souples (interface personnalisée) avant de demander l’autorisation du navigateur

Gestionnaires de balises

Tealium iQ

Tealium iQ offre une intégration Braze clé en main de base. Pour configurer l’intégration, recherchez Braze dans l’interface de gestion des balises Tealium et fournissez la clé API du SDK Web depuis votre tableau de bord. Pour plus de détails ou une assistance approfondie sur la configuration Tealium, consultez notre documentation d’intégration ou contactez votre gestionnaire de compte Tealium.

Google Tag Manager

Le SDK Web peut être initialisé et appelé depuis une balise HTML personnalisée dans votre conteneur Google Tag Manager. Consultez notre application d’exemple Google Tag Manager pour un exemple d’envoi d’événements à Braze via GTM, ou consultez notre documentation d’intégration pour plus de détails.

Autres gestionnaires de balises

Braze peut également être compatible avec d’autres solutions de gestion de balises en suivant nos instructions d’intégration au sein d’une balise HTML personnalisée. Contactez un conseiller Braze si vous avez besoin d’aide pour évaluer ces solutions.


Bibliothèques

Le tableau suivant décrit les distributions disponibles du SDK Web de Braze.

Nom Description npm URL CDN
Full SDK complet avec interface utilisateur. Lorsque vous utilisez la version npm, les bundlers JavaScript suppriment le code inutilisé, y compris le code de l’interface utilisateur. @braze/web-sdk https://js.appboycdn.com/web-sdk/6.12/braze.min.js
Core Contient le SDK sans interface utilisateur. Implémentez votre propre interface utilisateur pour les In-App Messages et les Content Cards lorsque vous utilisez cette version du SDK. Utilisez la bibliothèque complète pour la plupart des intégrations, car elle fournit des éléments d’interface utilisateur personnalisables via CSS. N/A https://js.appboycdn.com/web-sdk/6.12/braze.core.min.js
No-AMD Contient le SDK complet sans prise en charge d’AMD. Cela est utile si votre site utilise RequireJS ou un autre chargeur de modules AMD, mais que vous préférez charger le SDK via le CDN. N/A https://js.appboycdn.com/web-sdk/6.12/braze.no-amd.min.js

Navigateurs pris en charge

  • Navigateurs modernes basés sur Chromium (Chrome, Edge, Opera)
  • Firefox
  • Safari

Débogage et résolution des problèmes

Passez l’option enableLogging: true à la fonction d’initialisation (braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT', enableLogging: true });) pour que Braze enregistre les événements dans la console JavaScript. C’est utile pour le développement, mais visible par tous les utilisateurs. Supprimez donc cette option ou fournissez un autre logger avant de mettre votre page en production.

Font Awesome

Braze utilise Font Awesome 4.7.0 pour les icônes des messages in-app. Pour désactiver le chargement de Font Awesome, utilisez l’option d’initialisation doNotLoadFontAwesome. Consultez l’aide-mémoire pour parcourir les icônes disponibles.

Ressources supplémentaires

Contact

Pour toute question, contactez le support technique de Braze pour obtenir de l’aide.

Pour les détails du dépôt et les exemples de projets, consultez https://github.com/braze-inc/braze-web-sdk.

New Stuff!