Guia do repositório do Web SDK
Sobre o Braze Web SDK
O Braze Web SDK permite integrar a plataforma de engajamento do cliente da Braze diretamente nos seus aplicativos web. Desenvolvido com TypeScript e projetado para o desenvolvimento web moderno, este SDK oferece ferramentas abrangentes para gerenciamento de usuários, envio de mensagens, análise de dados e Feature Flags.
O que você pode fazer
- Gerenciamento de usuários: Rastreie e gerencie identidades, atributos e comportamentos de usuários em todo o seu aplicativo web
- In-App Messages: Exiba mensagens e notificações direcionadas aos usuários enquanto eles estão usando ativamente o seu site
- Content Cards: Mostre feeds de conteúdo personalizados e cartões promocionais que são atualizados em tempo real
- Banners: Exiba mensagens em formato de banner em posições específicas dentro do seu site
- Notificações por push: Envie notificações por push para a web para engajar os usuários mesmo quando eles não estão no seu site
- Feature Flags: Controle a liberação de recursos e testes A/B com gerenciamento de Feature Flags no lado do servidor
- Análise de dados: Rastreie eventos personalizados, interações de usuários e métricas de conversão
- Gerenciamento de sessões: Monitore sessões de usuários e padrões de engajamento
Seja para criar um aplicativo de página única, um site de e-commerce ou uma plataforma de conteúdo, o Braze Web SDK oferece as ferramentas necessárias para criar experiências de usuário personalizadas e envolventes que impulsionam o crescimento e a retenção.
Pré-requisitos
Antes de integrar o Braze Web SDK, você precisará de:
- Conta na Braze: Uma conta na Braze com acesso à API
- Chave de API: A chave de API do seu app no dashboard da Braze
- Endpoint do SDK: A URL do endpoint do SDK da Braze (por exemplo,
sdk.iad-01.braze.com)
Obtendo suas credenciais
- Chave de API: Encontrada no dashboard da Braze em Configurações > Chaves de API
- Endpoint do SDK: Localizado em Configurações > Autenticação do SDK > Endpoints
- Service Worker: Necessário para notificações por push (consulte a seção Notificações por push)
Instalação
npm install --save @braze/web-sdk
# or, using yarn:
# yarn add @braze/web-sdk
Início rápido
O snippet a seguir mostra a configuração mínima necessária para inicializar o Braze Web SDK.
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');
Referência de configuração
Opções de inicialização
A função initialize aceita um objeto de opções com as seguintes propriedades:
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
baseUrl |
string |
Obrigatória | Essa opção é obrigatória para configurar o Braze Web SDK de modo que ele use o endpoint apropriado para a sua integração. Por exemplo: braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'sdk.iad-03.braze.com' }) |
enableLogging |
boolean |
false |
Defina como true para ativar o registro de logs por padrão. Isso fará com que a Braze registre logs no console do JavaScript, que é visível para todos os usuários! Você provavelmente deve remover essa opção ou fornecer um logger alternativo com setLogger antes de colocar sua página em produção. |
allowUserSuppliedJavascript |
boolean |
false |
Por padrão, o Braze Web SDK não permite ações de clique em JavaScript fornecidas pelo usuário, nem ativa In-App Messages em HTML e Banners, pois isso possibilita que os usuários do dashboard da Braze executem JavaScript no seu site. Para indicar que você confia nos usuários do dashboard da Braze para escrever ações de clique em JavaScript não maliciosas, defina esta propriedade como true. |
doNotLoadFontAwesome |
boolean |
false |
A Braze usa Font Awesome para os ícones de mensagens no app. Por padrão, a Braze carrega automaticamente o FontAwesome 4.7.0 a partir da CDN do FontAwesome. Para desativar esse comportamento (por exemplo, porque seu site usa uma versão personalizada do FontAwesome), defina esta opção como true. Se fizer isso, você será responsável por garantir que o FontAwesome esteja carregado no seu site, caso contrário as mensagens no app podem não ser exibidas corretamente. |
inAppMessageZIndex |
number |
999999 |
Por padrão, o Braze SDK exibe In-App Messages com z-index de 999999. Forneça um valor para esta opção para substituir esse padrão. |
sessionTimeoutInSeconds |
number |
30 |
Por padrão, uma sessão expira após 30 segundos de inatividade. Forneça um valor para esta opção para substituir esse padrão. |
deviceId |
string |
Gerado automaticamente | Por padrão, a Braze atribui um GUID aleatório como ID do dispositivo. Forneça um valor para esta opção de configuração para substituir esse padrão com um valor próprio. |
appVersion |
string |
undefined |
Se você fornecer um valor para esta opção, os eventos do usuário enviados à Braze serão associados à versão informada, que pode ser usada para segmentação de usuários. |
appVersionNumber |
string |
undefined |
Um valor numérico de versão do app que pode ser usado para segmentação de usuários. Esse valor deve conter quatro campos, como “1.2.3.4”, caso contrário será ignorado. Nota: appVersion também deve ser definido, com o mesmo valor ou com um nome exclusivo para esta versão. |
contentSecurityNonce |
string |
undefined |
Se você fornecer um valor para esta opção, o Braze SDK adicionará o nonce a todos os elementos <script> e <style> criados pelo SDK. Isso pode ser usado para permitir que o Braze SDK funcione com a Content Security Policy do seu site. Além de definir esse nonce, talvez seja necessário permitir o carregamento do FontAwesome, o que pode ser feito adicionando use.fontawesome.com à lista de permissões da sua Content Security Policy ou usando a opção doNotLoadFontAwesome e carregando-o manualmente. |
noCookies |
boolean |
false |
Por padrão, o Braze Web SDK utiliza cookies. Para desativar o uso de cookies, defina esta opção como true. A desativação de cookies pode afetar a capacidade do SDK de lembrar a identidade dos usuários entre sessões. |
allowCrawlerActivity |
boolean |
false |
Por padrão, o Braze Web SDK ignora atividades de spiders ou web crawlers conhecidos, como o Google, com base na string do user agent. Isso economiza pontos de dados, torna a análise de dados mais precisa e pode melhorar o posicionamento nos mecanismos de busca. No entanto, se quiser que a Braze registre a atividade desses crawlers, você pode definir esta opção como true. |
disablePushTokenMaintenance |
boolean |
false |
Por padrão, os usuários que já concederam permissão de push para a web (por exemplo, por meio de requestPushPermission ou de um provedor de push anterior) terão seu token por push sincronizado automaticamente com o backend da Braze em novas sessões para garantir a entregabilidade. Para desativar esse comportamento, defina esta opção como true. |
enableSdkAuthentication |
boolean |
false |
Defina como true para ativar o recurso de autenticação do SDK. Para saber mais sobre a autenticação do SDK, consulte nossa documentação do produto. |
manageServiceWorkerExternally |
boolean |
false |
Por padrão, o Braze Web SDK gerencia seu próprio service worker para notificações por push. Se você já gerencia um service worker na sua aplicação e deseja incorporar a funcionalidade do service worker da Braze nele, defina esta opção como true e inclua o código do service worker da Braze no seu arquivo de service worker. |
minimumIntervalBetweenTriggerActionsInSeconds |
number |
30 |
Por padrão, as ações-gatilho (por exemplo, exibir uma mensagem no app) podem ser disparadas no máximo uma vez a cada 30 segundos por usuário. Forneça um valor para esta opção para substituir esse padrão. |
serviceWorkerLocation |
string |
undefined |
Por padrão, o Braze Web SDK procura o arquivo do service worker na raiz do seu domínio. Forneça um valor para esta opção para substituir esse padrão e especificar um local personalizado para o arquivo do service worker. |
safariWebsitePushId |
string |
undefined |
Obrigatória para notificações por push no Safari. Esse valor pode ser encontrado na sua conta de desenvolvedor da Apple. Para saber mais sobre como configurar notificações por push no Safari, consulte nossa documentação do produto. |
localization |
string |
undefined |
Se você fornecer um valor para esta opção, o Braze SDK tentará exibir mensagens no app e Content Cards no idioma informado. |
openInAppMessagesInNewTab |
boolean |
false |
Por padrão, os links em mensagens no app são abertos na mesma guia. Defina esta opção como true para que sejam abertos em uma nova guia. |
openCardsInNewTab |
boolean |
false |
Por padrão, os links em cartões de conteúdo são abertos na mesma guia. Defina esta opção como true para que sejam abertos em uma nova guia. |
requireExplicitInAppMessageDismissal |
boolean |
false |
Por padrão, as mensagens no app podem ser descartadas clicando fora delas ou pressionando a tecla Escape. Defina esta opção como true para exigir que os usuários cliquem explicitamente em um botão de descartar ou de ação para fechar a mensagem. |
devicePropertyAllowlist |
string[] |
undefined |
Por padrão, o Braze SDK detecta e coleta automaticamente todas as propriedades do dispositivo em DeviceProperties. Para substituir esse comportamento, forneça um array de DeviceProperties. Para desativar o envio de todas as propriedades aos servidores da Braze, forneça um array vazio. Sem algumas propriedades, nem todos os recursos funcionarão corretamente. Por exemplo, sem o fuso horário, a entrega no fuso local não funcionará. |
serviceWorkerScope |
string |
undefined |
Por padrão, o Braze Web SDK registra seu service worker com o escopo padrão (o diretório do service worker). Forneça um valor para esta opção para substituir esse padrão e especificar um escopo personalizado para o service worker. |
Recursos principais
Inicialização e configuração
Inicialização 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();
Opções avançadas de inicialização
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'
});
Gerenciamento de usuários
Alterar usuário
import { changeUser } from "@braze/web-sdk";
// Change to a new user
changeUser('user-123');
Definir atributos do usuário
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());
}
Definir localização do usuário
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);
}
Aliases de usuário e grupos de inscrições
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');
}
Logout do usuário
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
Exibição automática
import { automaticallyShowInAppMessages } from "@braze/web-sdk";
// Automatically show in-app messages
automaticallyShowInAppMessages();
Exibição manual
import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";
// Subscribe to in-app messages
subscribeToInAppMessage((inAppMessage) => {
// Show the message
showInAppMessage(inAppMessage);
});
Tratamento personalizado de mensagens no app
import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";
subscribeToInAppMessage((inAppMessage) => {
// Custom logic before showing
if (inAppMessage.getExtras()['priority'] === 'high') {
showInAppMessage(inAppMessage);
}
});
Registrar interações com mensagens no 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);
Mensagens no app com 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
Exibir 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);
Inscrever-se para atualizações de Content Cards
import { subscribeToContentCardsUpdates } from "@braze/web-sdk";
subscribeToContentCardsUpdates((cards) => {
console.log('Content cards updated:', cards);
// Display cards or update UI
});
Registrar interações com 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 atualização de Content Cards
import { requestContentCardsRefresh } from "@braze/web-sdk";
requestContentCardsRefresh(
() => console.log('Content cards refreshed'),
() => console.log('Failed to refresh content cards')
);
Content Cards personalizados
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)
};
Notificações por push
Solicitar permissão de push
import { requestPushPermission } from "@braze/web-sdk";
requestPushPermission(
() => console.log('Push permission granted'),
() => console.log('Push permission denied')
);
Verificar suporte a 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');
}
}
Cancelar registro de push
import { unregisterPush } from "@braze/web-sdk";
unregisterPush(
() => console.log('Successfully unregistered'),
() => console.log('Failed to unregister')
);
Feature Flags
Obter 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
}
}
Inscrever-se para atualizações de Feature Flags
import { subscribeToFeatureFlagsUpdates } from "@braze/web-sdk";
subscribeToFeatureFlagsUpdates((featureFlags) => {
featureFlags.forEach(flag => {
console.log(`Feature flag ${flag.getId()}: ${flag.getBooleanProperty('enabled')}`);
});
});
Registrar impressões de Feature Flags
import { logFeatureFlagImpression } from "@braze/web-sdk";
const featureFlag = getFeatureFlag('new_feature');
if (featureFlag) {
logFeatureFlagImpression(featureFlag);
}
Solicitar atualização de Feature Flags
import { refreshFeatureFlags } from "@braze/web-sdk";
refreshFeatureFlags(
() => console.log('Feature flags refreshed'),
() => console.log('Failed to refresh feature flags')
);
Banners
Obter e exibir 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);
}
Inscrever-se para atualizações de banners
O assinante recebe o cache de banners em memória do SDK. Uma única atualização pode incluir posicionamentos de atualizações anteriores, não apenas os IDs de posicionamento da chamada requestBannersRefresh mais recente.
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);
}
});
});
Dispensar banners em uma UI 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.
});
Quando você chama dismissBanner(banner), o SDK gerencia o estado de dispensa do banner, remove o banner das atualizações de banners ativos, notifica os assinantes do evento de dispensa do banner e sincroniza a dispensa com a Braze. UIs personalizadas devem usar subscribeToBannersUpdates para reagir à remoção do banner dispensado, em vez de tratar dismissBanner apenas como uma alteração local da UI ou apenas como um método de registro de análise de dados.
Solicitar atualização de banners
requestBannersRefresh() mescla com o cache de banners existente. Somente os IDs de posicionamento que você solicitar serão adicionados, atualizados ou removidos. Banners em cache de outros posicionamentos permanecem no cache e expiram no tempo de vencimento original. Se o servidor não retornar nenhum banner para um posicionamento solicitado, esse posicionamento será removido do cache.
import { requestBannersRefresh } from "@braze/web-sdk";
requestBannersRefresh(
["placement_1", "placement_2"],
() => console.log('Banners refreshed'),
() => console.log('Failed to refresh banners')
);
Análise de dados e 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 envio imediato de dados
import { requestImmediateDataFlush } from "@braze/web-sdk";
// Force immediate data send
requestImmediateDataFlush();
Gerenciamento de sessões
Abrir sessão
import { openSession } from "@braze/web-sdk";
// Start a new session
openSession();
Verificar status do SDK
import { isInitialized, isDisabled } from "@braze/web-sdk";
if (isInitialized()) {
console.log('SDK is initialized');
if (isDisabled()) {
console.log('SDK is disabled');
}
}
Ativar/desativar o SDK
import { enableSDK, disableSDK } from "@braze/web-sdk";
// Disable SDK
disableSDK();
// Re-enable SDK
enableSDK();
Gerenciamento de dados
Limpar dados
import { wipeData } from "@braze/web-sdk";
// Remove all locally stored data
wipeData();
Destruir o SDK
import { destroy } from "@braze/web-sdk";
// Clean up SDK resources
destroy();
Obter ID do dispositivo
import { getDeviceId } from "@braze/web-sdk";
const deviceId = getDeviceId();
console.log('Device ID:', deviceId);
Autenticação do SDK
import { setSdkAuthenticationSignature } from "@braze/web-sdk";
// Set authentication signature
setSdkAuthenticationSignature('your-signature-here');
Inscrever-se para falhas de autenticação
import { subscribeToSdkAuthenticationFailures } from "@braze/web-sdk";
subscribeToSdkAuthenticationFailures((error) => {
console.log('Authentication failed:', error);
// Provide new signature
setSdkAuthenticationSignature('new-signature');
});
Padrões de integração
Frameworks SSR
Se você usa um framework de renderização no lado do servidor (SSR), como o Next.js, pode encontrar erros porque o SDK foi projetado para ser executado em um ambiente de navegador. Você pode resolver esses problemas importando o SDK dinamicamente.
É possível manter os benefícios do tree-shaking ao fazer isso, exportando as partes do SDK que você precisa em um arquivo separado e, em seguida, importando dinamicamente esse arquivo no seu 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, se você estiver usando o webpack para empacotar seu app, pode aproveitar os comentários mágicos para importar dinamicamente apenas as partes do SDK que você precisa.
// 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
Se você usa o Vite e vê um alerta sobre dependências circulares ou Uncaught TypeError: Class extends value undefined is not a constructor or null, pode ser necessário excluir o SDK da Braze da descoberta de dependências:
export default {
optimizeDeps: {
exclude: ['@braze/web-sdk']
}
}
Framework Jest
Ao usar o Jest, você pode ver um erro semelhante a SyntaxError: Unexpected token 'export'. Para corrigir isso, ajuste sua configuração no package.json para ignorar o SDK da Braze:
{
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!@braze)"
]
}
}
Asynchronous Module Definition (AMD)
Desativar o suporte a AMD
Se o seu site usa RequireJS ou outro carregador de módulos AMD, mas você prefere carregar o Braze Web SDK via CDN, é possível carregar uma versão da biblioteca que não inclui suporte a AMD. Essa versão da biblioteca pode ser carregada a partir do local da CDN: https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js
Carregador de módulos
Se você usa RequireJS ou outros carregadores de módulos AMD, recomendamos hospedar uma cópia da nossa biblioteca e referenciá-la da mesma forma que faria com outros recursos:
require(['path/to/braze.min.js'], function(braze) {
braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT' });
braze.automaticallyShowInAppMessages();
braze.openSession();
});
Accelerated Mobile Pages (AMP)
Para a integração com AMP, você precisará:
- Incluir o script de push para a web AMP: adicione a tag de script assíncrono ao seu head
- Adicionar widgets de inscrição: adicione widgets para permitir que os usuários façam ou cancelem inscrições
- Adicionar arquivos auxiliares: inclua
helper-iframe.htmlepermission-dialog.html - Criar o service worker: adicione o arquivo do service worker da Braze
- Configurar o elemento amp-web-push: adicione o elemento
amp-web-pushcom sua chave de API e URL base como parâmetros de consulta
Para instruções detalhadas de integração AMP, consulte o Guia do desenvolvedor da Braze.
Electron
O Electron não oferece suporte oficial a notificações por push para a web (veja: esta issue no GitHub). Existem outras soluções alternativas de código aberto que você pode experimentar, mas que não foram testadas pela Braze.
Integração via CDN
- Carregamento do script: inicialize após o carregamento da tag de script, colocando o código de inicialização depois da tag, ou use o manipulador de evento
onloadda tag de script - Acesso global: o SDK fica disponível como
window.brazequando carregado via CDN
Service worker (notificações por push)
- Obrigatório: é necessário incluir o service worker da Braze para que as notificações por push funcionem
- Registro padrão: por padrão, o Braze Web SDK registra e gerencia seu service worker automaticamente quando
requestPushPermission()é chamado, assim como no início de cada nova sessão para usuários que já concederam permissão de push. Você ainda precisa hospedar um arquivo de service worker no local esperado contendo o código do service worker da Braze. - Gerenciar seu próprio service worker: se você já gerencia um service worker no seu aplicativo, defina a opção de inicialização
manageServiceWorkerExternallycomotrue, adicione o código do service worker da Braze ao seu arquivo de service worker e registre-o você mesmo usandonavigator.serviceWorker.register() - Permissões de push: chame
braze.requestPushPermission()em resposta a interações do usuário (por exemplo, cliques em botões). Use solicitações de push suaves (UI personalizada) antes de solicitar a permissão do navegador
Gerenciadores de tags
Tealium iQ
O Tealium iQ oferece uma integração básica e pronta para uso com a Braze. Para configurar a integração, pesquise por Braze na interface de gerenciamento de tags do Tealium e forneça a chave de API do Web SDK do seu dashboard. Para mais detalhes ou suporte aprofundado de configuração do Tealium, confira nossa documentação de integração ou entre em contato com seu gerente de conta Tealium.
Google Tag Manager
O Web SDK pode ser inicializado e chamado a partir de uma tag HTML personalizada no seu contêiner do Google Tag Manager. Confira nosso app de exemplo do Google Tag Manager para ver um exemplo de envio de eventos para a Braze via GTM, ou consulte nossa documentação de integração para mais detalhes.
Outros gerenciadores de tags
A Braze também pode ser compatível com outras soluções de gerenciamento de tags seguindo nossas instruções de integração dentro de uma tag HTML personalizada. Entre em contato com um representante da Braze se precisar de ajuda para avaliar essas soluções.
Bibliotecas
A tabela a seguir descreve as distribuições disponíveis do Braze Web SDK.
| Nome | Descrição | npm | URL do CDN |
|---|---|---|---|
| Full | SDK completo com interface. Ao usar a versão npm, os empacotadores JavaScript removem o código não utilizado, incluindo o código de interface. | @braze/web-sdk |
https://js.appboycdn.com/web-sdk/7.0/braze.min.js |
| Core | Contém o SDK sem interface. Implemente sua própria interface para In-App Messages e Content Cards ao usar esta versão do SDK. Use a biblioteca completa para a maioria das integrações, pois ela oferece elementos de interface personalizáveis por CSS. | N/A | https://js.appboycdn.com/web-sdk/7.0/braze.core.min.js |
| No-AMD | Contém o SDK completo sem suporte a AMD. Isso é útil se o seu site usa RequireJS ou outro carregador de módulos AMD, mas você prefere carregar o SDK pelo CDN. | N/A | https://js.appboycdn.com/web-sdk/7.0/braze.no-amd.min.js |
Navegadores compatíveis
- Navegadores modernos baseados em Chromium (Chrome, Edge, Opera)
- Firefox
- Safari
Depuração e solução de problemas
Passe a opção enableLogging: true para a função de inicialização (braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT', enableLogging: true });) para que a Braze registre logs no console do JavaScript. Isso é útil durante o desenvolvimento, mas fica visível para todos os usuários. Por isso, remova essa opção ou forneça um logger alternativo antes de colocar sua página em produção.
Font Awesome
A Braze usa Font Awesome 4.7.0 para ícones de mensagens no app. Para desativar o carregamento do Font Awesome, use a opção de inicialização doNotLoadFontAwesome. Confira a folha de referência para ver os ícones disponíveis.
Recursos adicionais
Contato
Para dúvidas, entre em contato com o suporte técnico da Braze para obter assistência.
Para detalhes do repositório e projetos de exemplo, consulte https://github.com/braze-inc/braze-web-sdk.