SDK de Web Push 3.0
Integração
Anchor link toExemplo de integração no GitHub
Obtenha o SDK de Web Push da Pushwoosh e descompacte-o. Você deve ter os seguintes arquivos:
Anchor link to- pushwoosh-service-worker.js
Coloque todos esses arquivos no diretório raiz de nível superior do seu site.
Anchor link toInicialize o SDK:
Anchor link to- Inclua o SDK do nosso CDN assincronamente.
<script type="text/javascript" src="//cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js" async></script>- Inicialize o SDK de Web Push e certifique-se de enfileirar a inicialização até o momento em que o SDK esteja totalmente carregado.
<script type="text/javascript">var Pushwoosh = Pushwoosh || [];Pushwoosh.push(['init', { logLevel: 'info', // valores possíveis: error, info, debug applicationCode: 'XXXXX-XXXXX', // o código da sua aplicação do Painel de Controle Pushwoosh apiToken: 'XXXXXXX', // Token de API de Dispositivo safariWebsitePushID: 'web.com.example.domain', // string de domínio reverso única, obtida no seu Portal de Desenvolvedor Apple. Apenas necessário se você enviar notificações push para o navegador Safari defaultNotificationTitle: 'Pushwoosh', // define um título padrão para notificações push defaultNotificationImage: 'https://yoursite.com/img/logo-medium.png', // URL para imagem de notificação personalizada autoSubscribe: false, // ou true. Se true, solicita que um usuário se inscreva para pushes na inicialização do SDK subscribeWidget: { enable: true }, userId: 'user_id', // opcional, defina um ID de usuário personalizado tags: { 'Name': 'John Smith' // opcional, defina Tags personalizadas }}]);</script>Configuração
Anchor link toPara finalizar a implementação de notificações push em seu site, você precisa configurar as plataformas web em seu Painel de Controle Pushwoosh seguindo nossos guias passo a passo:
Registrando o service worker em um escopo diferente
Anchor link toÀs vezes, você não pode colocar o arquivo do service worker em um diretório raiz de um site, mas em um subdiretório.
Neste caso, modifique a configuração (passo 4.3) adicionando um parâmetro
serviceWorkerUrl: “/push-notifications/pushwoosh-service-worker.js”
onde /push-notifications/pushwoosh-service-worker.js é o caminho para o arquivo pushwoosh-service-worker.js.
Manipuladores de eventos
Anchor link toNo SDK Web da Pushwoosh 3.0, você pode se inscrever em certos eventos para rastreá-los**,** ou cancelar a inscrição de eventos se não precisar mais rastreá-los.
Para rastrear o carregamento do SDK Web 3.0, dispare o evento onLoad da seguinte forma:
// Evento de CarregamentoPushwoosh.push(['onLoad', (api) => { console.log('Pushwoosh carregado!');}]);Para rastrear a inicialização correta do SDK Web, dispare o evento onReady:
// Evento ProntoPushwoosh.push((api) => { console.log('Pushwoosh pronto!');});Para se inscrever ou cancelar a inscrição de qualquer um dos eventos do SDK, use os manipuladores após o carregamento do SDK:
Pushwoosh.push(['onLoad', (api) => { function onEventNameHandler() { console.log('Evento acionado: event-name!'); }
// Para se inscrever em um evento: Pushwoosh.addEventHandler('event-name', onEventNameHandler)
// Para cancelar a inscrição de um evento: Pushwoosh.removeEventHandler('event-name', onEventNameHandler)}]);Eventos do SDK
Anchor link toEvento de inscrição
Anchor link toExecutado depois que um usuário concorda em receber notificações push.
Pushwoosh.push(['onLoad', (api) => { Pushwoosh.addEventHandler('subscribe', (payload) => { console.log('Evento acionado: subscribe'); });}]);Evento de cancelamento de inscrição
Anchor link toExecutado depois que um dispositivo é desregistrado das notificações.
Pushwoosh.push(['onLoad', (api) => { Pushwoosh.addEventHandler('unsubscribe', (payload) => { console.log('Evento acionado: unsubscribe'); });}]);Eventos do widget de inscrição
Anchor link toRastreia a exibição de um widget de Solicitação de Inscrição.
Pushwoosh.push(['onLoad', (api) => { // Executado na exibição do widget de Solicitação de Inscrição Pushwoosh.addEventHandler('show-subscription-widget', (payload) => { console.log('Evento acionado: show-subscription-widget'); });
// Executado ao ocultar o widget de Solicitação de Inscrição Pushwoosh.addEventHandler('hide-subscription-widget', (payload) => { console.log('Evento acionado: hide-subscription-widget'); });}]);Eventos da caixa de diálogo de permissão de notificação
Anchor link toRastreia a exibição da caixa de diálogo de inscrição nativa.
Pushwoosh.push(['onLoad', function (api) { // Executado na exibição da caixa de diálogo de permissão Pushwoosh.addEventHandler('show-notification-permission-dialog', (payload) => { console.log('Evento acionado: show-notification-permission-dialog'); });
// Executado ao ocultar a caixa de diálogo de permissão com um dos três status possíveis: // 1. default - a caixa de diálogo é fechada // 2. granted - a permissão é concedida // 3. denied - a permissão é negada Pushwoosh.addEventHandler('hide-notification-permission-dialog', (payload) => { console.log('Evento acionado: hide-notification-permission-dialog', payload.permission); });}]);Eventos de permissão
Anchor link toVerifica o status da permissão de notificações push na inicialização do SDK; rastreia a atualização deste status sempre que ocorrer.
Pushwoosh.push(['onLoad', (api) => { // Executado durante a inicialização do SDK se 'autoSubscribe: false' ou/e se um usuário ignorar uma solicitação de notificação push. Pushwoosh.addEventHandler('permission-default', (payload) => { console.log('Evento acionado: permission-default'); });
// Executado durante a inicialização do SDK se as notificações estiverem bloqueadas ou uma vez que um usuário bloqueie as notificações push. Pushwoosh.addEventHandler('permission-denied', (payload) => { console.log('Evento acionado: permission-denied'); });
// Executado durante a inicialização do SDK se as notificações forem permitidas ou uma vez que um usuário permita as notificações push. Pushwoosh.addEventHandler('permission-granted', (payload) => { console.log('Evento acionado: permission-granted'); });}]);Evento de recebimento de push
Anchor link toRastreia a entrega de push a um dispositivo.
Pushwoosh.push(['onLoad', (api) => { // Executado quando uma notificação push é exibida. Pushwoosh.addEventHandler('receive-push', (payload) => { console.log('Evento acionado: receive-push', payload.notification); });}]);Eventos de notificação
Anchor link toRastreia se uma notificação push é aberta ou fechada por um usuário.
Pushwoosh.push(['onLoad', (api) => { // Executado quando um usuário clica na notificação. Pushwoosh.addEventHandler('open-notification', (payload) => { console.log('Evento acionado: open-notification', payload.notification); });
// Executado quando um usuário fecha uma notificação push. Pushwoosh.addEventHandler('hide-notification', (payload) => { console.log('Evento acionado: hide-notification', payload.notification); });}]);Eventos da Caixa de Entrada
Anchor link toRastreia notificações enviadas para a Caixa de Entrada.
Pushwoosh.push(['onLoad', (api) => { // Executado pelo ServiceWorker após a Mensagem da Caixa de Entrada ser recebida e salva no indexedDB. Pushwoosh.addEventHandler('receive-inbox-message', (payload) => { console.log('Evento acionado: receive-inbox-message', payload.message); });
// Executado após a Caixa de Entrada ser atualizada automaticamente enquanto a página está carregando. Pushwoosh.addEventHandler('update-inbox-messages', (payload) => { console.log('Evento acionado: receive-inbox-message', payload.messages); });}]);Eventos de pop-up de inscrição personalizada
Anchor link toPara detalhes sobre como lidar com eventos de pop-up de inscrição personalizada, consulte o Guia de Eventos de Pop-up de Inscrição Personalizada.
Após a inicialização do SDK de Web Push, você pode fazer as seguintes chamadas para a API da Pushwoosh. Todos os métodos retornam objetos Promise.
Pushwoosh.push((api) => { // Define tags para um usuário api.setTags({ 'Tag Name 1': 'value1', 'Tag Name 2': 'value2' });
// Obtém tags para um usuário do servidor api.getTags();
// Registra o ID do usuário api.registerUser('user123');
// Registra o e-mail do usuário api.registerEmail('user@example.com');
// Registra o número de SMS api.registerSmsNumber('+15551234567');
// Registra o número do WhatsApp api.registerWhatsappNumber('+1234567890');
// Posta um Evento api.postEvent('myEventName', {attributeName: 'attributeValue'});
//Desregistra das notificações api.unregisterDevice();
// Alternativamente, Multi-registro de usuário com dispositivos e canais api.multiRegisterDevice({ user_id: 'user123', email: 'user@example.com', sms_phone_number: '+1234567890', tags: { 'UserType': { operation: TTagOperationSet, value: 'Premium' }, 'Interests': { operation: TTagOperationAppend, values: ['sports', 'technology'] } } });});multiRegisterDevice
Anchor link toMétodo de registro aprimorado que permite registrar um perfil de usuário com múltiplos dispositivos e canais de mensagens em uma única chamada de API. Este método é particularmente útil para aplicações multiplataforma ou ao implementar estratégias de mensagens omnichannel.
Pushwoosh.push((api) => { api.multiRegisterDevice({ user_id: 'user123', // Opcional: Identificador do usuário email: 'user@example.com', // Opcional: E-mail para mensagens de e-mail sms_phone_number: '+1234567890', // Opcional: Número de telefone SMS (formato E.164) whatsapp_phone_number: '+1234567890', // Opcional: Número do WhatsApp (formato E.164) kakao_phone_number: '+1234567890', // Opcional: Número do KakaoTalk (formato E.164) language: 'en', // Opcional: Código do idioma (ISO 639-1) timezone: 'America/New_York', // Opcional: Identificador de fuso horário city: 'New York', // Opcional: Cidade para segmentação country: 'US', // Opcional: País para segmentação state: 'NY', // Opcional: Estado para segmentação tags: { // Opcional: Valores de tag com operações 'UserType': { operation: TTagOperationSet, // Definir valor da tag (0) value: 'Premium' }, 'Interests': { operation: TTagOperationAppend, // Anexar ao valor da tag (1) values: ['sports', 'technology'] }, 'LoginCount': { operation: TTagOperationIncrement, // Incrementar valor da tag (3) value: '1' } }, push_devices: [ // Opcional: Array de dispositivos push { hwid: 'web-device-456', platform: TPlatformChrome, // Plataforma Chrome (11) push_token: 'fcm-token-here', app_version: '2.1.0', platformData: { public_key: 'web-push-public-key', auth_token: 'web-push-auth-token', browser: 'chrome' } } ] }) .then((response) => { console.log('Multi-registro bem-sucedido:', response); }) .catch((error) => { console.error('Falha no multi-registro:', error); });});Tipos de Plataforma:
TPlatformSafari(10): Plataforma SafariTPlatformChrome(11): Plataforma ChromeTPlatformFirefox(12): Plataforma Firefox
Tipos de Operação de Tag:
TTagOperationSet(0): Definir valor da tag (substitui o valor existente)TTagOperationAppend(1): Anexar ao valor da tag (adiciona à lista)TTagOperationRemove(2): Remover valor da tag (remove da lista)TTagOperationIncrement(3): Incrementar valor da tag (incremento numérico)
Benefícios:
- Chamada de API única: Registre múltiplos dispositivos e canais de uma vez
- Operação atômica: Todos os registros são bem-sucedidos ou falham juntos
- Centrado no usuário: Associa todos os dispositivos a um único perfil de usuário
- Marcação avançada: Suporta operações complexas de tags
- Multiplataforma: Lida com múltiplas plataformas simultaneamente
Exemplo de envio de Tags para a Pushwoosh:
Pushwoosh.push((api) => { var myCustomTags = { 'Tag 1': 123, 'Tag 2': 'some string' }; api.setTags(myCustomTags) .then((res) => { var skipped = res && res.skipped || []; if (!skipped.length) { console.log('sucesso'); } else { console.warn('tags ignoradas:', skipped); } }) .catch((err) => { console.error('erro em setTags:', err); });});Incrementar valor da Tag
Anchor link toPara incrementar um valor de uma Tag Numérica, use o parâmetro operation com o valor ‘increment’ da seguinte forma:
Pushwoosh.push((api) => { api.setTags({ 'Tag 1': { operation: 'increment', value: 1 } })});Anexar valores de Tag
Anchor link toPara anexar novos valores à Tag de Lista existente, use o parâmetro operation com o valor ‘append’ da seguinte forma:
Pushwoosh.push((api) => { api.setTags({ 'Tag 3': { operation: 'append', value: ['Value3'] } })});Remover valor da Tag
Anchor link toPara remover um valor de uma Tag de Lista, use o parâmetro operation com o valor ‘remove’ da seguinte forma:
Pushwoosh.push((api) =>{ api.setTags({ 'Tag 3': { operation: 'remove', value: ['Value2'] } })});Métodos públicos
Anchor link toPushwoosh.subscribe()
Este método é usado para solicitar a permissão de um usuário para notificações push. Se um usuário já estiver inscrito, o método interromperá a execução.
Se um usuário ainda não se inscreveu para pushes:
1. A permissão para notificações push é solicitada.

2. Se um usuário permitir notificações, o evento onSubscribe é acionado.
Pushwoosh.subscribe() é executado automaticamente se autoSubscribe: true. for definido durante a inicialização do SDK.
Chame este método se você escolheu solicitar manualmente a um usuário que se inscreva para pushes usando o parâmetro autoSubscribe: false durante a inicialização:
<button onclick="Pushwoosh.subscribe()">Inscrever-se</button><script> Pushwoosh.push(['onSubscribe', (api) => { console.log('Usuário inscrito com sucesso'); }]);</script>Pushwoosh.unsubscribe()
- O método
/unregisterDeviceé executado. - O evento
onUnsubscribeé acionado.
<button onclick="Pushwoosh.unsubscribe()">Cancelar inscrição</button><script type="text/javascript"> Pushwoosh.push(['onUnsubscribe', (api) => { console.log('Usuário cancelou a inscrição com sucesso'); }]);</script>Pushwoosh.isSubscribed()
Verifica se um usuário está inscrito e retorna um sinalizador verdadeiro/falso.
Pushwoosh.isSubscribed().then((isSubscribed) => { console.log('isSubscribed', isSubscribed);});Pushwoosh.getHWID()
Retorna o HWID da Pushwoosh.
Pushwoosh.getHWID().then((hwid) => { console.log('hwid:', hwid);});Pushwoosh.getPushToken()
Retorna o token de push se estiver disponível.
Pushwoosh.getPushToken().then((pushToken) => { console.log('pushToken:', pushToken);});Pushwoosh.getUserId()
Retorna o ID do Usuário se disponível.
Pushwoosh.getUserId().then((userId) => { console.log('userId:', userId);});Pushwoosh.getParams()
Retorna uma lista dos seguintes parâmetros:
Pushwoosh.getParams().then((params) => { params = params || {}; var hwid = params.hwid; var pushToken = params.pushToken; var userId = params.userId;});Pushwoosh.isAvailableNotifications()
Verifica se um navegador suporta o WebSDK 3.0 da Pushwoosh, retorna ‘true’ ou ‘false’.
Pushwoosh.isAvailableNotifications() // true/falseMétodos InboxMessages
Anchor link tomessagesWithNoActionPerformedCount(): Promise<number>
Retorna o número de mensagens abertas.
Pushwoosh.pwinbox.messagesWithNoActionPerformedCount() .then((count) => { console.log(`${count} mensagens abertas`); });unreadMessagesCount()
Retorna o número de mensagens não lidas.
Pushwoosh.pwinbox.unreadMessagesCount() .then((count) => { console.log(`${count} mensagens não lidas`); });messagesCount(): Promise<number>
Retorna o número total de mensagens.
Pushwoosh.pwinbox.messagesCount() .then((count) => { console.log(`${count} mensagens`); });loadMessages(): Promise<Array>
Carrega a lista de mensagens não excluídas.
Pushwoosh.pwinbox.loadMessages() .then(() => { console.log('As mensagens foram carregadas'); });readMessagesWithCodes(codes: Array<string>): Promise<void>
Marca mensagens como lidas por Inbox_Ids.
Pushwoosh.pwinbox.readMessagesWithCodes(codes) .then(() => { console.log('As mensagens foram lidas'); });performActionForMessageWithCode(code: string): Promise<void>
Executa a ação atribuída a uma mensagem e marca a mensagem como lida.
Pushwoosh.pwinbox.performActionForMessageWithCode(code) .then(() => { console.log('A ação foi executada'); });deleteMessagesWithCodes(codes: Array<string>): Promise<void>
Marca mensagens como excluídas.
Pushwoosh.pwinbox.deleteMessagesWithCodes([code]) .then(() => { console.log('As mensagens foram excluídas'); });syncMessages(): Promise<void>
Sincroniza mensagens com o servidor.
Pushwoosh.pwinbox.syncMessages() .then(() => { console.log('As mensagens foram sincronizadas'); });Suporte a Progressive Web App
Anchor link toPara integrar a Pushwoosh em sua Progressive Web Application (PWA), siga os passos descritos abaixo.
1. Copie o caminho para o seu arquivo Service Worker:
if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/service-worker.js') // <- url do seu service worker });}Em seguida, use o parâmetro serviceWorkerUrl ao inicializar o WebSDK da seguinte forma:
var Pushwoosh = Pushwoosh || [];Pushwoosh.push(['init', { logLevel: 'error', applicationCode: 'XXXXX-XXXXX', safariWebsitePushID: 'web.com.example.domain', defaultNotificationTitle: 'Pushwoosh', defaultNotificationImage: 'https://yoursite.com/img/logo-medium.png', serviceWorkerUrl: '/service-worker.js', // <- url do seu service worker}]);O WebSDK não registra o novo Service Worker imediatamente; um Service Worker é registrado quando necessário:
- quando um dispositivo recebe um token de push (no registro do dispositivo ou reinscrição),
- quando um token de push é excluído (ao remover um dispositivo da base de usuários).
Isso acelera o carregamento de suas páginas, diminuindo o número de solicitações ao servidor.
Os navegadores não permitem que dois Service Workers diferentes sejam registrados ao mesmo tempo (leia mais: https://github.com/w3c/ServiceWorker/issues/921), então para que sua PWA funcione corretamente, um Service Worker comum deve ser registrado para sua base de código e a base de código da Pushwoosh.
2. Adicione a seguinte string ao seu Service Worker (no início ou no final, não importa):
importScripts('https://cdn.pushwoosh.com/webpush/v3/pushwoosh-service-worker.js' + self.location.search);Assim, você habilita o recebimento e processamento de notificações push enviadas através dos serviços da Pushwoosh para o seu Service Worker.
Instalando a partir do Google Tag Manager
Anchor link toUse o seguinte código em seu Google Tag Manager para inicializar o SDK da Pushwoosh. Crie uma Tag HTML Personalizada e cole o código abaixo. Certifique-se de alterar o Código da sua Aplicação Pushwoosh, o ID do Site Safari e a URL da imagem de notificação padrão.
Também defina uma alta prioridade de Disparo da Tag (ex: 100) e acione-a em Todas as Páginas. Veja abaixo uma captura de tela.Copiar
<script type="text/javascript" src="//cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js" async></script><script type="text/javascript"> var Pushwoosh = Pushwoosh || []; Pushwoosh.push(['init', { logLevel: 'error', applicationCode: 'XXXXX-XXXXX', safariWebsitePushID: 'web.com.example.domain', defaultNotificationTitle: 'Pushwoosh', defaultNotificationImage: 'https://yoursite.com/img/logo-medium.png', autoSubscribe: true, subscribeWidget: { enable: false }, userId: 'user_id' }]);</script>