Android O の自動入力フレームワークは、パスワード マネージャーに関する長年の遅延問題をついに解決します

Android O の新しい自動入力フレームワークは、パスワード マネージャーのアクセシビリティ サービスに関連する長年の遅延問題を解決します。

Google がリリースしてからすでに 1 か月が経過しました 最初の Android O 開発者プレビュー (時間の経つのは本当に早いものです!) そして、Android の新しいバージョンと同様に、掘り下げるべきことがたくさんあります。 を公​​開しました たくさんの記事 Android O についてはすでに取り上げていますが、十分な注目が集まっていないと感じる機能が 1 つあります。 自動入力フレームワーク.

Android O の自動入力

最近では、パスワード マネージャーは 10 セントほどの価値があります (とはいえ、 オープンソース KeePass の一部)、ただし、Google がパスワード マネージャーを真に正式にサポートするのは Android O の場合のみです。 Android O では、サードパーティ アプリケーションが自動入力サービスの役割を果たすことができ、新しい自動入力フレームワークを通じてアプリと通信します。 標準を使用するアプリ ビュー 要素はすぐに Autofill Framework で動作しますが、開発者が実行できる追加の手順があります。 自動入力用に最適化する アプリのカスタム ビューを自動入力できるようにします。

自動入力可能なビューがフォーカスされると、自動入力フレームワークは自動入力リクエストを呼び出します。 自動入力サービスは、ユーザーが選択できる特定の自動入力データセット (ユーザー名、パスワード、住所、クレジット カード番号など) を送り返すことで応答します。 自動入力サービスは、ユーザーが [設定] --> [アプリと通知] --> [デフォルトのアプリ] --> [自動入力アプリ] で指定します。

Android Oの自動入力アプリ。 クレジット: ラストパス.

上記の新しい自動入力フレームワークの説明は、要求側アプリ側と自動入力サービス側の両方で何が起こっているかを簡単にまとめたものにすぎません。 ここで理解するために最も重要なことは、Android O での自動入力の仕組みの正確な詳細ではなく、 パスワード マネージャー アプリ自体は、ビューがいつ自動入力されるかを検出できなくなりました.


推奨読書: AgileBits が Android O の Autofill フレームワークがどのようになるかを披露


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 という 2 つのイベント タイプの監視を要求します。 これは、アプリ/Web ページのコンテンツがいつ変更されるか、フォーカスされるかを知る必要があるためであり、その後、現在のウィンドウのコンテンツを取得してパスワード入力フィールドを探します。 ただし、サービスは非常に頻繁に発生する 2 つのアクセシビリティ イベントに対して常にこれを実行するため、遅延が発生します。 アクセシビリティ サービスがどのように遅延を引き起こすかについてさらに詳しく説明するには、この問題に関する私の以前の記事を参照してください。


推奨読書: 「意図したとおりに動作する」 - Android のアクセシビリティの遅れを探る


Android O は一石二鳥

Android O が登場する前は、パスワード マネージャーの開発者がこの遅れを軽減するためにできることはほとんどありませんでした。 それは、パスワード管理者は、ユーザー補助サービスを有効にして常時入力フィールドを監視しない限り、自動入力可能な入力フィールドがいつ画面に表示されるかを知る方法がなかったためです。 しかし、Android O の新しい自動入力フレームワークのおかげで、これらのパスワード マネージャーはアクセシビリティ サービスを廃止できるようになりました。 代わりに、データ入力が必要なアプリ自体が、自動入力フレームワークに自動入力サービスの呼び出しを要求し、自動入力サービスがデータを送信します。 この新しいフレームワークのおかげで、ユーザーはパスワードに頼る必要がなくなるため、パスワード入力がはるかに簡単になるだけでなく、 追加の入力方法ですが、パスワード マネージャーのアクセシビリティ サービスを有効にすることに関連する遅延は問題になります。 過去。

皆さんの中には、この事実が画期的ではないかもしれないことは承知していますが、アクセシビリティ サービスに関する議論があまりにも沈黙していたので、この話題は再燃する価値があるのではないかと私は思いました。 今週末はちょっと考えてみましょう!


Android O の新しい Autofill フレームワークについてどう思いますか? 以下のコメント欄でお知らせください。