Actualizaciones en la aplicación: acelerar las actualizaciones de aplicaciones de Android



Entre la variedad de herramientas anunciadas en Android Dev Summit , me gustaría prestar especial atención al mecanismo de actualización de la aplicación Actualizaciones en la aplicación (IAU), que ayuda a los desarrolladores a acelerar la incorporación de nuevas funciones, correcciones de errores y mejoras de rendimiento. Dado que esta funcionalidad se publicó después de Google I / O 2019, en este artículo hablaré en detalle sobre las IAU, describiré los esquemas de implementación recomendados y daré algunos ejemplos de código. También hablaré sobre nuestra experiencia al integrar IAU en Pandao , una aplicación para ordenar productos desde China.

La nueva API permite a los desarrolladores iniciar una actualización de la aplicación a la última versión disponible en Google Play. De esta forma, las IAU complementan el mecanismo de actualización automática de Google Play existente. Las IAU contienen varios esquemas de implementación que son fundamentalmente diferentes en términos de interacción del usuario.

  1. Flexible Flow ofrece a los usuarios descargar la actualización en segundo plano e instalarla en un momento conveniente para el usuario. Está destinado a casos en los que los usuarios aún pueden usar la versión anterior, pero ya hay una nueva disponible.


  2. El flujo inmediato requiere que los usuarios descarguen e instalen la actualización antes de continuar usando la aplicación. Está destinado a casos en los que es fundamental que los desarrolladores actualicen la aplicación.



Dado que la segunda opción no es tan importante y menos adecuada para la aplicación Pandao, analizaremos el escenario de Flujo Flexible con más detalle.

Integración de flujo flexible de IAU


Casos de uso


El proceso de actualización con IAU consta de varios pasos.

  1. Una aplicación que usa la biblioteca Play Core, que verifica en Google Play si hay actualizaciones disponibles.
  2. Si es así, la aplicación le pide a Google Play que muestre el diálogo de IAU. Google Play muestra al usuario un cuadro de diálogo con una propuesta de actualización.
  3. Si el usuario está de acuerdo, Google Play en segundo plano descarga la actualización, mostrándole al usuario en la barra de estado el progreso de la descarga.
  4. Si la descarga se completa cuando la aplicación se ejecuta en segundo plano, Google Play completará automáticamente la instalación. Si la aplicación está activa en este momento, para tales casos es necesario determinar su propia lógica de finalización de la instalación. Considere los siguientes escenarios.
    1. La aplicación inicia el proceso de instalación mostrando al usuario un cuadro de diálogo de Google Play con un indicador de progreso. Una vez completada la instalación, se inicia una versión actualizada de la aplicación. En este caso, se recomienda mostrar un cuadro de diálogo adicional que permita al usuario confirmar que está listo para reiniciar la aplicación ahora. Este es el esquema de implementación recomendado .
    2. La aplicación espera hasta que esté en segundo plano y luego completa la actualización. Por un lado, este es un comportamiento menos intrusivo desde el punto de vista de UX, ya que la interacción del usuario con la aplicación no se interrumpe. Pero, por otro lado, requiere que el desarrollador implemente la lógica para determinar si la aplicación está en segundo plano.

Si no se completó la instalación de la actualización descargada, Google Play puede completar la instalación en segundo plano. Es mejor no utilizar esta opción explícitamente, ya que no garantiza la instalación de la actualización.

Requisitos básicos de prueba


Para completar manualmente todo el proceso de actualización en un dispositivo de prueba, debe tener al menos dos versiones de la aplicación con diferentes números de ensamblaje: origen y destino .

  • La versión original con un número mayor debe publicarse en Google Play, Google Play la identificará como una actualización disponible. La versión de destino con un número de compilación más bajo y las IAU integradas deben instalarse en el dispositivo, la actualizaremos. La conclusión es que cuando la aplicación le pide a Google Play que busque una actualización, comparará los números de ensamblaje de la versión instalada y disponible. Por lo tanto, las IAU solo se lanzarán si el número de compilación en Google Play es superior a la versión actual en el dispositivo.
  • Las versiones de origen y destino deben tener el mismo nombre de paquete y deben estar firmadas con el mismo certificado de lanzamiento .
  • Android 5.0 (API nivel 21) o superior.
  • Juega Core library 1.5.0 o superior.

Ejemplo de código


Aquí observamos un código de muestra para usar el flujo flexible de IAU, que también se puede encontrar en la documentación oficial . Primero debe agregar la biblioteca Play Core al archivo build.gradle en el nivel del módulo.

dependencies { ... implementation "com.google.android.play:core:1.5.0" } 

Luego, cree una instancia de AppUpdateManager y agregue una función de devolución de llamada a AppUpdateInfo , que devolverá información sobre la disponibilidad de la actualización, el objeto para iniciar la actualización (si está disponible) y el progreso de la descarga actual, si ya ha comenzado.

 // Create instance of the IAUs manager. val appUpdateManager = AppUpdateManagerFactory.create(context) // Add state listener to app update info task. appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> // If there is an update available, prepare to promote it. if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { // ... } // If the process of downloading is finished, start the completion flow. if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { // ... } } .addOnFailureListener { e -> // Handle the error. } 

Para mostrar el cuadro de diálogo para solicitar actualizaciones de Google Play, debe pasar el objeto AppUpdateInfo recibido al método AppUpdateInfo .

  appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.IMMEDIATE for immediate updates. AppUpdateType.FLEXIBLE, // The current activity. activity, REQUEST_CODE ) 

Para supervisar el estado de la actualización, puede agregar el detector de eventos InstallStateUpdatedListener al administrador de IAU.

 // Create a listener to track downloading state updates. val listener = InstallStateUpdatedListener { state -> // Update progress indicator, request user to approve app reload, etc. } // At some point before starting an update, register a listener for updates. appUpdateManager.registerListener(listener) // ... // At some point when status updates are no longer needed, unregister the listener. appUpdateManager.unregisterListener(listener) 

Tan pronto como se descargue la actualización (estado DOWNLOADED ), debe reiniciar la aplicación para completar la actualización. El reinicio se puede iniciar llamando a appUpdateManager.completeUpdate() , pero antes de eso se recomienda mostrar un cuadro de diálogo para que el usuario confirme explícitamente su disposición para reiniciar la aplicación.

 Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() } 

Error "La actualización no está disponible"


Primero, vuelva a verificar el cumplimiento de los requisitos enumerados en la sección Requisitos básicos de implementación. Si ha hecho todo, pero la actualización de acuerdo con la llamada onSuccess aún no está disponible, entonces el problema puede estar en el almacenamiento en caché. Es probable que la aplicación Google Play no conozca la actualización disponible debido al mecanismo de almacenamiento en caché interno. Para evitar esto durante las pruebas manuales, puede forzar el restablecimiento de la memoria caché yendo a la página "Mis aplicaciones y juegos" en Google Play. O simplemente puede borrar el caché en la configuración de la aplicación Google Play. Tenga en cuenta que este problema solo ocurre durante las pruebas, no debería afectar a los usuarios finales, ya que su caché todavía se actualiza diariamente.

Flujo flexible de IAU en la aplicación Pandao


Participamos en un programa de acceso temprano y en el flujo flexible de IAU integrado (implementación recomendada) en la aplicación Pandao, una plataforma en la que los fabricantes y vendedores pueden intercambiar productos chinos. El cuadro de diálogo IAU se mostró en la pantalla principal para que el número máximo de usuarios pudiera interactuar con él. Inicialmente, queríamos mostrar el diálogo no más de una vez al día, para no distraer a las personas de interactuar con la aplicación.

Dado que las pruebas A / B juegan un papel clave en el ciclo de vida de cualquier característica nueva, decidimos evaluar el efecto de las IAU en nuestra aplicación. Dividimos al azar a los usuarios en dos grupos disjuntos. El primero era de control, sin usar IAU, y el segundo grupo era de prueba, mostramos el diálogo de IAU a estos usuarios.


Prueba de flujo flexible A / B de IAU en la aplicación Pandao.

En las últimas versiones, hemos medido el porcentaje de usuarios activos de cada versión de la aplicación. Resultó que entre los usuarios activos con la última versión disponible en ese momento, la parte principal estaba compuesta por participantes del grupo B, es decir, con la función IAU. La línea púrpura en el gráfico muestra que en los primeros días después de la publicación de la versión 1.29.1, el número de usuarios activos con IAU excedió el número de usuarios sin esta función. Por lo tanto, se puede argumentar que los usuarios con IAU actualizan la aplicación más rápido.


El cuadro de diálogo Flujo flexible de IAU en la aplicación Pandao.

Según nuestros datos (consulte el gráfico anterior), los usuarios suelen hacer clic en el botón de confirmación en el cuadro de diálogo IAU en los primeros días después del lanzamiento, y luego la conversión se reduce constantemente hasta la publicación de la próxima versión de la aplicación. Lo mismo se observa con el botón de instalación en el cuadro de diálogo, que inicia la instalación de la actualización descargada. Por lo tanto, podemos decir que el valor de conversión promedio en ambos casos es directamente proporcional a la frecuencia de las emisiones. En Pandao, la conversión promedio dentro de un mes alcanza el 35% por un clic en el botón de confirmación y el 7% por un clic en el botón de instalación.

Suponemos que una disminución en el porcentaje de confirmaciones a lo largo del tiempo es solo un problema de experiencia del usuario, porque las personas que están interesadas en la nueva versión se actualizarán con bastante rapidez, y aquellos que no están interesados ​​en actualizar no estarán interesados. En base a esta suposición, decidimos no molestar a aquellos que no están interesados ​​en actualizar, y no preguntarles todos los días. Es una buena práctica utilizar una lógica de consulta diferente, que se basa en la "obsolescencia", es decir, para no molestar a los usuarios, evaluamos qué versiones antiguas tienen y con qué frecuencia hemos sugerido que actualicen.

En general, las IAU mostraron buenos resultados durante las pruebas A / B, por lo que implementamos las IAU para todos los usuarios.

Agradecimientos


Gracias por su ayuda al escribir este artículo Marina Pleshkova Maryna_Pliashkova , Alexander Cherny alexchernyy , Ilya Nazarov RolaRko , Gleb Bodyachevsky, Daniil Polozov jokerdab , Anastasia Kulik, Vladislav Breus y Vladislav Goldin Vladiskus .

Source: https://habr.com/ru/post/452092/


All Articles