Ya ha pasado un mes desde que Google lanzó laprimera versión preliminar para desarrolladores de Android O (¡el tiempo pasa muy rápido!) y, como sucede con cualquier versión nueva de Android, hay mucho que investigar. Ya hemos publicadomuchos artículossobre Android O, pero hay una característica que creo que no ha recibido la atención que merece: elAutofill Framework.
Autocompletar en Android O
Hoy en día, los administradores de contraseñas son muy comunes (aunque preferimosel de código abierto KeePass), pero Google solo admite oficialmente los administradores de contraseñas con Android O. Con Android O, las aplicaciones de terceros pueden desempeñar el papel de un servicio de autocompletado, que se comunica con las aplicaciones a través del nuevo marco de autocompletado. Las aplicaciones que usan elementosde vistaestándar funcionarán con el marco de autocompletado de forma predeterminada, aunque hay pasos adicionales que los desarrolladores pueden realizar para optimizar el autocompletado y garantizar que cualquiera de las vistas personalizadas de la aplicación se pueda autocompletar.
Cuando una vista que se puede completar automáticamente entra en foco, el marco de autocompletar invocará una solicitud de autocompletar. El servicio de autocompletar responde enviando ciertos conjuntos de datos de autocompletar (como el nombre de usuario, la contraseña, la dirección, los números de tarjeta de crédito, etc.) que el usuario puede seleccionar. El servicio de autocompletar lo especifica el usuario en Configuración --> Aplicaciones y notificaciones --> Aplicaciones predeterminadas --> Aplicación de autocompletar.
La explicación del nuevo marco de autocompletar anterior es solo un breve resumen de lo que sucede tanto en la aplicación solicitante como en el servicio de autocompletar. Lo más importante para su comprensión aquí no son los detalles exactos de cómo funciona el autocompletar en Android O, sino el hecho de que lasaplicaciones de administración de contraseñas ya no detectan cuándo se puede autocompletar una vista.
Lectura recomendada: AgileBits muestra cómo lucirá el marco de autocompletar de Android O
Autocompletar antes de Android O
Compare eso con cómo funcionaba el autocompletado antes de Android O. Antes de que los administradores de contraseñas tuvieran algún tipo de método oficial para detectar cuándo una Vista podía autocompletarse, cada aplicación tenía que implementar un Servicio de Accesibilidad para escanear la Vista actual con el fin de encontrar campos autocompletables.
Sin embargo, el uso de un servicio de accesibilidad puede generar un retraso considerable en determinadas circunstancias. Sin embargo, el retraso asociado con el servicio de accesibilidad de un administrador de contraseñas típico es tan evidente que servicios populares como LastPass incluso tienen páginas de soporte relacionadas con el problema. Estas páginas de soporte generalmente le indican que su único recurso para lidiar con el retraso excesivo causado por su servicio de accesibilidad es deshabilitar el servicio de accesibilidad o cambiar a usar su propio método de entrada personalizado. De cualquier manera, perderá cualquier tipo de capacidad de autocompletar.
Pero, ¿por qué exactamente el Servicio de Accesibilidad de LastPass, o el Servicio de Accesibilidad de cualquier otro administrador de contraseñas, parece causar tanto retraso? La razón es que estos administradores de contraseñas tienen que utilizar los Servicios de Accesibilidad para detectar los campos de entrada.Los atributosde un Servicio de Accesibilidad se definen en unarchivo de recursos XMLdentro del APK, por lo que podemos ver cómo funciona el Servicio descompilando el archivo APK.
A continuación se muestra el archivo de recursos obtenido al descompilar el APK de LastPass:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeViewFocused|typeWindowContentChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestEnhancedWebAccessibility="true"
xmlns:andro />
A partir de esto, podemos extraer la siguiente información: el servicio de accesibilidad de LastPass solicita dos tipos de eventos para supervisar: TYPE_VIEW_FOCUSED y TYPE_WINDOW_CONTENT_CHANGED. Lo hace porque necesita saber cuándo cambia o se enfoca el contenido de una aplicación o página web y, luego, recupera el contenido de la ventana actual para buscar campos de entrada de contraseña. Pero como el servicio hace esto constantemente en dos eventos de accesibilidad que se activan con mucha frecuencia, se produce un retraso. Para obtener una discusión más detallada sobre cómo los servicios de accesibilidad pueden causar retraso, le remito a mi artículo anterior sobre el tema.
Lectura recomendada: "Funcionando como se espera": una exploración del retraso en la accesibilidad de Android
Android O mata dos pájaros de un tiro
Antes de Android O, los desarrolladores de gestores de contraseñas no podían hacer mucho para mitigar este retraso, ya que no tenían forma de saber cuándo había un campo de entrada autocompletable en la pantalla sin habilitar un servicio de accesibilidad para que lo supervisara constantemente. Pero gracias al nuevo marco de autocompletar de Android O, estos gestores de contraseñas ahora pueden retirar sus servicios de accesibilidad. En su lugar, las aplicaciones que necesitan introducir datos solicitarán al marco de autocompletar que llame al servicio de autocompletar que enviará los datos. Gracias a este nuevo marco, no solo la introducción de contraseñas será mucho más sencilla para los usuarios, ya que ya no tendrán que depender de un método de entrada adicional, sino que el retraso asociado con la habilitación de los servicios de accesibilidad de los gestores de contraseñas será cosa del pasado.
Sé que para algunos de ustedes este hecho puede no ser una novedad, pero pensé que, dado que el debate en torno al Servicio de Accesibilidad ha sido tan silencioso, valdría la pena retomar este tema. ¡Algo para reflexionar este fin de semana!
¿Qué opinas del nuevo marco de autocompletar de Android O? ¡Cuéntanoslo en los comentarios a continuación!