Ir al contenido

Guía del repositorio del SDK web

Acerca del SDK Web de Braze

El SDK Web de Braze te permite integrar la plataforma de interacción con los clientes de Braze directamente en tus aplicaciones web. Creado con TypeScript y diseñado para el desarrollo web moderno, este SDK ofrece herramientas completas para la gestión de usuarios, la mensajería, el análisis y los conmutadores de características.

Lo que puedes hacer

  • Gestión de usuarios: Haz un seguimiento y gestiona las identidades, los atributos y el comportamiento de los usuarios en tu aplicación web.
  • Mensajería dentro de la aplicación: Muestra mensajes y notificaciones dirigidos a los usuarios mientras usan activamente tu sitio.
  • Content Cards: Muestra fuentes de contenido personalizadas y tarjetas promocionales que se actualizan en tiempo real.
  • Banners: Muestra mensajes de banner en ubicaciones específicas dentro de tu sitio.
  • Notificaciones push: Envía notificaciones push web para interactuar con los usuarios incluso cuando no están en tu sitio.
  • Conmutadores de características: Controla los lanzamientos de características y las pruebas A/B con la gestión de conmutadores de características del lado del servidor.
  • Análisis: Haz un seguimiento de eventos personalizados, interacciones de los usuarios y métricas de conversión.
  • Gestión de sesiones: Supervisa las sesiones de los usuarios y los patrones de participación.

Tanto si estás creando una aplicación de una sola página como un sitio de comercio electrónico o una plataforma de contenido, el SDK Web de Braze te ofrece las herramientas que necesitas para crear experiencias de usuario personalizadas y atractivas que impulsen el crecimiento y la retención.

Requisitos previos

Antes de integrar el SDK Web de Braze, necesitarás lo siguiente:

  • Cuenta de Braze: Una cuenta de Braze con acceso a la API
  • Clave de API: La clave de API de tu aplicación, que encontrarás en el panel de Braze
  • Punto final de SDK: La URL del punto final de SDK de Braze (por ejemplo, sdk.iad-01.braze.com)

Obtener tus credenciales

  1. Clave de API: Se encuentra en el panel de Braze, en Configuración → Claves de API
  2. Punto final de SDK: Se encuentra en Configuración → Autenticación del SDK → Endpoints
  3. Prestador de servicios (service worker): Es necesario para las notificaciones push (consulta la sección Notificaciones push)

Instalación

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

Inicio rápido

El siguiente fragmento de código muestra la configuración mínima necesaria para inicializar el 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');

Referencia de configuración

Opciones de inicialización

La función initialize acepta un objeto de opciones con las siguientes propiedades:

Opción Tipo Predeterminado Descripción
baseUrl string Obligatorio Esta opción es obligatoria para configurar el SDK Web de Braze de modo que utilice el endpoint adecuado para tu integración; por ejemplo: braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'sdk.iad-03.braze.com' })
enableLogging boolean false Configúralo como true para habilitar el registro de forma predeterminada. Ten en cuenta que esto hará que Braze registre en la consola de JavaScript, ¡que es visible para todos los usuarios! Probablemente debas eliminar esta opción o proporcionar un registrador alternativo con setLogger antes de publicar tu página en producción.
allowUserSuppliedJavascript boolean false De forma predeterminada, el SDK Web de Braze no permite acciones de clic con JavaScript proporcionado por el usuario ni habilita los mensajes HTML dentro de la aplicación y los Banners, ya que permiten a los usuarios del panel de Braze ejecutar JavaScript en tu sitio. Para indicar que confías en que los usuarios del panel de Braze escriban acciones de clic con JavaScript no malicioso, configura esta propiedad como true.
doNotLoadFontAwesome boolean false Braze utiliza Font Awesome para los iconos de los mensajes dentro de la aplicación. De forma predeterminada, Braze cargará automáticamente FontAwesome 4.7.0 desde la CDN de FontAwesome. Para desactivar este comportamiento (por ejemplo, porque tu sitio utiliza una versión personalizada de FontAwesome), configura esta opción como true. Ten en cuenta que, si lo haces, eres responsable de garantizar que FontAwesome se cargue en tu sitio; de lo contrario, es posible que los mensajes dentro de la aplicación no se muestren correctamente.
inAppMessageZIndex number 999999 De forma predeterminada, el SDK de Braze mostrará los In-App Messages con un z-index de 999999. Proporciona un valor para esta opción para anular ese valor predeterminado.
sessionTimeoutInSeconds number 30 De forma predeterminada, una sesión caduca tras 30 segundos de inactividad. Proporciona un valor para esta opción para anular ese valor predeterminado.
deviceId string Generado automáticamente De forma predeterminada, Braze asignará un GUID aleatorio como ID de dispositivo. Proporciona un valor para esta opción de configuración para anular ese valor predeterminado con uno propio.
appVersion string undefined Si proporcionas un valor para esta opción, los eventos de usuario enviados a Braze se asociarán a la versión indicada, que puede utilizarse para la segmentación de usuarios.
appVersionNumber string undefined Un valor numérico de versión de la aplicación que puede utilizarse para la segmentación de usuarios. Este valor debe enviarse con cuatro campos, como “1.2.3.4”; de lo contrario, se ignorará. Nota: también debe configurarse appVersion, ya sea con el mismo valor o con un nombre único para esta versión.
contentSecurityNonce string undefined Si proporcionas un valor para esta opción, el SDK de Braze añadirá el nonce a todos los elementos <script> y <style> que cree el SDK. Esto puede utilizarse para permitir que el SDK de Braze funcione con la política de seguridad de contenido (CSP) de tu sitio web. Ten en cuenta que, además de configurar este nonce, es posible que también tengas que permitir que se cargue FontAwesome, lo que puedes hacer añadiendo use.fontawesome.com a la lista de permitidos de tu política de seguridad de contenido o utilizando la opción doNotLoadFontAwesome y cargándolo manualmente.
noCookies boolean false De forma predeterminada, el SDK Web de Braze utiliza cookies. Para desactivar el uso de cookies, configura esta opción como true. Ten en cuenta que desactivar las cookies puede afectar a la capacidad del SDK de recordar las identidades de los usuarios entre sesiones.
allowCrawlerActivity boolean false De forma predeterminada, el SDK Web de Braze ignora la actividad de arañas o rastreadores web conocidos, como Google, en función de la cadena de agente de usuario. Esto ahorra puntos de datos, hace que los análisis sean más precisos y puede mejorar el posicionamiento de la página. Sin embargo, si prefieres que Braze registre la actividad de estos rastreadores, puedes configurar esta opción como true.
disablePushTokenMaintenance boolean false De forma predeterminada, los usuarios que ya han concedido el permiso para notificaciones push web (por ejemplo, mediante requestPushPermission o desde un proveedor de push anterior) sincronizarán automáticamente su token de notificaciones push con el backend de Braze al iniciar una nueva sesión para garantizar la capacidad de entrega. Para desactivar este comportamiento, configura esta opción como true.
enableSdkAuthentication boolean false Configúralo como true para habilitar la característica de autenticación del SDK. Para obtener más información sobre la autenticación del SDK, consulta nuestra documentación de producto.
manageServiceWorkerExternally boolean false De forma predeterminada, el SDK Web de Braze gestiona su propio service worker para las notificaciones push. Si ya gestionas un service worker en tu aplicación y quieres incorporarle la funcionalidad del service worker de Braze, configura esta opción como true e incluye el código del service worker de Braze en tu archivo de service worker.
minimumIntervalBetweenTriggerActionsInSeconds number 30 De forma predeterminada, las acciones desencadenantes (por ejemplo, mostrar un mensaje dentro de la aplicación) pueden activarse como máximo una vez cada 30 segundos por usuario. Proporciona un valor para esta opción para anular ese valor predeterminado.
serviceWorkerLocation string undefined De forma predeterminada, el SDK Web de Braze buscará su archivo de service worker en la raíz de tu dominio. Proporciona un valor para esta opción para anular ese valor predeterminado y especificar una ubicación personalizada para el archivo de service worker.
safariWebsitePushId string undefined Obligatorio para las notificaciones push de Safari. Puedes encontrar este valor en tu cuenta de Apple Developer. Para obtener más información sobre cómo configurar las notificaciones push de Safari, consulta nuestra documentación de producto.
localization string undefined Si proporcionas un valor para esta opción, el SDK de Braze intentará mostrar los mensajes dentro de la aplicación y las tarjetas de contenido en esa configuración regional.
openInAppMessagesInNewTab boolean false De forma predeterminada, los enlaces de los mensajes dentro de la aplicación se abren en la misma pestaña. Configura esta opción como true para que se abran en una pestaña nueva.
openCardsInNewTab boolean false De forma predeterminada, los enlaces de las tarjetas de contenido se abren en la misma pestaña. Configura esta opción como true para que se abran en una pestaña nueva.
requireExplicitInAppMessageDismissal boolean false De forma predeterminada, los mensajes dentro de la aplicación pueden descartarse haciendo clic fuera de ellos o pulsando la tecla Escape. Configura esta opción como true para exigir que los usuarios hagan clic explícitamente en un botón de descarte o en un botón de acción para descartar el mensaje.
devicePropertyAllowlist string[] undefined De forma predeterminada, el SDK de Braze detecta y recopila automáticamente todas las propiedades del dispositivo en DeviceProperties. Para anular este comportamiento, proporciona una matriz de DeviceProperties. Para impedir que se envíe cualquier propiedad a los servidores de Braze, proporciona una matriz vacía. Ten en cuenta que, sin algunas propiedades, no todas las características funcionarán correctamente. Por ejemplo, sin la zona horaria, la entrega según la zona horaria local no funcionará.
serviceWorkerScope string undefined De forma predeterminada, el SDK Web de Braze registrará su service worker con el alcance predeterminado (el directorio del service worker). Proporciona un valor para esta opción para anular ese valor predeterminado y especificar un alcance personalizado para el service worker.

Características principales

Inicialización y configuración

Inicialización básica

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

Opciones avanzadas de inicialización

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

Administración de usuarios

Cambiar de usuario

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

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

Establecer atributos de usuario

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

Establecer la ubicación del usuario

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 de usuario y grupos de suscripción

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

Cerrar sesión del usuario

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

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

In-App Messages

Visualización automática

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

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

Visualización manual

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

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

Gestión personalizada de mensajes dentro de la aplicación

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

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

Registrar interacciones con mensajes dentro de la aplicación

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

Mensajes dentro de la aplicación con HTML personalizado

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

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

Suscribirse a las actualizaciones de Content Cards

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

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

Registrar interacciones con 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);

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

Solicitar la actualización de Content Cards

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

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

Content Cards personalizadas

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

Notificaciones push

Solicitar permiso de push

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

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

Comprobar la compatibilidad con 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');
    }
}

Anular el registro de push

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

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

Conmutadores de características

Obtener un conmutador de características

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

Suscribirse a las actualizaciones de conmutadores de características

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

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

Registrar impresiones de conmutadores de características

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

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

Solicitar la actualización de conmutadores de características

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

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

Banners

Obtener y mostrar Banners

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

Suscribirse a las actualizaciones de Banners

El suscriptor recibe la caché de Banners en memoria del SDK. Una sola actualización puede incluir ubicaciones de actualizaciones anteriores, no solo los ID de ubicación de la llamada más reciente a requestBannersRefresh.

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

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

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

Descartar Banners en una interfaz de usuario personalizada

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

Cuando llamas a dismissBanner(banner), el SDK gestiona el estado de descarte del Banner, lo elimina de las actualizaciones activas de Banners, notifica a los suscriptores del evento de descarte del Banner y sincroniza el descarte con Braze. Las interfaces de usuario personalizadas deben usar subscribeToBannersUpdates para reaccionar cuando se elimina el Banner descartado, en lugar de tratar dismissBanner solo como un cambio local de la interfaz o solo como un método de registro de análisis.

Solicitar la actualización de Banners

requestBannersRefresh() se fusiona con la caché de Banners existente. Solo se añaden, actualizan o eliminan los ID de ubicación que solicitas. Los Banners en caché de otras ubicaciones permanecen en la caché y caducan en su fecha de caducidad original. Si el servidor no devuelve ningún Banner para una ubicación solicitada, esa ubicación se elimina de la caché.

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

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

Análisis y eventos

Registrar eventos personalizados

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

// Simple event
logCustomEvent('button_clicked');

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

Registrar compras

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

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

Solicitar el vaciado de datos

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

// Force immediate data send
requestImmediateDataFlush();

Administración de sesiones

Abrir sesión

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

// Start a new session
openSession();

Comprobar el estado del SDK

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

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

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

Habilitar o deshabilitar el SDK

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

// Disable SDK
disableSDK();

// Re-enable SDK
enableSDK();

Administración de datos

Borrar datos

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

// Remove all locally stored data
wipeData();

Destruir el SDK

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

// Clean up SDK resources
destroy();

Obtener el ID del dispositivo

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

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

Autenticación del SDK

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

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

Suscribirse a los errores de autenticación

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

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

Patrones de integración

Frameworks SSR

Si usas un framework de renderizado del lado del servidor (SSR), como Next.js, es posible que encuentres errores porque el SDK está pensado para ejecutarse en un entorno de navegador. Puedes resolver estos problemas importando el SDK de forma dinámica.

Puedes conservar las ventajas del tree-shaking al hacerlo si exportas las partes del SDK que necesitas en un archivo independiente y luego importas ese archivo de forma dinámica en tu componente.

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

Como alternativa, si usas webpack para empaquetar tu aplicación, puedes aprovechar sus comentarios mágicos para importar de forma dinámica solo las partes del SDK que necesitas.

// 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 usas Vite y ves una advertencia sobre dependencias circulares o Uncaught TypeError: Class extends value undefined is not a constructor or null, puede que tengas que excluir el SDK de Braze de su detección de dependencias:

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

Framework Jest

Cuando uses Jest, es posible que veas un error similar a SyntaxError: Unexpected token 'export'. Para solucionarlo, ajusta tu configuración en package.json para ignorar el SDK de Braze:

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

Definición asíncrona de módulos (AMD)

Desactivar la compatibilidad con AMD

Si tu sitio usa RequireJS u otro cargador de módulos AMD, pero prefieres cargar el SDK Web de Braze a través de la CDN, puedes cargar una versión de la biblioteca que no incluya compatibilidad con AMD. Esta versión de la biblioteca puede cargarse desde la siguiente ubicación de la CDN: https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js

Cargador de módulos

Si usas RequireJS u otros cargadores de módulos AMD, te recomendamos alojar tú mismo una copia de nuestra biblioteca y hacer referencia a ella como lo harías con otros recursos:

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

Páginas móviles aceleradas (AMP)

Para la integración de AMP, tendrás que:

  1. Incluir el script de notificaciones push web de AMP: Añade la etiqueta de script asíncrono a tu head
  2. Añadir widgets de suscripción: Añade widgets para que los usuarios puedan suscribirse o cancelar su suscripción
  3. Añadir archivos auxiliares: Incluye helper-iframe.html y permission-dialog.html
  4. Crear un service worker: Añade el archivo del service worker de Braze
  5. Configurar el elemento de notificaciones push web de AMP: Añade el elemento amp-web-push con tu clave de API y tu URL base como parámetros de consulta

Para obtener instrucciones detalladas sobre la integración de AMP, consulta la Guía para desarrolladores de Braze.

Electron

Electron no admite oficialmente las notificaciones push web (consulta esta incidencia de GitHub). Existen otras soluciones alternativas de código abierto que puedes probar, aunque Braze no las ha probado.

Integración mediante CDN

  • Carga del script: Inicializa el SDK después de que se cargue la etiqueta de script, colocando el código de inicialización después de la etiqueta de script o usando el controlador de eventos onload de la etiqueta de script
  • Acceso global: El SDK está disponible como window.braze cuando se carga a través de la CDN

Service worker (notificaciones push)

  • Obligatorio: Debes incluir el service worker de Braze para que funcionen las notificaciones push
  • Registro predeterminado: De forma predeterminada, el SDK Web de Braze registra y administra tu service worker automáticamente cuando se llama a requestPushPermission(), así como al inicio de cada nueva sesión para los usuarios que ya han concedido el permiso de push. Aun así, tienes que alojar un archivo de service worker en la ubicación esperada que contenga el código del service worker de Braze.
  • Administrar tu propio service worker: Si ya administras un service worker en tu aplicación, establece la opción de inicialización manageServiceWorkerExternally en true, añade el código del service worker de Braze a tu archivo de service worker y regístralo tú mismo con navigator.serviceWorker.register()
  • Permisos de push: Llama a braze.requestPushPermission() en respuesta a interacciones del usuario (por ejemplo, clics en botones). Usa avisos push suaves (interfaz personalizada) antes de solicitar el permiso del navegador

Administradores de etiquetas

Tealium iQ

Tealium iQ ofrece una integración básica de Braze lista para usar. Para configurar la integración, busca Braze en la interfaz de Tealium Tag Management e introduce la clave de API del SDK Web desde tu panel. Para obtener más información o soporte detallado sobre la configuración de Tealium, consulta nuestra documentación de integración o ponte en contacto con tu director de cuentas de Tealium.

Google Tag Manager

El SDK Web puede inicializarse y llamarse desde una etiqueta HTML personalizada en tu contenedor de Google Tag Manager. Consulta nuestra aplicación de ejemplo de Google Tag Manager para ver un ejemplo de envío de eventos a Braze mediante GTM, o consulta nuestra documentación de integración para obtener más información.

Otros administradores de etiquetas

Braze también puede ser compatible con otras soluciones de administración de etiquetas si sigues nuestras instrucciones de integración dentro de una etiqueta HTML personalizada. Ponte en contacto con un representante de Braze si necesitas ayuda para evaluar estas soluciones.


Bibliotecas

La siguiente tabla describe las distribuciones disponibles del SDK Web de Braze.

Nombre Descripción npm URL de CDN
Full SDK completo con interfaz de usuario. Cuando usas la versión de npm, los empaquetadores de JavaScript eliminan el código no utilizado, incluido el código de la interfaz de usuario. @braze/web-sdk https://js.appboycdn.com/web-sdk/7.1/braze.min.js
Core Contiene el SDK sin interfaz de usuario. Implementa tu propia interfaz de usuario para In-App Messages y Content Cards cuando uses esta versión del SDK. Usa la biblioteca completa para la mayoría de las integraciones, porque proporciona elementos de interfaz de usuario personalizables mediante CSS. N/D https://js.appboycdn.com/web-sdk/7.1/braze.core.min.js
No-AMD Contiene el SDK completo sin compatibilidad con AMD. Es útil si tu sitio usa RequireJS u otro cargador de módulos AMD, pero prefieres cargar el SDK a través de la CDN. N/D https://js.appboycdn.com/web-sdk/7.1/braze.no-amd.min.js

Navegadores compatibles

  • Navegadores modernos basados en Chromium (Chrome, Edge, Opera)
  • Firefox
  • Safari

Depuración y solución de problemas

Pasa la opción enableLogging: true a la función de inicialización (braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT', enableLogging: true });) para que Braze registre información en la consola de JavaScript. Esto resulta muy útil durante el desarrollo, pero es visible para todos los usuarios, así que elimina esta opción o proporciona un registrador alternativo antes de publicar tu página en producción.

Font Awesome

Braze utiliza Font Awesome 4.7.0 para los iconos de los mensajes dentro de la aplicación. Para deshabilitar la carga de Font Awesome, utiliza la opción de inicialización doNotLoadFontAwesome. Consulta la hoja de referencia para explorar los iconos disponibles.

Recursos adicionales

Contacto

Si tienes preguntas, ponte en contacto con el soporte técnico de Braze para obtener ayuda.

Para obtener detalles del repositorio y proyectos de ejemplo, consulta https://github.com/braze-inc/braze-web-sdk.

New Stuff!