Análisis de registros
Si quieres mostrar las tarjetas de contenido de forma totalmente personalizada, puedes implementar tu propia interfaz de usuario de presentación de tarjetas de contenido. Sin embargo, datos como las impresiones, los clics y los descartes solo se gestionan automáticamente cuando se utilizan los modelos de tarjeta predeterminados. Cuando implementes una interfaz de usuario completamente personalizada, tendrás que manejar estos datos manualmente. Para ello, rellena tu IU personalizada con datos de los modelos de datos Braze y registra manualmente análisis como impresiones y clics. Una vez que entiendas cómo registrar los análisis, podrás ver las formas habituales en que los clientes de Braze crean tarjetas de contenido personalizadas.
Escuchar las actualizaciones de las tarjetas
Al implementar tus tarjetas de contenido personalizadas, puedes analizar los objetos de la tarjeta de contenido y extraer sus datos de carga útil, como title
, cardDescription
y imageUrl
. A continuación, puedes utilizar los datos del modelo resultante para rellenar tu interfaz de usuario personalizada.
Para obtener los modelos de datos de la tarjeta de contenido, suscríbete a las actualizaciones de la tarjeta de contenido. Hay dos propiedades a las que debes prestar especial atención:
id
: Representa la cadena ID de la tarjeta de contenido. Es el identificador único utilizado para registrar los análisis de las tarjetas de contenido personalizadas.extras
: Engloba todos los pares clave-valor del panel Braze.
Todas las propiedades fuera de id
y extras
son opcionales para analizar las tarjetas de contenido personalizadas. Para más información sobre el modelo de datos, consulta el artículo de integración de cada plataforma: Android, iOS, Web.
Paso 1: Crear una variable privada de suscriptor
Para suscribirte a las actualizaciones de las tarjetas, primero declara una variable privada en tu clase personalizada para que contenga tu suscriptor:
1
2
// subscriber variable
private IEventSubscriber<ContentCardsUpdatedEvent> mContentCardsUpdatedSubscriber;
Paso 2: Suscribirse a las actualizaciones
A continuación, añade el siguiente código para suscribirte a las actualizaciones de tarjetas de contenido de Braze, normalmente dentro de la actividad de tus tarjetas de contenido personalizadas Activity.onCreate()
:
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();
Paso 3: Cancelar suscripción
También te recomendamos cancelar suscripción cuando tu actividad personalizada pase desapercibida. Añade el siguiente código al método del ciclo de vida onDestroy()
de tu actividad:
1
Braze.getInstance(context).removeSingleSubscription(mContentCardsUpdatedSubscriber, ContentCardsUpdatedEvent.class);
Paso 1: Crear una variable privada de suscriptor
Para suscribirte a las actualizaciones de las tarjetas, primero declara una variable privada en tu clase personalizada para que contenga tu suscriptor:
1
private var contentCardsUpdatedSubscriber: IEventSubscriber<ContentCardsUpdatedEvent>? = null
Paso 2: Suscribirse a las actualizaciones
A continuación, añade el siguiente código para suscribirte a las actualizaciones de tarjetas de contenido de Braze, normalmente dentro de la actividad de tus tarjetas de contenido personalizadas Activity.onCreate()
:
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)
Paso 3: Cancelar suscripción
También te recomendamos cancelar suscripción cuando tu actividad personalizada pase desapercibida. Añade el siguiente código al método del ciclo de vida onDestroy()
de tu actividad:
1
Braze.getInstance(context).removeSingleSubscription(contentCardsUpdatedSubscriber, ContentCardsUpdatedEvent::class.java)
Para acceder al modelo de datos de las tarjetas de contenido, llama a contentCards.cards
en tu instancia braze
.
1
let cards: [Braze.ContentCard] = AppDelegate.braze?.contentCards.cards
Además, también puedes mantener una suscripción para observar los cambios en tus tarjetas de contenido. Puedes hacerlo de dos maneras:
- Mantener un cancelable; o
- Mantener un
AsyncStream
.
Cancelable
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;
Además, si deseas mantener una suscripción a tus tarjetas de contenido, puedes llamar a 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`.
}];
Registra una función de devolución de llamada para suscribirte a las actualizaciones cuando se actualicen las tarjetas.
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();
Las tarjetas de contenido sólo se actualizarán al iniciar la sesión si se llama a una petición de suscripción antes de openSession()
. También puedes actualizar manualmente el canal.
Registro de eventos
Registrar métricas valiosas como impresiones, clics y descartes es rápido y sencillo. Configura un receptor de clics personalizado para gestionar manualmente estos análisis.
El BrazeManager
puede hacer referencia a dependencias del SDK de Braze, como la lista de matrices de objetos de la tarjeta de contenido, para obtener el Card
para llamar a los métodos de registro de Braze. Utiliza la clase base ContentCardable
para referenciar y proporcionar datos fácilmente a BrazeManager
.
Para registrar una impresión o hacer clic en una tarjeta, llama a Card.logClick()
o Card.logImpression()
respectivamente.
Puedes registrar manualmente o establecer una tarjeta de contenido como “descartada” en Braze para una tarjeta concreta con isDismissed
. Si una tarjeta ya está marcada como descartada, no se puede volver a marcar como descartada.
Para crear un receptor de clics personalizado, crea una clase que implemente IContentCardsActionListener
y regístrala en BrazeContentCardsManager
. Implementa el método onContentCardClicked()
que se ejecutará cuando el usuario haga clic en una tarjeta de contenido. A continuación, indica a Braze que utilice tu oyente de clic de la tarjeta de contenido.
Por ejemplo:
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 ejemplo:
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 manejar tarjetas de contenido con variantes de control en tu interfaz de usuario personalizada, pasa tu objeto com.braze.models.cards.Card
y llama al método logImpression
como harías con cualquier otro tipo de tarjeta de contenido. El objeto registrará implícitamente una impresión de control para informar a nuestros análisis de cuándo un usuario habría visto la tarjeta de control.
Implementa el protocolo BrazeContentCardUIViewControllerDelegate
y establece tu objeto delegado como la propiedad delegate
de tu BrazeContentCardUI.ViewController
. Este delegado se encargará de devolver los datos de tu objeto personalizado a Braze para que los registre. Para ver un ejemplo, consulta el tutorial de la interfaz de usuario de las tarjetas de contenido.
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 manejar tarjetas de contenido con variantes de control en tu interfaz de usuario personalizada, pasa tu objeto Braze.ContentCard.Control
y llama al método logImpression
como harías con cualquier otro tipo de tarjeta de contenido. El objeto registrará implícitamente una impresión de control para informar a nuestros análisis de cuándo un usuario habría visto la tarjeta de control.
Registrar eventos de impresión cuando las tarjetas son vistas por usuarios que utilizan logContentCardImpressions
:
1
2
3
import * as braze from "@braze/web-sdk";
braze.logContentCardImpressions([card1, card2, card3]);
Registra los eventos de clic de tarjeta cuando los usuarios interactúan con una tarjeta utilizando logContentCardClick
:
1
2
3
import * as braze from "@braze/web-sdk";
braze.logContentCardClick(card);