Passer au contenu

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’analytique 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 à travers votre application Web.
  • Messages in-app : affichez des messages et notifications ciblés aux utilisateurs pendant qu’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 des fonctionnalités et les tests A/B grâce à la gestion des feature flags côté serveur.
  • Analytique : 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 schémas d’engagement.

Que vous développiez une application monopage, un site e-commerce ou une plateforme de contenu, le SDK Web de Braze vous fournit les outils nécessaires 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 SDK : l’URL de votre endpoint 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 SDK : accessible dans Paramètres > Authentification SDK > Endpoints
  3. Service de traitement : requis pour les notifications push (consultez la section Notifications push)

Installation

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.

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 Valeur par 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 cette option sur true pour activer la journalisation par défaut. Notez que cela amènera Braze à enregistrer des informations dans la console JavaScript, visible par tous les utilisateurs ! Vous devriez probablement supprimer cette option ou fournir un logger alternatif avec setLogger avant de publier 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 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 de 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 si vous faites cela, 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 avec votre propre valeur.
appVersion string undefined Si vous fournissez une valeur pour cette option, les événements utilisateur envoyés à Braze seront associés à la version donnée, ce qui peut être utilisé pour la segmentation des utilisateurs.
appVersionNumber string undefined Une valeur numérique de version d’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 soit en ajoutant use.fontawesome.com à la liste d’autorisation de votre politique de sécurité du contenu, soit 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é provenant de robots d’indexation ou de crawlers Web connus, tels que Google, en se basant sur la chaîne de l’agent utilisateur. Cela permet d’économiser des points de donnée, de rendre 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 crawlers, vous pouvez définir cette option sur true.
disablePushTokenMaintenance boolean false Par défaut, les utilisateurs ayant déjà accordé l’autorisation de notification push Web (par exemple via requestPushPermission ou un fournisseur de push précédent) synchronisent automatiquement leur jeton push avec le backend de Braze lors de chaque nouvelle session pour garantir 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 SDK. Pour plus d’informations sur l’authentification 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 que vous 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 seule 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 spécifier un emplacement personnalisé pour le fichier de service de traitement.
safariWebsitePushId string undefined Obligatoire 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 cette locale.
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 en dehors ou en appuyant sur la touche Échap. Définissez cette option sur true pour exiger que les utilisateurs cliquent 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 de 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 spécifier une portée personnalisée pour le service de traitement.

Fonctionnalités principales

Initialisation et configuration

Initialisation de base

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

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

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

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

Définir les attributs utilisateur

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

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 utilisateur et groupes d’abonnement

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

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

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

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

Affichage manuel

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

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

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

Enregistrer les interactions des messages in-app

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

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

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

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

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

Enregistrer les interactions des Content Cards

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

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 une actualisation des Content Cards

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

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

Content Cards personnalisées

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

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

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ésinscrire les notifications push

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

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

Feature flags

Obtenir un feature flag

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

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

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

Enregistrer les impressions des feature flags

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

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

Demander une actualisation des feature flags

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

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

Bannières

Obtenir et afficher des bannières

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

L’abonné reçoit le cache de bannières en mémoire du SDK. Une seule mise à jour peut inclure des emplacements provenant d’actualisations précédentes, et pas uniquement les ID d’emplacement de l’appel requestBannersRefresh le plus récent.

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

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 de bannières actives, notifie les abonnés à l’événement de fermeture de la bannière, et synchronise la fermeture avec Braze. Les interfaces personnalisées devraient utiliser subscribeToBannersUpdates pour réagir au retrait de la bannière fermée, plutôt que de considérer dismissBanner comme un simple changement local de l’interface ou une simple méthode d’enregistrement analytique.

Demander une actualisation des bannières

requestBannersRefresh() fusionne les données dans le cache de bannières existant. Seuls les ID d’emplacement que vous demandez sont ajoutés, mis à jour ou supprimés. Les bannières en cache pour d’autres emplacements restent dans le cache et expirent à leur date d’expiration d’origine. Si le serveur ne renvoie aucune bannière pour un emplacement demandé, cet emplacement est retiré du cache.

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

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

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

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

Demander l’envoi immédiat des données

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

// Force immediate data send
requestImmediateDataFlush();

Gestion des sessions

Ouvrir une session

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

// Start a new session
openSession();

Vérifier l’état du SDK

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

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

// Disable SDK
disableSDK();

// Re-enable SDK
enableSDK();

Gestion des données

Effacer les données

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

// Remove all locally stored data
wipeData();

Détruire le SDK

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

// Clean up SDK resources
destroy();

Obtenir l’identifiant de l’appareil

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

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

Authentification du SDK

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

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

S’abonner aux échecs d’authentification

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

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

Schémas 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.

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

Alternativement, si vous utilisez webpack pour regrouper votre application, vous pouvez tirer parti de ses commentaires magiques pour importer dynamiquement uniquement les parties du SDK dont vous avez besoin.

// 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 Braze de la découverte de dépendances :

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

Framework Jest

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

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

Définition de module asynchrone (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 :

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 : ajoutez la balise script asynchrone dans votre en-tête
  2. Ajouter des widgets d’abonnement : ajoutez des widgets pour permettre aux utilisateurs de s’abonner/se désabonner
  3. Ajouter des fichiers d’aide : incluez helper-iframe.html et permission-dialog.html
  4. Créer un service de traitement : ajoutez le fichier du service de traitement Braze
  5. Configurer l’élément AMP web push : ajoutez l’élément amp-web-push avec votre clé API et l’URL de base comme paramètres de requête

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

Electron

Electron ne prend pas officiellement en charge les notifications push Web (voir : ce ticket GitHub). Il existe d’autres solutions de contournement 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 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 ayant déjà accordé l’autorisation push. Vous devez toujours héberger un fichier de service de traitement à l’emplacement attendu contenant le code du service de traitement 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 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 un bouton). Utilisez des invites push souples (interface personnalisée) avant de demander l’autorisation du navigateur

Gestionnaires de balises

Tealium iQ

Tealium iQ propose une intégration Braze de base prête à l’emploi. Pour configurer l’intégration, recherchez Braze dans l’interface Tealium Tag Management, 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 de 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é à partir d’une balise HTML personnalisée dans votre conteneur Google Tag Manager. Consultez notre application 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. Avec la version npm, les bundlers JavaScript suppriment le code inutilisé, y compris le code d’interface utilisateur. @braze/web-sdk https://js.appboycdn.com/web-sdk/7.0/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/7.0/braze.core.min.js
No-AMD Contient le SDK complet sans prise en charge AMD. Ceci 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/7.0/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 logs dans la console JavaScript. Cela est utile pour le développement, mais reste 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 projets d’exemple, consultez https://github.com/braze-inc/braze-web-sdk.

New Stuff!