AUTORA: Purnima Kochikar, vicepresidenta de Asociaciones, Google Play
Esta semana celebraremos los diez años de Google Play. En la última década, la creatividad de todos ustedes, combinada con nuestra inversión en una plataforma global, generó un próspero ecosistema de apps. Todos los meses, 2.500 millones de personas de más de 190 países visitan Play para conectarse con apps y juegos y, hasta la fecha, Play generó más de $120.000 millones en ganancias para los desarrolladores. Nos enorgullece mucho este logro fantástico y agradecemos poder asociarnos con ustedes.
Retrospectiva
Me uní al equipo en 2012, algunos meses después del lanzamiento de Google Play. En aquel entonces, la cantidad de usuarios activos de Android había pasado de 100 millones a 400 millones. Android era la novedad del momento y tenía el objetivo audaz de hacer que la computación móvil fuera accesible para todo el mundo, en todo el mundo. Era comprensible que ustedes tuvieran dudas en cuanto a las posibilidades de tener éxito: en muchos aspectos, estábamos muy por detrás de las plataformas de los competidores, y de las funciones y herramientas que estas ofrecían, para diseñar lineamientos y capacidades comerciales. Nuestra confianza en el inmenso potencial de un ecosistema justo y abierto —y lo que es más importante, nuestra confianza en el potencial ilimitado de los desarrolladores— nos impulsó hacia adelante. Nos impulsó y nos sigue impulsando nuestro compromiso con el éxito de todos ustedes.
En aquel entonces, nuestro diminuto equipo de asociaciones, de solo seis personas, buscaba la manera de brindarles el mejor soporte para que aprovecharan las oportunidades y enfrentaran los desafíos de la economía móvil. Había mucha incertidumbre: ¿seríamos capaces de ofrecer las apps que ustedes concebían a un público global que utiliza diferentes dispositivos? ¿Las personas mirarían videos en las pantallas pequeñas de los smartphones, dado el alto costo de los datos móviles y la baja capacidad de los dispositivos? ¿Estarían dispuestas a pagar por juegos para dispositivos móviles y se sentirían seguras haciéndolo? ¿Las personas se suscribirían a contenido de apps de la misma manera que lo hacían con productos físicos, como revistas y periódicos?
Estuvimos con ustedes en cada paso del camino y nos tomamos el tiempo para comprender sus necesidades y encontrar maneras de ayudarlos a compilar apps y juegos hermosos. También invitamos a nuestra comunidad global de usuarios para que colaboraran en la evolución de las apps y los juegos que ustedes crearon, para lo cual ofrecimos funciones como pruebas beta y lanzamiento en etapas, y la capacidad de responder a las reseñas de los usuarios.
Lo que recuerdo con más cariño de aquellos primeros años es trabajar con empresas que nos inspiraron, que inventaron maneras novedosas de aprovechar la magia de los teléfonos celulares. Ampliaron nuestra perspectiva de lo que creíamos posible. Smule es una de las historias de éxito de los primeros años de Play. Es maravilloso ver cómo creció y prosperó en la última década.
A medida que las apps ganaban terreno y los desarrolladores aspiraban a convertirse en empresas globales sostenibles, reforzamos las inversiones en nuestra plataforma comercial para ayudarlos a hacer crecer y administrar sus empresas. Agregamos los métodos de pago más populares y eficaces de todo el mundo para garantizar que los usuarios pudieran pagar por sus apps y juegos sin problemas. Eliminamos las complejidades asociadas con el descubrimiento y la integración de pagos locales, incluido el acceso a más de 300 métodos de pago locales compatibles en 70 países. Además, trabajamos en nuestra plataforma para anticiparnos y dar soporte a sus necesidades comerciales: pasamos de modelos premium a gratuitos y de suscripción. Ahora Google Play ayuda a los consumidores a realizar transacciones con seguridad y sin problemas en más de 170 mercados.
Proporcionamos estadísticas líderes en la industria a través de Play Console en todo el ciclo de vida de las apps, desde las instalaciones hasta Vitals y más, para que los desarrolladores administren sus negocios con eficacia. Recuerdo que todo mi equipo lloró de la emoción cuando Vincenzo Colucci, fundador de Smart Launcher, describió cómo Play le permitía vivir donde quería —en Manfredonia, en el sur de Italia, con sus seres queridos— y compilar apps que tenían un impacto en las personas de todo el mundo. Su empresa también cumplió 10 años hace algunos días.
En cada paso del camino, ustedes nos exigieron más y nos inspiraron a pensar de forma más expansiva. Como respuesta a estas exigencias, nuestros equipos de productos e ingeniería crearon herramientas y capacidades compatibles con todo el excelente trabajo que ustedes hacían. Los comentarios que nos enviaron nos ayudaron a dar forma al lanzamiento de nuevos recursos, funciones y programas que les permitieron tener éxito en la plataforma. Con la ayuda de todos ustedes, logramos evolucionar:
También colaboramos con varios de ustedes para crear nuevas funciones beneficiosas para todo el ecosistema. Por ejemplo, en 2015, trabajamos con Supercell para evitar el fraude y lanzamos la API de compras anuladas, que generó mejoras en toda la industria en relación con la prevención de fraudes y abusos de reembolsos. Asimismo, nuestros socios japoneses y coreanos, como GungHo Online Entertainment y NCSOFT, nos ayudaron a pasar de una plataforma compatible con juegos de pago y descarga, como la primera versión de Angry Birds, de Rovio, a una plataforma LiveOps compatible con juegos como servicio en vivo. Nuestros socios multimedia nos ayudaron a incorporar en nuestra plataforma de suscripciones funciones como Retención de cuenta y Período de gracia. Justamente, usamos esas funciones para ayudar a nuestros socios creadores de apps de deportes a conservar sus suscriptores cuando se implementó el aislamiento en todo el mundo.
Si bien tenemos incontables ejemplos de este tipo en toda una década de asociaciones, estos son 10 de los lanzamientos más memorables de los últimos 10 años:
Fecha
Google Play
2012
Play Developer Console
2013
Google Play Juegos
2014
Experimentos del directorio de la tienda
2015
Indie Games Festival
2016
Android Vitals
2017
Google Play Academy
2018
Google Play Pass
2019
Nueva Google Play Console
2020
Tarifas de servicio por niveles
2021
Google Play Juegos beta en PC
2022
A medida que sus empresas evolucionaban, invertimos en capacidades de productos, como puntos de Google Play, que las ayudaron a retener y volver a captar a los usuarios más leales. Nos enorgullece enormemente que este programa tenga más de 100 millones de miembros en 28 países, y hay una expansión programada para lo que resta del año. También creamos un servicio de consultoría para ofrecer estadísticas comerciales y técnicas que los ayudaron a tomar decisiones más basadas en datos en relación con el mapa de ruta de sus productos y sus planes de expansión global. Nos han comentado que estas estadísticas los ayudaron a obtener millones en ganancias incrementales y a orientar no solo sus estrategias de productos, sino también las de fusiones y adquisiciones.
Por sobre todas las cosas, nuestra sociedad permitió llevar apps y juegos significativos a un público global, y crear empresas exitosas que generaron nuevos empleos y ayudaron a las economías locales. Solo en los EE. UU., Play y Android han ayudado a crear más de 2 millones de empleos. Nos enorgullece el impacto económico que logramos con nuestra colaboración en las comunidades locales y las pequeñas empresas de todo el mundo.
Una mirada al futuro
Mientras hacemos planes para la próxima década, es útil hacer una pausa y reflexionar sobre los dos últimos y excepcionales años en los que trabajamos juntos, y en el impacto sumamente positivo que nuestra asociación tuvo en las vidas de muchas personas. Android y Play, con la tecnología de sus empresas, han conectado a familias y seres queridos, y han ayudado a las personas a sentirse seguras, ya que las ayudaron a cubrir sus necesidades diarias, aceleraron el acceso a la telemedicina, crearon empleos y permitieron que los niños crecieran y aprendieran. Tomemos un momento para reflexionar sobre todo esto.
En estos años aprendimos lecciones importantes sobre nuestra responsabilidad conjunta de promover un ecosistema seguro y confiable, y sobre cuánto más es necesario hacer para que los dispositivos móviles sean accesibles para todas las personas. Cuando pensamos en el futuro, pensamos en las tres siguientes áreas principales:
Ayudar a todas las personas, en todo el mundo a disfrutar del valor de las apps. Para ello, ayudamos a los desarrolladores a ofrecer mejores apps y juegos en todos los dispositivos y pantallas. Ampliaremos el alcance de nuestros juegos a PC mediante Servicios de juego de Play, daremos mayor relevancia a las apps más importantes para cada usuario a través de suscripciones específicas como Play Pass, y ayudaremos a las personas a encontrar los aspectos más importantes de las apps de los desarrolladores mediante Play Offers y LiveOps.
Seguiremos desarrollando nuestras herramientas para ayudarlos a tomar mejores decisiones comerciales, desarrollar nuestros modelos de negocio y ayudarlos a hacer crecer sus empresas con seguridad y entregar experiencias de la mayor calidad a los usuarios en el siempre cambiante panorama de la privacidad y seguridad.
Crearemos un ecosistema para todas las personas. Para ello, invertiremos en iniciativas que mejoren la representación en la industria de los juegos y apps, y daremos prioridad a más fundadores sin suficiente representación para que creen empresas exitosas. El año pasado, pasamos de un modelo de tarifa de servicio “igual para todos” a asegurarnos de que todos los tipos de empresas puedan alcanzar el éxito, y seguiremos ofreciendo varios programas diseñados para respaldar nuestro ecosistema de apps diversas.
Las inversiones que los fundadores experimentados y exitosos hicieron en el desarrollo de próxima generación a través de nuestros programas Indie Game Festival y Accelerator, y el impacto importante de nuestra iniciativa Change the Game y de nuestros esfuerzos de accesibilidad nos dan optimismo en relación con nuestro ecosistema. Esperamos que en la próxima década podamos trabajar en nuestra familia #WeArePlay con muchos más fundadores como Alyssa, de nueve años, y su madre, quienes crearon Frobelles, un juego de ropa y estilos que aumenta la representación de los estilos de peinados africanos y caribeños.
Les agradecemos por ser una parte integral de nuestro objetivo audaz de hacer que los dispositivos móviles sean accesibles para todos, en todas partes. Recorrimos un largo camino y todavía nos queda mucho por recorrer. Cada uno de ustedes nos inspira y, por eso, queremos darles las gracias y recordarles que seguimos comprometidos con su éxito. Tenemos muchas ganas de ver sus próximas creaciones y conocer los nuevos horizontes que nos impulsarán a explorar.
Muchas gracias,
Purnima Kochikar
El mercado de los juegos sigue creciendo a pasos agigantados y el de los juegos para dispositivos móviles es el que más rápido crece en la industria. Según al estudio Global Gaming Market 2021 que realizó NewZoo, los juegos para dispositivos móviles representan ya casi la mitad de los ingresos en la industria de los videojuegos.
Las mejoras tecnológicas son una de las principales razones por las que los juegos para dispositivos móviles están creciendo con tanta rapidez. Los dispositivos móviles son cada vez más potentes, y tienen baterías y pantallas más grandes y mejores. Además, la cobertura de redes inalámbricas se expande rápidamente y hoy es mucho más fácil descargar contenido sobre la marcha desde cualquier lugar. Estas mejoras hacen que los juegos para dispositivos móviles más recientes sean más versátiles, atractivos y divertidos. Genshin Impact es un ejemplo perfecto de un juego que no habría sido posible hace unos años, debido al menor rendimiento y a las limitaciones técnicas (CPU, RAM, etc.) de los dispositivos móviles.
Con menos limitaciones y nuevas oportunidades de negocio, cada vez son más los estudios de juegos que llevan sus franquicias (que antes tenían éxito en PC y consolas) a los dispositivos móviles. Lo hacen para ayudar a los jugadores actuales a continuar con su juego favorito estén donde estén y para llegar a nuevos públicos en dispositivos móviles. Entre los principales títulos para PC y consolas que se lanzaron en dispositivos móviles se incluyen Call of Duty: Mobile (de Activision Publishing), la serie GTA (de Rockstar Games), Lineage 2: Revolution (de Netmarble) y League of Legends: Wild Rift (de Riot Games).
En la actualidad, los desarrolladores de PC y consolas que se inclinan por los dispositivos móviles tienen la oportunidad de ofrecer un título totalmente portado o una adaptación en dichos dispositivos. Si tienes la propiedad intelectual de un juego para PC o consola, en este artículo encontrarás ayuda, ya que se comparten oportunidades y prácticas recomendadas para llevar un juego a un dispositivo móvil.
El valor comercial de la expansión a los dispositivos móviles
Existen dos razones principales para llevar un juego a dispositivos móviles: el acceso a nuevos públicos y las nuevas oportunidades de ingresos.
Nuevos públicos
Los jugadores en dispositivos móviles ahora superan a los de consolas en una proporción de más de 3 a 1. Según Statista, más de 2.800 millones de personas juegan en sus dispositivos móviles, y más de 1.000 millones lo hacen a diario. El dispositivo móvil es la única plataforma de juego accesible para una parte considerable de estos jugadores, por lo que no existe otra forma de llegar a este público potencial.
Nuevas oportunidades de ingresos
Según la última investigación que realizó NewZoo, los juegos para dispositivos móviles generaron ingresos de USD 90.700 millones en 2021, con un crecimiento interanual del 4,4%, y representan el 52% de los ingresos del mercado mundial en la industria de los juegos.
Hay varias razones por las que se espera que el mercado de los dispositivos móviles crezca más que los juegos de PC y consola:
– Descargas semanales de juegos: > 1.000 millones, +25% frente a 2019
– Gasto semanal en tiendas de apps: > USD 1.700 mil millones, +40% frente a 2019
– Tiempo semanal dedicado: >5.000 millones de horas, +35% frente a 2019
– Gasto mensual en juegos por dispositivo: USD 9, +45% de crecimiento en dos años
Planificación de la portabilidad a dispositivos móviles
A la hora de llevar tu IP a los dispositivos móviles, debes empezar por considerar tu estrategia y la mejor manera de abordar la plataforma.
Si quieres saber si puedes trasladar tu juego a un dispositivo móvil, deberás tener en cuenta el rendimiento técnico de tu juego, analizar la CPU, las GPU, la RAM, y otras capacidades de los dispositivos móviles. También se trata de la experiencia que tendrán los jugadores con el juego en la pantalla de un dispositivo móvil, donde interactúan mediante el tacto. La experiencia del jugador también se relaciona con las posibles diferencias entre los juegos de PC, consola y para dispositivos móviles. Por ejemplo, puede resultar más fácil jugar en una pantalla táctil, lo que daría a quienes juegan en dispositivos móviles una ventaja sobre los que juegan en PC y consolas. Es posible que para determinar la forma correcta de optimizar tu juego para dispositivos móviles debas realizar algunas pruebas a fin de evaluar los aspectos técnicos y de experiencia del jugador.
Portabilidad interna o externa Si tu juego se desarrolló en un motor de juego como Unity o Unreal, es posible que puedas portar o desarrollar un nuevo juego usando los recursos existentes con relativa facilidad. Si el juego utiliza un motor propietario, la portabilidad puede ser más difícil. Una opción que vale la pena considerar es recurrir a un estudio de portabilidad de terceros. Estos profesionales pueden portar tu título y brindarte los materiales de origen (activos y código) para continuar con el desarrollo.
Desarrolla tu juego para dispositivos móviles
Cuando se trata de desarrollar juegos para dispositivos móviles, hay que tener en cuenta una serie de consideraciones que quizás no se hayan encontrado en el desarrollo para PC o consolas. En esta sección se detallan los aspectos clave que debes planificar y las herramientas disponibles para ayudarte.
Rendimiento y escalabilidad
Los desarrolladores de Android tienen a su disposición varias herramientas para garantizar que la experiencia del usuario sea la mejor posible y poder llegar al público a través de una amplia gama de dispositivos.
Piensa en la cobertura y calidad mientras aseguras tu lanzamiento
Prioriza el rendimiento a fin de ofrecer una experiencia de usuario buena
Tamaño del juego
Cuanto más pequeño sea el archivo de distribución inicial de tu juego, mejor. En el caso de los juegos más grandes, es mejor dividir la descarga en varios bloques, por ejemplo, que se descargue primero el selector del juego y, luego, los activos adicionales, mientras el usuario interactúa con el juego. Otra forma de dividir las descargas es omitir los niveles y mapas de la descarga inicial y, en su lugar, entregar estas partes del juego cuando se necesiten o cuando el jugador las solicite.
Puedes usar varias herramientas para reducir el tamaño del archivo de distribución original y administrar las descargas adicionales:
Obtén más información para administrar el tamaño de las descargas de los juegos en la guía para desarrolladores de Android sobre cómo reducir el tamaño de los juegos.
Adaptación de la IU
Este es un tema importante. Puedes tener un gran juego de PC o consola, pero ¿será igual de impresionante en una pantalla más pequeña? ¿Será posible jugar en un dispositivo móvil? A fin de optimizar tu juego para dispositivos móviles, ten en cuenta la IU del dispositivo y cómo adaptar los controles del juego para que el usuario pueda jugar en una pantalla más pequeña con controles de tacto (en la mayoría de los casos). A continuación, te mostramos algunos ejemplos de áreas en las que debes centrarte:
Protección de la propiedad intelectual
Para que tu fiel comunidad siga saludable y feliz, asegúrate de proteger tu título de las modificaciones. Google ofrece soluciones para ayudar a evitar posibles abusos, a la vez que asegura tu negocio y cuida de tus usuarios.
Estas son algunas herramientas que pueden ayudarte a proteger tu propiedad intelectual en Google Play:
Monetización de tu juego
Los modelos de monetización disponibles en los dispositivos móviles son similares a los de las plataformas de PC y consola. Aunque el modelo freemium es el más destacado, cambiar el enfoque de monetización puede requerir mejoras y ajustes relacionados con el juego. Estas son las opciones de monetización disponibles en Play Store:
Premium: los jugadores pagan una vez y obtienen el producto completo sin limitaciones. Para los títulos premium en Google Play, considera Google Play Pass. Se trata de un servicio de suscripción que ofrece cientos de apps y juegos sin anuncios ni compras directas desde la app. Play Pass ofrece una colección de títulos de alta calidad, mientras que se agrega contenido regularmente.
Freemium: los jugadores descargan el juego sin costo inicial para acceder a una parte del juego. Luego, se monetiza el juego con lo siguiente:
Híbrido: se usa una combinación de IAP, anuncios y suscripciones, tanto en juegos freemium como premium. Por ejemplo, es muy común el uso de IAP y anuncios en un juego freemium o de suscripciones en uno premium.
El desafío de seleccionar el mejor enfoque de monetización tiene que ver con que, en dispositivos móviles, tu juego llega a un público muy diverso, desde los jugadores más serios que están dispuestos a comprar un juego premium o pagar una suscripción mensual, hasta los más casuales que podrían comprar IAP o ver anuncios sin problemas. Cuando determines si el modelo híbrido es el adecuado para tu juego, asegúrate de equilibrar la economía del juego para garantizar que todos los jugadores tengan un acceso justo y la misma oportunidad de progresar. También podría ser difícil adoptar un enfoque freemium para una portabilidad completa de un título originalmente premium y, por esta razón, muchos estudios crean una adaptación de la IP que se compila en torno al modelo freemium desde el principio.
A fin de comprender cuál es el mejor modelo de monetización para tu juego, consulta la guía de monetización y el curso de la Academia de Play.
Crea tu base de jugadores
Una excelente manera de poner en marcha tu juego en Play Store es usar el poder de tu comunidad y tu base de fans. Puedes ofrecerles la oportunidad de experimentar su juego favorito de una nueva manera y en una nueva plataforma. Considera la posibilidad de realizar una promoción cruzada de tu juego para dispositivos móviles a través de los canales de marketing existentes, como las redes sociales, los foros e incluso dentro del mismo juego. Las campañas de RR. PP e influencers son otra forma de llegar a tu base de fans existente.
Hay varias herramientas disponibles para hacer crecer tu público en dispositivos móviles:
Otras consideraciones
Las calificaciones y reseñas son fundamentales para todos los juegos, ya que reflejan su calidad. Cuanto mejores sean las calificaciones, mejor se aceptará el juego. Asegúrate de estar familiarizado con las herramientas de Google Play para analizar tus calificaciones y reseñas disponibles en Play Console, como la API Reply to Reviews y las comparativas.
LiveOps es la distribución estratégica de contenidos e interacciones limitadas con los jugadores, como eventos y ventas en el juego. Estos eventos están diseñados para reforzar el compromiso y la monetización, a la vez que ayudan a reducir la tasa de abandono de jugadores y a mejorar el valor de duración (LTV). A fin de crear una estrategia de LiveOps, es necesario estudiar las motivaciones de los jugadores para entender cómo satisfacer a los distintos segmentos de usuarios a lo largo de su ciclo de vida (juego temprano, medio y tardío). Si inviertes en LiveOps, la nueva sección de eventos de LiveOps Cards en Google Play es otra gran manera de ayudar a los usuarios a descubrir tu juego y volver a atraer a los jugadores. Obtén más información sobre el Programa de acceso anticipado de LiveOps Cards aquí.
Resumen
El mercado de los juegos para dispositivos móviles ofrece una gran oportunidad de ampliar el alcance de los juegos existentes de PC y consolas. A través de una planificación y una adaptación bien pensadas, muchos grandes títulos ya han dado el salto a los dispositivos móviles con gran éxito. Descubre más prácticas recomendadas y recursos que te ayuden a portar tus juegos actuales a dispositivos móviles, incluidos títulos de alta fidelidad, para ampliar el alcance de tu público, las oportunidades de ingresos y nuevas formas de crear relaciones duraderas con los jugadores.
Los eventos de ViewModel son acciones provenientes de ViewModel que la IU debe realizar. Por ejemplo, mostrar un mensaje informativo al usuario o navegar a una pantalla diferente cuando cambia el estado de la app.
Nuestra guía sobre los eventos de ViewModel está sesgada de dos formas diferentes:
Es posible que en tu app expongas eventos de ViewModel a la IU con canales de Kotlin u otras transmisiones reactivas, como SharedFlow, o bien quizás se trate de un patrón que observaste en otros proyectos. Cuando el productor (el ViewModel) dura más tiempo que el consumidor (IU, Compose o Views), que puede ser el caso de los eventos de ViewModel, estas API no garantizan el envío y procesamiento de esos eventos. Esto puede dar lugar a errores y problemas futuros para el desarrollador y constituye una experiencia de usuario inaceptable para la mayoría de las apps.
SharedFlow
ViewModel
Debes controlar los eventos de ViewModel de inmediato, lo que provocará una actualización del estado de la IU. Intentar exponer los eventos como un objeto mediante otras soluciones reactivas, como Channel o SharedFlow, no garantiza el envío y procesamiento de los eventos.
A continuación, se muestra un ejemplo de implementación de un ViewModel en el flujo de pagos típico de una app. En los siguientes fragmentos de código, el MakePaymentViewModel directamente indica a la IU que deberá dirigirse a la pantalla de resultados de pago cuando regrese el resultado de la solicitud de pago. Usaremos este ejemplo para explorar por qué el control de eventos puntuales de ViewModel como este causa problemas y mayores costos de ingeniería.
MakePaymentViewModel
La IU consume este evento y navega en consecuencia:
La implementación de navigateToPaymentResultScreen que se muestra arriba tiene varios defectos de diseño.
navigateToPaymentResultScreen
Un canal no garantiza el envío y procesamiento de los eventos. Por lo tanto, los eventos pueden perderse, lo que provoca un estado incoherente en la IU. Un ejemplo de esto podría ocurrir cuando la IU (consumidor) pasa a segundo plano y detiene la recopilación del Channel justo después de que el ViewModel (productor) envía el evento. Lo mismo puede decirse de otras API que no son un tipo de soporte de datos observable, como SharedFlow, que podrían emitir eventos aunque no haya consumidores escuchando.
Channel
Este es un antipatrón porque el estado del resultado de pago modelado en la capa de la IU no es durable ni atómico si pensamos en una transacción ACID. Puede que el pago haya tenido éxito en lo que respecta al depósito, pero nunca pasamos a la siguiente pantalla adecuada.
Nota: Este antipatrón se podría mitigar con Dispatchers.Main.immediate cuando se envían y reciben eventos. Sin embargo, si esto no se aplica mediante una comprobación de lint, esta solución podría ser propensa a errores, ya que los desarrolladores podrían olvidarla con facilidad.
Dispatchers.Main.immediate
Para una app que admite varios tamaños de pantalla, la acción de IU que se realiza dado un evento ViewModel podría ser diferente según el tamaño de la pantalla. Por ejemplo, la app de casos de éxito debe ir a la pantalla de resultados de pago cuando se ejecuta en un teléfono celular; pero si se ejecuta en una tablet, la acción podría mostrar el resultado en una parte diferente de la misma pantalla.
El ViewModel debe indicar a la IU cuál es el estado de la app y la IU debe determinar cómo reflejarlo. El ViewModel no debería indicar a la IU las acciones que debe realizar.
Modelar el evento como algo que se envía y se olvida es lo que causa problemas. Cumplir con las propiedades ACID es más difícil, por lo que no se puede garantizar la máxima fiabilidad e integridad de los datos. Según el estado, suceden eventos. Cuanto más tiempo pase sin controlarse un evento, más difícil será el problema. Para los eventos de ViewModel, procesa el evento tan pronto como sea posible y genera un nuevo estado de IU a partir de él.
En el caso de éxito, creamos un objeto para el evento (representado como un Boolean) y lo expusimos con un Channel:
Boolean
// Create Channel with the event modeled as a Booleanval _navigateToPaymentResultScreen = Channel<Boolean>()// Trigger event_navigateToPaymentResultScreen.send(isPaymentSuccessful)
Una vez que lo hagas, habrás asumido la responsabilidad de garantizar cuestiones como el envío y control exactos. Si por alguna razón debes modelar un evento como un objeto, limita su tiempo de vida para que sea lo más corto posible y no tenga oportunidad de perderse.
El control de un evento puntual en ViewModel se suele reducir a una llamada de método; por ejemplo, la actualización del estado de la IU. Una vez que se llama a ese método, se sabe si se completó con éxito o si hubo una excepción, y se sabe que ocurrió exactamente una vez.
Si te encuentras en una de estas situaciones, vuelve a considerar lo que en verdad significa ese evento único del ViewModel para tu IU. Contrólalos de inmediato y redúcelos al estado de la IU que se expone con un soporte de datos observable, como StateFlow o mutableStateOf.
StateFlow
mutableStateOf
El estado de la IU representa mejor la IU en un momento dado, ofrece más garantías de envío y procesamiento, suele ser más fácil de probar y se integra de forma coherente con el resto de la app.
Si te cuesta encontrar una forma de reducir los eventos puntuales de ViewModel a un estado, vuelve a considerar lo que en verdad significa ese evento para tu IU.
En el ejemplo anterior, el ViewModel debe exponer lo que son los datos reales de la app (los datos de pago, en este caso) en lugar de indicarle a la IU la acción que debe realizar. La siguiente es una mejor representación de ese evento del ViewModel controlado y reducido al estado, y expuesto con un tipo de soporte de datos observable.
En el código anterior, el evento se controla de inmediato cuando se llama a _uiState.update (#L28) con los nuevos datos de paymentResult (#L31). Así, no hay forma de que el evento se pierda. El evento se redujo a estado y el campo paymentResult en MakePaymentUiState refleja los datos de la solicitud del resultado del pago.
_uiState.update
paymentResult
MakePaymentUiState
Así, la IU reaccionaría ante los cambios en el paymentResult y actuaría en consecuencia.
Nota: En tu caso de uso, la Actividad no finish() y se guarda en la pila de atrás, el ViewModel necesitaría exponer una función para borrar el paymentResult del UiState (es decir, fijando el campo en null) que se llamará después de que la Actividad inicie la otra. Puedes encontrar un ejemplo de esto en la sección Cómo los eventos de consumo pueden activar actualizaciones de estado de la documentación.
finish()
null
Como se mencionó en la sección Consideraciones adicionales de la capa de la IU, puedes exponer el estado de la IU de tu pantalla con varias transmisiones, si eso es lo que requiere tu caso de uso. Lo importante es que esas transmisiones sean tipos de soporte de datos observables. En el ejemplo anterior, se expone una transmisión de estado de IU única porque la marca isLoading y la propiedad paymentResult están muy relacionadas. Si se separan, podría haber incoherencias en la IU; por ejemplo, si isLoading es true y paymentResult no es null. Si están juntas en la misma clase de UiState, podemos diferenciar con mayor claridad los campos que conforman el estado de la IU de la pantalla, lo que causa menos errores.
isLoading
true
Esperamos que esta entrada de blog te haya ayudado a entender las razones por las que recomendamos 1) controlar de inmediato los eventos puntuales de ViewModel y reducirlos al estado, y 2) exponer el estado con un tipo de soporte de datos observable. Creemos que este enfoque te ofrece más garantías de envío y procesamiento, suele ser más fácil de probar y se integra de forma coherente con el resto de tu app.
Declinación de garantías: Al igual que el resto de nuestras orientaciones sobre arquitectura, considera esta entrada como una guía y adáptala según tus necesidades.
Para obtener más información acerca de este tema, consulta la documentación sobre eventos de la IU.
Agradecemos especialmente a Adam Powell por los interminables debates, conocimientos y aportes que sumó a esta entrada de blog. También agradecemos a Ale Stamato y a Jose Alcérreca por sus revisiones minuciosas.