Ir para o conteúdo

Inscrições de eventos

Saiba como as inscrições de eventos do SDK da Braze funcionam para Banners, Content Cards e Feature Flags. Este artigo explica quando cada evento é disparado e o que sua integração deve fazer a respeito.

Pré-requisitos

Estas são as versões mínimas do SDK necessárias para usar inscrições de eventos:

Sobre inscrições de eventos

Cada canal possui um método de inscrição de eventos. Você registra um retorno de chamada, e o SDK o invoca toda vez que algo acontece naquele canal, como uma reprodução de cache, uma atualização concluída, um evento de análise de dados ou um erro. Cada evento informa qual tipo de evento você recebeu.

Os métodos de inscrição de eventos substituem os métodos mais antigos de inscrição de atualização. Os métodos antigos entregam apenas os dados atuais. Os métodos de eventos também informam por que os dados mudaram, quando eventos de análise de dados são registrados e enviados, e quando uma solicitação falha.

Canal Método de inscrição de eventos Substitui Guia
Banners subscribeToBannersEvents subscribeToBannersUpdates Gerenciar posicionamentos de Banner
Content Cards subscribeToContentCardsEvents subscribeToContentCardsUpdates Criar Content Cards
Feature Flags subscribeToFeatureFlagsEvents subscribeToFeatureFlagsUpdates Criar Feature Flags
Canal Método de inscrição de eventos Substitui Guia
Banners braze.banners.subscribeToEvents(_:) subscribeToUpdates(_:) Gerenciar posicionamentos de Banner
Content Cards braze.contentCards.subscribeToEvents(_:) subscribeToUpdates(_:) Criar Content Cards
Feature Flags braze.featureFlags.subscribeToEvents(_:) subscribeToUpdates(_:) Criar Feature Flags

Para a referência completa da API, consulte a documentação do BrazeKit.

Cada canal também possui uma propriedade eventsStream que entrega os mesmos eventos como um AsyncStream. Apps em Objective-C usam o método subscribeToEvents: nos mesmos objetos de canal.

Canal Método de inscrição de eventos Classe de evento Substitui Guia
Banners subscribeToBannersEvents BannersEvent subscribeToBannersUpdates Gerenciar posicionamentos de Banner
Content Cards subscribeToContentCardsEvents ContentCardsEvent subscribeToContentCardsUpdates Criar Content Cards
Feature Flags subscribeToFeatureFlagsEvents FeatureFlagsEvent subscribeToFeatureFlagsUpdates Criar Feature Flags

Para a referência completa da API, consulte a KDoc do SDK Android da Braze.

Nomes por plataforma

Este artigo usa os nomes da Web para tipos de evento, motivos de atualização, estados de nova tentativa, ações de análise de dados e motivos de erro. Swift e Android usam os mesmos conceitos com nomes que seguem as convenções de cada plataforma.

Web Swift Android
CACHE_REPLAY cacheReplay CacheReplay
CACHE_LOAD cacheLoad CacheLoad
DATA_UPDATED dataUpdated DataUpdated
IMPRESSION impressionEvent ImpressionEvent
CLICK clickEvent ClickEvent
DISMISS dismissEvent DismissEvent
ERROR error ErrorEvent
AUTO_SERVER_REFRESH autoServerRefresh AUTO_SERVER_REFRESH
SDK_WILL_RETRY sdkWillRetry SDK_WILL_RETRY
ENQUEUED enqueued ENQUEUED
SERVER_ERROR .common(.serverError) Common(ErrorReason.ServerError)
FEATURE_DISABLED .featureDisabled FeatureDisabled

Os demais motivos de atualização, estados de nova tentativa, ações de análise de dados e motivos de erro seguem o mesmo padrão. No Swift, o tipo de motivo de atualização é Braze.ChannelUpdateReason. No Android, cada canal possui seu próprio tipo de motivo de atualização, como BannersUpdateReason.

Como os eventos são entregues

O SDK entrega eventos nesta ordem:

  1. Quando você se inscreve: O SDK invoca seu retorno de chamada imediatamente com um evento CACHE_REPLAY contendo os dados em cache. Se o canal estiver desativado, ele envia um evento ERROR com o motivo FEATURE_DISABLED. Em ambos os casos, sua inscrição permanece ativa.
  2. Quando o cache muda: O SDK envia um evento CACHE_LOAD se o cache mudou sem uma atualização do servidor, ou um evento DATA_UPDATED se uma atualização foi concluída ou se você alterou os dados localmente.
  3. Quando você ou o SDK registram análise de dados: O SDK envia um evento IMPRESSION, CLICK ou DISMISS com a ação ENQUEUED, e o envia novamente com a ação FLUSHED após a Braze aceitá-lo.
  4. Quando algo falha: O SDK envia um evento ERROR.

Seu retorno de chamada recebe o evento como seu único argumento. Trate cada tipo de evento com um switch sobre o tipo do evento. Na Web, o SDK registra um erro que seu retorno de chamada lança e ainda entrega o evento para outros assinantes.

import * as braze from "@braze/web-sdk";

// Register the subscription
const subscriptionId = braze.subscribeToBannersEvents((event) => {
  switch (event.type) {
    case braze.ChannelEventType.CACHE_REPLAY:
      // Sent once, right away, with the cached data
      break;
    case braze.ChannelEventType.DATA_UPDATED:
      // A refresh finished or the data changed locally
      break;
    case braze.ChannelEventType.ERROR:
      // A request or analytics operation failed
      break;
  }
});

// Remove the subscription when you no longer need it
braze.removeSubscription(subscriptionId);
// Register the subscription and keep a strong reference to it
let cancellable = AppDelegate.braze?.banners.subscribeToEvents { event in
  switch event {
  case .cacheReplay(let cacheSnapshot):
    // Sent once, right away, with the cached data
    break
  case .dataUpdated(let cacheSnapshot, let reason):
    // A refresh finished or the data changed locally
    break
  case .error(let reason, let retryState):
    // A request or analytics operation failed
    break
  default:
    break
  }
}

// Remove the subscription when you no longer need it
cancellable?.cancel()
// Register the subscription
val subscriber = IEventSubscriber<BannersEvent> { event ->
  when (event) {
    is BannersEvent.CacheReplay -> {
      // Sent once, right away, with the cached data
    }
    is BannersEvent.DataUpdated -> {
      // A refresh finished or the data changed locally
    }
    is BannersEvent.ErrorEvent -> {
      // A request or analytics operation failed
    }
    else -> Unit
  }
}
Braze.getInstance(context).subscribeToBannersEvents(subscriber)

// Remove the subscription when you no longer need it
Braze.getInstance(context).removeSingleSubscription(subscriber, BannersEvent::class.java)

Snapshots de cache

Eventos CACHE_REPLAY, CACHE_LOAD e DATA_UPDATED incluem uma propriedade cacheSnapshot com os dados que o SDK armazenou em cache para o usuário atual.

Canal Dados em cacheSnapshot
Banners banners: um mapa de cada ID de posicionamento para seu Banner em cache. Posicionamentos sem um Banner não estão no mapa.
Content Cards Web: contentCards, um objeto ContentCards. Use contentCards.cards para obter a lista de cartões. Swift e Android: cards, a lista de cartões.
Feature Flags featureFlags: a lista de Feature Flags.

Todo snapshot também inclui lastSyncAt, o horário da última sincronização bem-sucedida para o usuário atual como um timestamp Unix em segundos. O valor é 0 se nenhuma sincronização foi bem-sucedida e null (nil no Swift) se o canal estiver desativado.

Migrar das inscrições de atualização

Os métodos de inscrição de atualização ainda funcionam, mas estão descontinuados. Para migrar cada inscrição, depois de atender aos pré-requisitos:

  1. Substitua o método descontinuado pelo método de inscrição de eventos para aquele canal. As tabelas em Sobre inscrições de eventos listam cada par.
  2. Atualize seu retorno de chamada. O retorno de chamada antigo recebia apenas os dados atuais. O novo retorno de chamada recebe um evento, então verifique o tipo do evento. Para eventos CACHE_REPLAY, CACHE_LOAD e DATA_UPDATED, leia os dados de cacheSnapshot e renderize novamente.
  3. (Opcional) Trate eventos ERROR para descobrir quando uma atualização ou uma operação de análise de dados falha. No Android, eles substituem subscribeToBannersErrors. Para mais detalhes, consulte Motivos de erro.
  4. Remova a inscrição. No Android, passe a nova classe de evento (BannersEvent, ContentCardsEvent ou FeatureFlagsEvent) para removeSingleSubscription, e não a classe legada …UpdatedEvent.

Para exemplos de código antes e depois, consulte o guia de cada canal nas tabelas em Sobre inscrições de eventos.

Tipos de evento

Todo evento é um dos tipos de evento nesta tabela. Na Web, o evento tem uma propriedade type com um dos valores de ChannelEventType. No Swift e Android, cada tipo de evento é seu próprio case ou classe. Nem todo canal envia todos os tipos de evento.

Tipo de evento Enviado por Quando é disparado O que fazer
CACHE_REPLAY Banners, Content Cards, Feature Flags Uma vez, imediatamente, cada vez que você se inscreve. Possui um cacheSnapshot com o cache atual. Renderize os dados em cache para que sua UI tenha conteúdo sem esperar pela rede.
CACHE_LOAD Banners, Content Cards, Feature Flags O cache mudou sem uma atualização do servidor. Isso acontece quando o usuário muda, quando você limpa os dados do SDK ou quando o canal é desativado. Na Web, Content Cards também o envia quando cartões chegam do service worker. No Swift e Android, também é disparado quando o SDK carrega o cache do armazenamento local antes de qualquer sincronização de rede. Possui um cacheSnapshot com o novo cache. Renderize novamente a partir do snapshot. Após uma troca de usuário ou quando o canal é desativado, o snapshot pode estar vazio, então limpe o conteúdo do usuário anterior.
DATA_UPDATED Banners, Content Cards, Feature Flags O cache mudou. O SDK o envia para cada atualização concluída, mesmo que nada tenha mudado, e para alterações locais como uma dispensa. Possui um cacheSnapshot e um reason. Renderize novamente a partir do snapshot. Verifique reason para decidir se a mudança veio de uma atualização ou de uma ação sua.
IMPRESSION Banners, Content Cards, Feature Flags Uma impressão foi registrada. Possui uma action e o item que foi registrado (banner, card ou flag). Opcional. Use para espelhar impressões na sua própria análise de dados.
CLICK Banners, Content Cards Um clique foi registrado. Possui uma action e o item que foi clicado (banner ou card). Cliques em Banner também incluem um ID de botão se o clique veio de um botão com ID. Opcional. Use para espelhar cliques na sua própria análise de dados.
DISMISS Banners, Content Cards Uma dispensa foi registrada. Possui uma action e o item que foi dispensado (banner ou card). Opcional. DISMISS é o evento de análise de dados, então atualize sua UI a partir do evento DATA_UPDATED que segue uma dispensa.
ERROR Banners, Content Cards, Feature Flags Uma solicitação ou operação falhou. Possui um reason e um retryState. Na Web, às vezes possui rateLimitedUntil. No Swift e Android, o horário do limite de frequência faz parte do motivo RATE_LIMITED. Verifique retryState para decidir se deve tentar novamente e verifique reason para encontrar a causa.

Motivos de atualização

Eventos DATA_UPDATED incluem um reason com um dos valores de ChannelUpdateReason.

Valor Significado O que fazer
AUTO_SERVER_REFRESH Uma atualização iniciada pelo SDK foi concluída, como uma atualização em uma nova sessão, incluindo suas novas tentativas. Renderize novamente a partir do snapshot.
MANUAL_SERVER_REFRESH Uma atualização que você solicitou foi concluída, incluindo suas novas tentativas. Exemplos são requestBannersRefresh(), requestContentCardsRefresh() e refreshFeatureFlags() na Web e Android, ou requestRefresh() no Swift. Renderize novamente a partir do snapshot. Use isto para esconder um indicador de carregamento que você exibiu ao solicitar a atualização.
CLIENT_ACTION O cache mudou por causa de uma ação local em vez de uma resposta do servidor, como dispensar um Banner ou um Content Card. Renderize novamente a partir do snapshot sem exibir um estado de carregamento ou erro. Feature Flags não envia este motivo atualmente, mas trate-o para que seu código continue funcionando caso isso mude.

Estados de nova tentativa

Eventos ERROR incluem um retryState com um dos valores de RetryState. Ele indica se o SDK tentará novamente a operação que falhou e o que você deve fazer.

Valor Significado O que fazer
SDK_WILL_RETRY O SDK está tentando novamente automaticamente, ou está aguardando um limite de frequência ser liberado para então tentar novamente. Continue exibindo o conteúdo em cache. Não solicite outra atualização, porque o SDK envia um evento DATA_UPDATED ou outro ERROR quando a nova tentativa é concluída.
INTEGRATOR_MAY_RETRY O SDK parou de tentar novamente. Continue exibindo o conteúdo em cache. Você pode chamar o método de atualização novamente após um intervalo. Se o evento incluir rateLimitedUntil, aguarde até esse horário.
DO_NOT_RETRY A falha é final para esta operação. Tentar novamente não vai ajudar. Não tente novamente. Corrija a causa, como a chave de API ou as configurações do espaço de trabalho. Se o motivo for FEATURE_DISABLED, pare de exibir conteúdo do canal.

Ações de análise de dados

Eventos IMPRESSION, CLICK e DISMISS incluem uma action com um dos valores de AnalyticsAction. Cada evento de análise de dados é enviado duas vezes: primeiro com ENQUEUED, depois com FLUSHED.

Valor Significado O que fazer
ENQUEUED O SDK salvou o evento de análise de dados localmente. A Braze ainda não o recebeu. Use para atualizar sua UI ou seu próprio registro imediatamente.
FLUSHED O SDK enviou o evento de análise de dados para a Braze com uma resposta de rede bem-sucedida. Use como confirmação de que o evento foi enviado.

Motivos de erro

Eventos ERROR incluem um reason com um dos valores de ChannelErrorReason. Todo motivo pode se aplicar a qualquer canal.

Valor Significado O que fazer
SERVER_ERROR A Braze retornou uma falha do lado do servidor (como uma resposta HTTP 5xx ou uma resposta HTTP 429 sem um cabeçalho Retry-After utilizável), ou a solicitação não chegou à Braze. Siga o retryState. O SDK tenta novamente primeiro, depois reporta INTEGRATOR_MAY_RETRY. Continue exibindo o conteúdo em cache.
CLIENT_ERROR A Braze rejeitou a solicitação (como uma resposta HTTP 4xx diferente de 429 ou um erro de autenticação do SDK). Na Web, para Feature Flags, também pode significar que o SDK não conseguiu salvar uma impressão localmente. Siga o retryState. Uma resposta HTTP 4xx é DO_NOT_RETRY imediatamente. Para um erro de autenticação do SDK, o SDK tenta novamente primeiro e depois reporta DO_NOT_RETRY. Verifique sua chave de API, endpoint do SDK e configuração de autenticação do SDK.
RATE_LIMITED A solicitação teve o limite de frequência atingido. O evento inclui rateLimitedUntil, uma data para o horário mais cedo em que outra tentativa pode ter sucesso. Se o retryState for SDK_WILL_RETRY, aguarde. Se for INTEGRATOR_MAY_RETRY, aguarde até rateLimitedUntil antes de atualizar novamente, pois uma solicitação anterior falhará novamente. Para saber mais, consulte Limites de frequência.
SDK_DISABLED O SDK está desativado localmente, então não faz solicitações de rede. Trate como final e não tente novamente.
INVALID_SERVER_DATA A Braze retornou dados que o SDK não conseguiu interpretar. Não tente novamente. O retryState é DO_NOT_RETRY. Continue exibindo o conteúdo em cache e entre em contato com o suporte da Braze se o problema persistir.
FEATURE_DISABLED O canal está desativado para este espaço de trabalho. O SDK também reporta o canal como desativado até receber sua primeira configuração da Braze. Oculte a UI do canal. Isso não é o mesmo que uma lista vazia de conteúdo. Mantenha sua inscrição: se a Braze então ativar o canal, o SDK atualiza e envia um evento DATA_UPDATED.
New Stuff!