Análise de dados
Ao construir uma interface personalizada para cartões de conteúdo, você deve registrar manualmente análises como impressões, cliques e dispensas, pois isso é tratado automaticamente apenas para modelos de cartão padrão. Registrar esses eventos é uma parte padrão da integração de cartões de conteúdo e é essencial para relatórios e faturamento precisos de campanhas. Para fazer isso, preencha sua interface personalizada com dados dos modelos de dados da Braze e, em seguida, registre manualmente os eventos. Depois de entender como registrar a análise de dados, você poderá ver as maneiras comuns pelas quais os clientes do Braze criam cartões de conteúdo personalizados.
Ouvindo as atualizações do cartão
Ao implementar seus cartões de conteúdo personalizados, você pode analisar os objetos do cartão de conteúdo e extrair seus dados de carga útil, como title, cardDescription e imageUrl. Em seguida, você pode usar os dados do modelo resultante para preencher sua interface personalizada.
Para obter os modelos de dados do cartão de conteúdo, inscreva-se para receber as atualizações do cartão de conteúdo. Preste atenção especial em duas propriedades:
id: Representa a string de ID do cartão de conteúdo. Esse é o identificador exclusivo usado para registrar análises de dados de cartões de conteúdo personalizados.extras: Engloba todos os pares de valores-chave do dashboard do Braze.
Todas as propriedades fora de id e extras são opcionais para análise de cartões de conteúdo personalizados. Para saber mais sobre o modelo de dados, consulte o artigo de integração de cada plataforma: Android, iOS, Web.
Registre uma função de retorno de chamada para se inscrever para receber atualizações quando os cartões forem atualizados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import * as braze from "@braze/web-sdk";
braze.subscribeToContentCardsUpdates((updates) => {
const cards = updates.cards;
// For example:
cards.forEach(card => {
if (card.isControl) {
// Do not display the control card, but remember to call `logContentCardImpressions([card])`
}
else if (card instanceof braze.ClassicCard || card instanceof braze.CaptionedImage) {
// Use `card.title`, `card.imageUrl`, etc.
}
else if (card instanceof braze.ImageOnly) {
// Use `card.imageUrl`, etc.
}
})
});
braze.openSession();
Os cartões de conteúdo somente serão atualizados no início da sessão se uma solicitação de inscrição for chamada antes de openSession(). Você também pode optar por atualizar manualmente o feed.
Etapa 1: Criar uma variável de assinante privada
Para assinar as atualizações do cartão, primeiro declare uma variável privada em sua classe personalizada para manter o assinante:
1
2
// subscriber variable
private IEventSubscriber<ContentCardsUpdatedEvent> mContentCardsUpdatedSubscriber;
Etapa 2: Inscrever-se para receber atualizações
Em seguida, adicione o seguinte código para inscrever-se para receber as atualizações dos cartões de conteúdo da Braze, normalmente dentro de Activity.onCreate() da atividade dos cartões de conteúdo personalizados:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Remove the previous subscriber before rebuilding a new one with our new activity.
Braze.getInstance(context).removeSingleSubscription(mContentCardsUpdatedSubscriber, ContentCardsUpdatedEvent.class);
mContentCardsUpdatedSubscriber = new IEventSubscriber<ContentCardsUpdatedEvent>() {
@Override
public void trigger(ContentCardsUpdatedEvent event) {
// List of all Content Cards
List<Card> allCards = event.getAllCards();
// Your logic below
}
};
Braze.getInstance(context).subscribeToContentCardsUpdates(mContentCardsUpdatedSubscriber);
Braze.getInstance(context).requestContentCardsRefresh();
Etapa 3: Cancelar inscrição
Também recomendamos cancelar a inscrição quando sua atividade personalizada sair de vista. Adicione o seguinte código ao método de ciclo de vida onDestroy() de sua atividade:
1
Braze.getInstance(context).removeSingleSubscription(mContentCardsUpdatedSubscriber, ContentCardsUpdatedEvent.class);
Etapa 1: Criar uma variável de assinante privada
Para assinar as atualizações do cartão, primeiro declare uma variável privada em sua classe personalizada para manter o assinante:
1
private var contentCardsUpdatedSubscriber: IEventSubscriber<ContentCardsUpdatedEvent>? = null
Etapa 2: Inscrever-se para receber atualizações
Em seguida, adicione o seguinte código para inscrever-se para receber as atualizações dos cartões de conteúdo da Braze, normalmente dentro de Activity.onCreate() da atividade dos cartões de conteúdo personalizados:
1
2
3
4
5
6
7
8
9
10
// Remove the previous subscriber before rebuilding a new one with our new activity.
Braze.getInstance(context).subscribeToContentCardsUpdates(contentCardsUpdatedSubscriber)
Braze.getInstance(context).requestContentCardsRefresh()
// List of all Content Cards
val allCards = event.allCards
// Your logic below
}
Braze.getInstance(context).subscribeToContentCardsUpdates(mContentCardsUpdatedSubscriber)
Braze.getInstance(context).requestContentCardsRefresh(true)
Etapa 3: Cancelar inscrição
Também recomendamos cancelar a inscrição quando sua atividade personalizada sair de vista. Adicione o seguinte código ao método de ciclo de vida onDestroy() de sua atividade:
1
Braze.getInstance(context).removeSingleSubscription(contentCardsUpdatedSubscriber, ContentCardsUpdatedEvent::class.java)
Para acessar o modelo de dados dos cartões de conteúdo, chame contentCards.cards em sua instância braze.
1
let cards: [Braze.ContentCard] = AppDelegate.braze?.contentCards.cards
Além disso, você também pode manter uma inscrição para observar as alterações em seus cartões de conteúdo. Você pode fazer isso de duas maneiras:
- Manutenção de um cancelável; ou
- Manutenção de um
AsyncStream.
Cancelável
1
2
3
4
5
6
// This subscription is maintained through a Braze cancellable, which will observe for changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.contentCards.subscribeToUpdates { [weak self] contentCards in
// Implement your completion handler to respond to updates in `contentCards`.
}
AsyncStream
1
let stream: AsyncStream<[Braze.ContentCard]> = AppDelegate.braze?.contentCards.cardsStream
1
NSArray<BRZContentCardRaw *> *contentCards = AppDelegate.braze.contentCards.cards;
Além disso, para manter uma inscrição em seus cartões de conteúdo, você poderá chamar subscribeToUpdates:
1
2
3
4
// This subscription is maintained through Braze cancellable, which will continue to observe for changes until the subscription is cancelled.
BRZCancellable *cancellable = [self.braze.contentCards subscribeToUpdates:^(NSArray<BRZContentCardRaw *> *contentCards) {
// Implement your completion handler to respond to updates in `contentCards`.
}];
Para obter os dados do cartão de conteúdo, use o método getContentCards:
1
2
3
import Braze from "@braze/react-native-sdk";
const cards = await Braze.getContentCards();
Para ouvir atualizações, inscreva-se nos eventos de atualização do cartão de conteúdo:
1
2
3
4
5
6
7
8
9
10
const subscription = Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, (update) => {
const cards = update.cards;
cards.forEach(card => {
if (card.isControl) {
// Do not display the control card, but remember to log an impression
} else {
// Use card.title, card.cardDescription, card.image, etc.
}
});
});
Para solicitar uma atualização manual dos cartões de conteúdo dos servidores da Braze:
1
Braze.requestContentCardsRefresh();
Para obter cartões de conteúdo em cache sem uma solicitação de rede:
1
const cachedCards = await Braze.getCachedContentCards();
Eventos de registro
O registro de métricas valiosas, como impressões, cliques e descartes, é rápido e simples. Defina um listener (ouvinte) de cliques personalizado para lidar manualmente com essas análises de dados.
Registre eventos de impressão quando os cartões forem visualizados por usuários usando logContentCardImpressions:
1
2
3
import * as braze from "@braze/web-sdk";
braze.logContentCardImpressions([card1, card2, card3]);
Registre os eventos de clique do cartão quando os usuários interagirem com um cartão usando logContentCardClick:
1
2
3
import * as braze from "@braze/web-sdk";
braze.logContentCardClick(card);
O BrazeManager pode referenciar dependências do SDK da Braze, como a lista de objetos do cartão de conteúdo, para obter o Card para chamar os métodos de registro da Braze. Use a classe base ContentCardable para facilitar a referência e o fornecimento de dados para o BrazeManager.
Para registrar uma impressão ou clicar em um cartão, ligue para Card.logClick() ou Card.logImpression() respectivamente.
É possível registrar manualmente ou definir um cartão de conteúdo como “descartado” para a Braze com isDismissed. Se um cartão já tiver sido marcado como descartado, ele não poderá ser marcado como descartado novamente.
Para criar um ouvinte de cliques personalizado, crie uma classe que implemente IContentCardsActionListener e registre-a com BrazeContentCardsManager. Implemente o método onContentCardClicked() que será chamado quando o usuário clicar em um cartão de conteúdo. Em seguida, instrua a Braze a usar seu ouvinte de clique do cartão de conteúdo.
Por exemplo:
1
2
3
4
5
6
7
8
9
10
11
BrazeContentCardsManager.getInstance().setContentCardsActionListener(new IContentCardsActionListener() {
@Override
public boolean onContentCardClicked(Context context, Card card, IAction cardAction) {
return false;
}
@Override
public void onContentCardDismissed(Context context, Card card) {
}
});
Por exemplo:
1
2
3
4
5
6
7
8
9
BrazeContentCardsManager.getInstance().contentCardsActionListener = object : IContentCardsActionListener {
override fun onContentCardClicked(context: Context, card: Card, cardAction: IAction): Boolean {
return false
}
override fun onContentCardDismissed(context: Context, card: Card) {
}
}
Para lidar com a variante de controle dos cartões de conteúdo em sua interface personalizada, passe o objeto com.braze.models.cards.Card e, em seguida, chame o método logImpression como faria com qualquer outro tipo de cartão de conteúdo. O objeto registrará implicitamente uma impressão de controle para informar nossa análise de dados sobre quando um usuário teria visto o cartão de controle.
Implemente o protocolo BrazeContentCardUIViewControllerDelegate e defina seu objeto delegado como a propriedade delegate de BrazeContentCardUI.ViewController. Esse delegado tratará de passar os dados do seu objeto personalizado de volta ao Braze para serem registrados. Para obter um exemplo, consulte o tutorial da interface do usuário dos cartões de conteúdo.
1
2
3
4
5
6
7
8
9
10
11
12
// Set the delegate when creating the Content Cards controller
contentCardsController.delegate = delegate
// Method to implement in delegate
func contentCard(
_ controller: BrazeContentCardUI.ViewController,
shouldProcess clickAction: Braze.ContentCard.ClickAction,
card: Braze.ContentCard
) -> Bool {
// Intercept the content card click action here.
return true
}
1
2
3
4
5
6
7
8
9
10
// Set the delegate when creating the Content Cards controller
contentCardsController.delegate = delegate;
// Method to implement in delegate
- (BOOL)contentCardController:(BRZContentCardUIViewController *)controller
shouldProcess:(NSURL *)url
card:(BRZContentCardRaw *)card {
// Intercept the content card click action here.
return YES;
}
Para lidar com a variante de controle dos cartões de conteúdo em sua interface personalizada, passe o objeto Braze.ContentCard.Control e, em seguida, chame o método logImpression como faria com qualquer outro tipo de cartão de conteúdo. O objeto registrará implicitamente uma impressão de controle para informar nossa análise de dados sobre quando um usuário teria visto o cartão de controle.
Registre eventos de impressão quando os cartões forem visualizados pelos usuários:
1
Braze.logContentCardImpression(card.id);
Registre eventos de clique em cartões quando os usuários interagirem com um cartão:
1
Braze.logContentCardClicked(card.id);
Registre eventos de dispensa quando um usuário dispensar um cartão:
1
Braze.logContentCardDismissed(card.id);
Editar esta página no GitHub