Análise de dados de registro
Se quiser exibir os cartões de conteúdo de uma maneira totalmente personalizada, você poderá implementar sua própria interface de apresentação de cartões de conteúdo. No entanto, dados como impressões, cliques e descartes só são tratados automaticamente quando modelos de cartão padrão são utilizados. Ao implementar uma interface totalmente personalizada, você precisará lidar com esses dados manualmente. Para fazer isso, preencha sua interface do usuário personalizada com dados dos modelos de dados do Braze e registre manualmente análises de dados, como impressões e cliques. 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.
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`.
}];
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.
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.
O BrazeManager
pode fazer referência às dependências do SDK da Braze, como a lista de vetores de objetos do cartão de conteúdo, para obter o Card
e 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 em 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 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);