Нова платформа автозаповнення в Android O вирішить давню проблему затримки, пов’язану зі службами доступності менеджерів паролів.
Минув уже місяць, як Google випустив перший Android O Developer Preview (час швидко летить!), і, як і в будь-якій новій версії Android, тут є багато чого для вивчення. Ми опублікували багато статей про Android O вже, але я відчуваю, що одна функція не отримала належної уваги: Рамка автозаповнення.
Автозаповнення в Android O
Менеджерів паролів у наші дні – десяток копійок (хоча ми частково до KeePass з відкритим кодом), але лише з Android O офіційно Google підтримує менеджери паролів. З Android O програми сторонніх розробників можуть заповнювати список служб автозаповнення, які спілкуються з програмами через нову структуру автозаповнення. Програми, які використовують стандартні Переглянути елементи працюватимуть із платформою автозаповнення з коробки, хоча є додаткові кроки, які розробники можуть зробити, щоб оптимізувати для автозаповнення щоб гарантувати автоматичне заповнення будь-яких користувацьких представлень програми.
Коли автозаповнюваний вид потрапляє у фокус, Autofill Framework викличе запит на автозаповнення. Служба автозаповнення відповідає, надсилаючи назад певні набори даних автозаповнення (наприклад, ім’я користувача, пароль, адреса, номери кредитних карток тощо), які користувач може вибрати. Службу автозаповнення вказує користувач у меню «Налаштування» --> «Програми та сповіщення» --> «Програми за умовчанням» --> «Програма автозаповнення».
Наведене вище пояснення щодо нової інфраструктури автозаповнення – це лише короткий опис того, що відбувається як у програмі, яка надсилає запит, так і в службі автозаповнення. Найважливіше для вашого розуміння тут не точні деталі того, як працює автозаповнення в Android O, а той факт, що самі програми для керування паролями більше не визначають, коли представлення можна заповнити автоматично.
Рекомендована література: AgileBits демонструє, як виглядатиме платформа автозаповнення Android O
Автозаповнення перед Android O
Порівняйте це з тим, як працювало автозаповнення до Android O. До того, як менеджери паролів мали будь-який офіційний метод визначення того, коли представлення можна було заповнити автоматично Програма повинна була запровадити службу доступності для сканування поточного перегляду, щоб знайти автозаповнюваний поля.
Однак використання служби доступності може призводять до значного відставання за певних умов. Однак затримка, пов’язана зі службою доступності вашого типового менеджера паролів, настільки очевидна, що такі популярні служби, як LastPass, навіть мають сторінки підтримки щодо проблеми. Ці сторінки підтримки зазвичай повідомляють вам, що ваш єдиний вихід для роботи з надмірною затримкою, спричиненою їх Служба доступності полягає в тому, щоб вимкнути службу доступності або перейти на використання власного введення метод. У будь-якому випадку ви втратите будь-яку можливість автозаповнення.
Але чому саме служба доступності LastPass або будь-яка інша служба доступності менеджера паролів викликає таку затримку? Причина полягає в тому, що ці менеджери паролів повинні використовувати служби доступності для виявлення полів введення. Служба доступності атрибути визначені в ан Файл ресурсів XML в APK, щоб ми могли побачити, як працює Служба, декомпілюючи файл APK.
Нижче наведено файл ресурсів, взятий із декомпіляції LastPass APK:
"@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 />
З цього ми можемо отримати таку інформацію: Служба доступності LastPass запитує два типи подій для моніторингу - TYPE_VIEW_FOCUSED і TYPE_WINDOW_CONTENT_CHANGED. Це робиться тому, що йому потрібно знати, коли вміст програми/веб-сторінки змінюється або потрапляє у фокус, а потім отримує поточний вміст вікна, щоб знайти поля для введення пароля. Але оскільки служба постійно робить це на двох подіях доступності, які надзвичайно часто запускаються, це призводить до затримки. Для більш глибокого обговорення того, як служби доступності можуть спричиняти затримку, я посилаюся на свою попередню статтю з цього питання.
Рекомендована література: «Робота за призначенням» - дослідження затримки доступності Android
Android O вбиває двох зайців одним пострілом
До Android O розробники менеджерів паролів не могли багато чого зробити, щоб зменшити це відставання. Це тому, що менеджери паролів не могли дізнатися, коли на екрані з’явилося поле для введення з автозаповненням, не ввімкнувши Службу доступності для постійного контролю за ними. Але завдяки новій системі автозаповнення в Android O ці менеджери паролів тепер можуть припинити використання своїх служб доступності. Натомість програми, які потребують введення даних, самі вимагатимуть від Autofill Framework викликати службу автозаповнення, яка потім надішле дані. Завдяки цьому новому фреймворку користувачам не тільки стане набагато легше вводити пароль, оскільки їм більше не доведеться покладатися на додатковий метод введення, але затримка, пов’язана з увімкненням служб доступності менеджерів паролів, буде справою минуле.
Я знаю, що для деяких із вас цей факт може бути не проривним, але я подумав, що, оскільки дискусія навколо Служби доступності була настільки німою, цю тему, можливо, варто було б знову розпалити. Лише їжа для роздумів на цих вихідних!
Що ви думаєте про нову систему автозаповнення Android O? Дайте нам знати в коментарях нижче!