1. Introducción
Objetivos
En este codelab, aprenderás a instrumentar tu app multiplataforma para que puedas enviar mensajes push multicast a varios subgrupos de tus instancias de app con temas de FCM.
Una vez que finalice el proceso, podrás aprovechar la infraestructura de FCM para administrar estos subgrupos y enviar mensajes push de multidifusión a través de ellos.
Descripción general de los temas
Los temas son una forma compatible con la infraestructura de FCM de llegar a subgrupos de instancias de tu app con mensajes.
FCM proporciona las APIs para enviar mensajes y mantener las suscripciones a estos temas. El acto de asociar y disociar una instancia de app a un tema se denomina suscribirse y anular la suscripción, respectivamente.
Los temas deben usarse para el contenido disponible públicamente. Por ejemplo, mensajes sobre actualizaciones meteorológicas. Si quieres enviar mensajes que contengan información sensible del usuario, usa el SDK de Firebase Admin para enviar mensajes a varios dispositivos.
La transmisión simultánea basada en temas está optimizada para la capacidad de procesamiento.
Qué aprenderás
- Cómo suscribir (y anular la suscripción) de usuarios a temas desde una app para dispositivos móviles
- Cómo enviar mensajes push de multidifusión con temas
- Cómo enviar mensajes a una combinación de temas con condiciones de temas
- Cómo administrar suscripciones a temas en el servidor y realizar suscripciones y anulaciones de suscripciones masivas
Qué compilarás
- Una app para Android que se suscribe a temas y cancela la suscripción a ellos, y que recibe mensajes cuando se envían a los temas.
- Una integración del servidor que usa el SDK de Firebase Admin, que se usará para enviar mensajes por temas a través de las APIs de FCM.
Requisitos
- Un navegador de tu elección, como Chrome
- IDE de IntelliJ IDEA para desarrollar aplicaciones de Java
- Asegúrate de habilitar la compatibilidad con Gradle durante la instalación.
- IDE de Android Studio para desarrollar aplicaciones para Android
- Un dispositivo para ejecutar la aplicación para Android Cualquiera de los siguientes:
- El emulador de Android (requiere configuración en Android Studio)
- Un dispositivo Android físico conectado a tu computadora y configurado en modo de desarrollador
- Una Cuenta de Google para crear y administrar tu proyecto de Firebase
2. Cómo prepararte
Obtén el código
Clona el repositorio de GitHub a partir de la línea de comandos:
git clone https://github.com/firebase/quickstart-android.git fcm-codelab
El código de muestra se clonará en el directorio fcm-codelab
.
cd fcm-codelab
La app de inicio para este codelab se encuentra en el directorio messaging
de la rama fcm-topics-codelab
. Sigue estos pasos para acceder al código de partida. Contiene dos directorios: StockNewsApp
y StockNewsServer
. El primero contiene la app para Android inicial, y el segundo, el código inicial del servidor.
git checkout fcm-topics-codelab cd messaging/fcm-topics-codelab/starter
La versión completa de este codelab se encuentra en el directorio messaging/fcm-topics-codelab/completed
.
Crea un proyecto de Firebase
- Accede a la consola de Firebase con tu Cuenta de Google.
- Haz clic en el botón para crear un proyecto nuevo y, luego, ingresa un nombre (por ejemplo,
StockNews
).
- Haz clic en Continuar.
- Si se te solicita, revisa y acepta las Condiciones de Firebase y, luego, haz clic en Continuar.
- (Opcional) Habilita la asistencia de IA en Firebase console (llamada "Gemini en Firebase").
- Para este codelab, no necesitas Google Analytics, por lo que debes desactivar la opción de Google Analytics.
- Haz clic en Crear proyecto, espera a que se aprovisione y, luego, haz clic en Continuar.
¡Felicitaciones! Acabas de crear tu proyecto de Firebase.
3. Configuración de la app de Firebase específica para cada plataforma
La mayoría de los cambios de código que se necesitan para habilitar la compatibilidad con Firebase ya están registrados en el proyecto en el que estás trabajando. Sin embargo, para agregar compatibilidad con plataformas móviles, debes hacer lo siguiente:
- Registra la plataforma deseada en el proyecto de Firebase
- Descarga el archivo de configuración específico de la plataforma y agrégalo al código.
Para los fines de este codelab, agregaremos una app de Firebase para Android.
Configura Android
- En Firebase console, selecciona Configuración del proyecto en la parte superior de la barra de navegación izquierda en el ícono de ajustes y haz clic en el ícono de Android en Tus apps en la página General.
Deberías ver el siguiente diálogo :
- El valor importante que se debe proporcionar es el nombre del paquete de Android. Establécelo en
com.ticker.stocknews
.- El nombre de paquete que se proporciona aquí debe ser el mismo que el que se proporciona en
AndroidManifest.xml
del código StockNewsApp de inicio. Si quieres ubicarlo o cambiarlo, sigue estos pasos:- En el directorio StockNewsApp, abre el archivo
app/src/main/AndroidManifest.xml
. - En el elemento
manifest
, busca el valor de la cadena del atributopackage
. Este valor es el nombre del paquete de Android.
- En el directorio StockNewsApp, abre el archivo
- El nombre de paquete que se proporciona aquí debe ser el mismo que el que se proporciona en
- En el diálogo de Firebase, pega el nombre del paquete que copiaste en el campo Nombre del paquete de Android.
- Para este codelab, no necesitas el certificado de firma SHA-1 de depuración, ya que no se lanzará esta app. Déjalo en blanco.
- Haga clic en Registrar app.
- En Firebase console, sigue las instrucciones para descargar el archivo de configuración
google-services.json
. - Puedes omitir los pasos de configuración restantes, ya que todo lo demás ya está configurado en el código de la app de inicio. Verás tu app en la página principal de Firebase console.
- Copia el archivo
google-services.json
(que acabas de descargar) en el directoriomessaging/fcm-topics-codelab/starter/StockNewsApp/app
.
4. Compila y ejecuta tu app
Estás listo para comenzar a trabajar en tu app. Primero, compila y ejecuta la app.
Cómo importar la app de inicio
Inicia Android Studio y, luego, importa messaging/fcm-topics-codelab/starter/StockNewsApp
desde el directorio de código de partida.
Después de que se cargue el proyecto, es posible que aparezca una alerta que indique que Git no está realizando un seguimiento de todos los cambios locales. Puedes hacer clic en "Ignore" o en la "X" en la parte superior derecha. (No enviarás ningún cambio al repositorio de Git).
En la esquina superior izquierda de la ventana del proyecto, deberías ver una imagen similar a la que se muestra más abajo si estás en la vista Android. (Si estás en la vista Project, deberás expandir el proyecto para ver lo mismo).
Ten en cuenta que Android Studio puede tardar varios segundos la primera vez que compile el proyecto en segundo plano. Durante este período, verás un ícono giratorio en la barra de estado, en la parte inferior de Android Studio:
Te recomendamos que esperes hasta que haya finalizado antes de realizar cambios en el código. De esa manera, Android Studio podrá extraer todos los componentes necesarios.
Además, si recibes el mensaje "Reload for language changes to take effect?", o uno similar, selecciona "Yes".
Configuración del emulador
Si necesitas ayuda para configurar un emulador de Android, consulta el artículo Cómo ejecutar tu app.
Comprende el código de partida de la app para Android
- El código de inicio es una app para Android liviana con una funcionalidad y una IU mínimas.
- Ya se agregó una dependencia al SDK de Firebase Cloud Messaging en el archivo
app/build.gradle
.
- En
AndroidManifest.xml
, ya se agregó un controlador de devolución de llamadaMESSAGING_EVENT
.- Este controlador,
StockNewsMessagingService.java
, extiende la claseFirebaseMessagingService
, que proporciona varias funciones relacionadas con Firebase Cloud Messaging. Consulta la documentación de FirebaseMessagingService para obtener más información.
- Se llama a la función
onNewToken
cuando se crea o se actualiza el token de registro de FCM. Consulta Supervisa la generación de tokens para obtener más información. - Se llama a la función
onMessageReceived
cuando se recibe un mensaje y la app está en primer plano. Actualmente, solo registra el mensaje recibido.- Consulta Cómo recibir mensajes en una app para Android para obtener más información sobre las diferencias entre la entrega y el procesamiento de mensajes en segundo plano y en primer plano.
- Este controlador,
- Además, en
AndroidManifest.xml
, también se proporciona una claseApplication
de Android llamadaStockNewsApplication
.- Esta clase será la primera en crearse una instancia cuando se inicie la app.
- En la función
onCreate
de la claseStockNewsApplication
, se agrega una llamada de creación del token de registro de FCM. Se generará un token de registro de FCM válido y se registrará.
- El
MainActivity.java
agrega elRecyclerView
que muestra las opciones de categoría de stock. SubscriptionAdapter.java
implementaRecyclerView.Adapter
, que dibuja la pantalla de selección de categorías de stock.- Cada categoría de acciones tiene un nombre y un botón de activación de suscripción junto a ella.
- Al cambiar el botón de activación, se debería realizar una llamada de suscripción o anulación de suscripción al tema de FCM.
- Implementarás estas llamadas en las próximas secciones.
- La clase
model/StockCategories.java
contiene una lista de todas las categorías de stock y sus nombres de temas asociados.
Ejecuta la app de inicio
- Conecta tu dispositivo Android a la computadora o inicia un emulador.
- En la barra de herramientas superior, selecciona tu dispositivo o emulador de Android de destino y presiona el botón de ejecución.
- La IU de la app se verá de la siguiente manera:
- La app creará un token de registro de FCM y lo registrará. Sin embargo, no cambiará nada en la IU de la app.
- Copia y guarda el token de registro de FCM, ya que se usará en los próximos pasos.
5. Envía un mensaje de prueba
Ahora ya puedes enviar un mensaje de prueba a la instancia de la app que configuraste en el último paso.
Importa el código del servidor de inicio
Inicia IntelliJ IDEA y abre el proyecto messaging/fcm-topics-codelab/starter/StockNewsServer
.
La vista del proyecto en la barra de navegación de la izquierda debería verse de la siguiente manera:
Ten en cuenta que IntelliJ IDEA puede tardar unos minutos en compilar tu proyecto, lo que incluye extraer las dependencias necesarias.
Comprende el código de inicio del servidor
- El código de inicio del servidor es un proyecto de Java basado en Gradle.
- El archivo
build.gradle
ya tiene agregada la dependencia del SDK de firebase-admin. Este SDK proporciona acceso a varias funciones de envío de mensajes de FCM.
- Por último, hay dos clases, a saber:
FcmSender.java
: Esta clase contiene los siguientes métodos importantes:initFirebaseSDK
: Inicializa el SDK de firebase-admin.sendMessageToFcmRegistrationToken
: Envía un mensaje a un token de registro de FCM.sendMessageToFcmTopic
: Envía un mensaje a un tema de FCM.sendMessageToFcmTopicCondition
: Envía un mensaje a una condición de tema de FCM.
FcmSubscriptionManager.java
: Esta clase contiene métodos que permiten administrar las suscripciones a temas desde el servidor.initFirebaseSDK
: Inicializa el SDK de firebase-admin.subscribeFcmRegistrationTokensToTopic
: Suscribe tokens de registro de FCM a un tema de FCM.unsubscribeFcmRegistrationTokensFromTopic
: Anula la suscripción de tokens de registro de FCM a un tema de FCM.
Configura el código del servidor
- Primero, debemos configurar una cuenta de servicio de Firebase que permita que el SDK de firebase-admin autorice las llamadas a las APIs de FCM.
- Ve a Firebase console, haz clic en el ícono de ajustes junto a Project Overview en la barra de navegación de la izquierda y selecciona Project settings.
- En la página de configuración, selecciona Cuentas de servicio y haz clic en Crear cuenta de servicio.
- Ahora, haz clic en el botón Generar nueva clave privada y comenzará la descarga automática del archivo de clave.
- Cambia el nombre del archivo de clave a
service-account.json
y cópialo en la carpetamessaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
. - Tanto
FcmSender.java
comoFcmSubscriptionManager.java
cargan el archivoservice-account.json
desde la ruta de clase con el siguiente código.
- Ve a Firebase console, haz clic en el ícono de ajustes junto a Project Overview en la barra de navegación de la izquierda y selecciona Project settings.
- En este punto, el código del servidor está listo. Ejecuta Build -> Build Project desde la barra de menú superior.
Cómo enviar un mensaje de prueba
- En
FcmSender.java
, busca la funciónsendMessageToFcmRegistrationToken
y, luego, inserta el token de registro de FCM que copiaste de la sección Ejecuta la app de inicio en el camporegistrationToken
. - En la función
main
, quita el comentario solo de la funciónsendMessageToFcmRegistrationToken
y haz clic en Ejecutar para ejecutar el código.- Observa cómo el token de registro de FCM se establece en el campo
Token
del objetomessage
. - Además, observa cómo usamos la API de
send
de la interfazFirebaseMessaging
.
- Observa cómo el token de registro de FCM se establece en el campo
- Esto debería enviar un mensaje a la instancia de la app que configuraste en el paso anterior.
- Cuando la instancia de la app esté en primer plano, deberías ver el contenido del mensaje registrado.
- Cuando la instancia de la app esté en segundo plano, verás que el mensaje aparece en la bandeja de notificaciones.
Excelente. Usaste el SDK de Firebase Admin para enviar mensajes a una instancia de la app. Obtén más información para usar el SDK de Firebase Admin en tu servidor.
6. Implementa la suscripción y anulación de suscripción a temas
En este paso, implementarás acciones de suscripción y cancelación de suscripción a temas en el botón de activación de la categoría de acciones de la app para Android.
Cuando un usuario de la app activa o desactiva el interruptor de una categoría de stock en particular, se realizará una llamada para suscribirse o cancelar la suscripción a un tema.
Código de revisión
- Navega a la clase
SubscriptionAdapter.java
en el código de la app para Android y ubica la claseRecyclerViewViewHolder
.
- El constructor de la clase configura un objeto de escucha para el botón de activación de la suscripción con
setOnCheckedChangeListener
. - Según el botón de activación, las acciones de suscripción y cancelación de suscripción se realizan llamando a los métodos
subscribeToStockCategory
yunsubscribeFromStockCategory
, respectivamente. - El método
setData
se llama desde elonBindViewHolder
del adaptador de RecyclerView para vincular el ViewHolder con la categoría de acciones adecuada.
Implementa la suscripción a temas
- En el método
subscribeToStockCategory
, implementarás la llamada a la API desubscribeToTopic
del objetoFirebaseMessaging
. El código podría verse así:
void subscribeToStockCategory() { // Making call to FCM for subscribing to the topic for stockCategory FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener( unused -> { // Subscribing action successful Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName()); Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(), Toast.LENGTH_SHORT).show(); }); }
Implementa la cancelación de la suscripción a temas
- Del mismo modo, en la condición else, implementarás la llamada a la API de
unsubscribeFromTopic
. Se mostrará algo similar a lo siguiente:
void unsubscribeFromStockCategory() { // Making call to FCM for unsubscribing from the topic for stockCategory FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName()) .addOnSuccessListener(unused -> { // Unsubscribing action successful Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName()); Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(), Toast.LENGTH_SHORT).show(); }); }
Probar
- Ejecuta la app y activa o desactiva las opciones de categorías de acciones para ejecutar las acciones de suscripción y cancelación de suscripción. Se vería algo así:
Suscribirse | Anular la suscripción |
7. Envía tu primer mensaje de tema
En este paso, implementarás el código del servidor para enviar un mensaje a un tema de FCM.
Implementa la integración del servidor para enviar mensajes de temas
- En el código del servidor, ve a
FcmSender.java
y busca el método llamadosendMessageToFcmTopic
.
- En la primera línea, proporciona el tema de FCM al que deseas enviar el mensaje.
- Es una cadena con el formato
/topics/<Topic Name>
. Por ejemplo,/topics/Technology
- Es una cadena con el formato
- En las siguientes líneas, crea un objeto
message
nuevo (similar al que se define en la funciónsendMessageToFcmRegistrationToken
).- La diferencia será que, en lugar de configurar el campo
Token
del objetomessage
, configurarás el campoTopic
.
- La diferencia será que, en lugar de configurar el campo
Message message = Message.builder() .putData("FOOTECH", "$1000") .setNotification( Notification.builder() .setTitle("Investor confidence in Tech Stocks growing") .setBody("Foo Tech leading the way in stock growth for Tech sector.") .build()) .setTopic(topicName) .build();
- Ahora agrega la llamada a la instancia
FirebaseMessaging
para enviar el mensaje (idéntica a la llamada de envío realizada en la funciónsendMessageToFcmRegistrationToken
).
FirebaseMessaging.getInstance().send(message);
- Por último, actualiza la función
main
y habilita la llamada a la funciónsendMessageToFcmTopic
únicamente.
Envía un mensaje y valida la recepción
- Antes de enviar el mensaje del tema, primero asegúrate de que la instancia de tu app esté suscrita al tema al que deseas enviar el mensaje.
- Esto se puede hacer con un cambio en el botón de activación correspondiente. Por ejemplo:
- Ahora puedes enviar tu mensaje de tema ejecutando la función
main
deFcmSender.java
. - Al igual que antes, deberías poder observar la recepción del mensaje en la instancia de la app.
- Instancia de la app en primer plano
- Instancia de la app en segundo plano
- Sugerencia adicional: Intenta cancelar la suscripción al tema al que enviaste el mensaje y vuelve a enviarlo. Observarás que el mensaje no se entrega a la instancia de la app.
8. Envía tu primer mensaje de condición de tema
La función de condición de tema te permite enviar mensajes a una combinación de temas, lo que te permite proporcionar una definición de público más expresiva.
Por ejemplo, en nuestra app de StockNews, considera la posibilidad de enviar mensajes a un grupo de instancias de la app que estén suscritas a los temas de Tecnología o Automotriz. Por ejemplo, esto puede ocurrir si hay un evento importante relacionado con Waymo.
Los temas te permiten expresar tu combinación en forma de una expresión booleana con los siguientes operadores:
- && : AND lógico. Por ejemplo,
'Technology' in topics && 'Automotive' in topics
segmenta solo para las instancias de la app que están suscriptas a los temas de Tecnología y Automoción. - || : OR lógico. Por ejemplo,
'Technology' in topics || 'Automotive' in topics
segmenta las instancias de la app que se suscriben a los temas Tecnología o Automóviles. - () : Paréntesis para agrupar. Por ejemplo,
'Technology' in topics && ('Automotive' in topics || 'Energy' in topics)
segmenta solo las instancias de la app que están suscriptas a los temas Tecnología y Automotriz o Energía.
Obtén más información para compilar solicitudes de envío y usar esta función.
Implementa la integración del servidor para enviar mensajes de condición de tema
- De vuelta en el código del servidor, ve a
FcmSender.java
y busca el método llamadosendMessageToFcmTopicCondition
.
- En la primera línea, para la variable
topicCondition
, proporciona la condición del tema al que deseas enviar el mensaje. Puedes configurarlo en'Technology' in topics && 'Automotive' in topics
. - En las siguientes líneas, crea un nuevo objeto
message
(similar al que se define en la funciónsendMessageToFcmTopic
).- La diferencia es que, en lugar de configurar el campo
Topic
del objeto, configurarás el campoCondition
.
- La diferencia es que, en lugar de configurar el campo
Message message = Message.builder() .putData("FOOCAR", "$500") .setNotification( Notification.builder() .setTitle("Foo Car shows strong Q2 results") .setBody("Foo Car crosses 1B miles. Stocks rally.") .build()) .setCondition(topicCondition) .build();
- Ahora agrega la llamada a la instancia
FirebaseMessaging
para enviar el mensaje (idéntica a la llamada de envío realizada en la funciónsendMessageToFcmTopic
).
FirebaseMessaging.getInstance().send(message);
- Por último, actualiza la función
main
y habilita la llamada a la funciónsendMessageToFcmTopicCondition
únicamente.
Envía el mensaje y valida la recepción
- Antes de enviar el mensaje del tema, primero asegúrate de que la instancia de tu app satisfaga la condición del tema especificada suscribiendo la instancia de la app a los temas Tecnología y Automotriz.
- Ahora puedes enviar tu mensaje de tema ejecutando la función
main
deFcmSender.java
. - Al igual que antes, deberías poder observar la recepción del mensaje en la instancia de la app.
- Instancia de la app en primer plano
- Instancia de la app en segundo plano
- Bonificación: Ahora puedes cancelar la suscripción al tema Tecnología y volver a enviar el mensaje de condición del tema. Deberías observar que la instancia de la app no recibe el mensaje.
9. Resumen
Hagamos un breve repaso de lo que aprendiste hasta ahora.
- Cómo iniciar la suscripción o anulación de la suscripción a un tema desde una instancia de app
- Envía un mensaje al tema y verifica la recepción en las instancias de la app suscritas.
- Enviar un mensaje a una condición de tema y verificar la recepción en una instancia de la app que satisface la condición
En la siguiente sección, aprenderás a suscribir o anular la suscripción de instancias de la app a temas sin necesidad de crear instancias de llamadas desde el cliente.
10. Administra suscripciones a temas desde el servidor
Hasta ahora, en este codelab, todas las llamadas de suscripción y cancelación de suscripción a temas se inician desde una instancia de la app.
Sin embargo, en algunos casos de uso, es posible que desees administrar las suscripciones a temas desde el servidor. Por ejemplo, es posible que desees suscribir a un subgrupo de tu base de usuarios existente a un tema nuevo sin esperar el lanzamiento de una app.
En esta sección, aprenderás a usar el SDK de Firebase Admin para suscribir y anular la suscripción de un lote de tokens de registro de FCM a un tema realizando llamadas desde el servidor.
Implementa la suscripción del servidor de tokens de registro de FCM al tema de FCM
- En el código del servidor, ve a la clase
FcmSubscriptionManager.java
. Busca el método llamadosubscribeFcmRegistrationTokensToTopic
. Aquí implementarás la llamada a la API desubscribeToTopic
.
- Suscribamos la instancia de la app al tema Energy. Para ello, primero proporciona datos para los siguientes dos campos:
registrationTokens
: Es una lista separada por comas de cadenas que representan los tokens de registro de FCM para los que deseas crear suscripciones a temas.topicName
: Es el nombre del tema Energía, es decir,/topics/Energy
.
- En las siguientes líneas, implementa la llamada de la siguiente manera:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic( registrationTokens, topicName);
- Puedes inspeccionar
TopicManagementResponse
para ver algunas estadísticas de resultados de alto nivel. Por ejemplo, imprimir la cantidad de suscripciones a temas creadas correctamente congetSuccessCount
.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- Por último, en la función
main
, habilita las llamadas solo a la funciónsubscribeFcmRegistrationTokensToTopic
.
Crea una suscripción y envía un mensaje por tema
- En este punto, ya puedes crear la suscripción al tema y enviarle un mensaje.
- Ejecuta la función
main
de la claseFcmSubscriptionManager.java
. Esto creará una suscripción al tema. - Ahora, configura el código para enviar el mensaje. Al igual que antes,
- En
FcmSender.java
, busca la funciónsendMessageToFcmTopic
. - Establece
topicName
en el tema Energía, es decir,/topics/Energy
. - Crea un objeto
Message
y segmenta su publicación para el tema consetTopic
. - Por último, actualiza el método
main
para habilitar solo la funciónsendMessageToFcmTopic
.
- En
- Ejecuta la función
main
deFcmSender.java
. Esto enviará el mensaje a la instancia de tu app, y podrás observarlo en ella de la siguiente manera.- Instancia de la app en primer plano
- Instancia de la app en segundo plano
Implementa la anulación de la suscripción del servidor de los tokens de registro de FCM al tema de FCM
- Para cancelar la suscripción a temas del servidor, usa esta API de
unsubscribeFromTopic
. Agregarás el código pertinente a la funciónunsubscribeFcmRegistrationTokensFromTopic
de la claseFcmSubscriptionManager.java
.
- La implementación del código de cancelación de suscripción del servidor y la validación de su efecto mediante el envío de un mensaje de tema quedan como ejercicio para ti.
11. Felicitaciones
Felicitaciones. Usaste correctamente los temas de FCM para enviar mensajes multicast a subgrupos de tus instancias de la app. Esto te ayudará a simplificar tu capacidad para llegar a tus usuarios de manera oportuna con contenido pertinente.
Próximos pasos
Ahora que completaste el codelab, considera probar temas para otras plataformas con las siguientes guías: