簡體   English   中英

如何使用 Android 自動填充 API

[英]How to use Android autofill API

I've built a little browser using the android webview component and am looking to integrate password/credential manager support using the Android AutoFill API.

我已經閱讀了文檔,但完全迷失了,找不到任何與 webviews 等復雜事物集成的示例。

javascript 對我來說不是問題,當用戶在登錄表單上選擇輸入(並且應該顯示自動填充對話框)以及完成輸入用戶名和密碼時,我已經有事件觸發並提交頁面(並且憑據保存回密碼管理器),但我很難理解 android 方面。

webview 似乎已經對此有一些基本的支持,例如,如果我長按登錄表單輸入,並且 select 在上下文菜單中“自動填充”,我可以讓它插入一些保存在憑據管理器中的值。 問題是盡管憑據已針對我的應用程序 ID 而不是網站域保存,所以我的第一個問題是,我如何告訴 API 當我請求自動填充菜單時它是針對特定字段類型的(例如用戶名/密碼)並且屬於特定網站,因此它知道要獲取哪些憑據並可以稍后更新它們? 這是我在登錄表單中選擇字段時觸發自動填充對話框出現的嘗試。

UPDATE: When I create a static webview in my app the autofill correctly saves and prompts for credentials on forms and saves them correctly per site BUT I need this to work in webviews that are in a recyclerview and for some reason they don't despite sharing相同的設置。 我在 recyclerviews https://developer.android.com/guide/topics/text/autofill-optimize#recycle中找到了有關自動填充的信息,但使用setAutofillId()似乎沒有幫助,甚至這里的官方示例似乎也有點不可靠當我在我的手機測試它時

一個簡單的解決方案是讓 webview 處理這個問題。

webView.getSettings().setSaveFormData(true);

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(true);
    webView.setWebChromeClient(new WebChromeClient() /*Or yourOwnWebChromeClient*/);
    webView.setWebViewClient(new WebViewClient() /*Or yourOwnWebViewClient*/);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setSaveFormData(true);

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    CookieSyncManager.getInstance().startSync();

如果需要,您還可以添加 JavaScript 接口

    webView.addJavascriptInterface(this, JSInterface);

我使用了這種方法,它保存了 facebook、instagram 和 dailymotion.com 的登錄令牌。

請試試這個https://stackoverflow.com/a/56562679/9640177

您可以嘗試創建多個緩存

您可能也想參考這個 - https://developer.android.com/guide/webapps/managing-webview#java

此處提供了一份指南,描述了如何讓您的應用准備好利用自動填充功能。 這是描述您的選擇的最相關部分,尤其是在使用 Webview 時:

在許多情況下,自動填充可以在您的應用程序中輕松運行。 但是為了確保一致的行為,我們建議提供明確的提示來告訴框架你字段的內容。 您可以使用 android:autofillHints 屬性或 setAutofillHints() 方法來執行此操作。

但是,要將您的應用與網站相關聯,您需要在應用的清單中添加一些設置。 您將在上面鏈接的第 2 步下看到這一點。

您需要使用asset_statements 資源更新應用程序的清單文件,該資源鏈接到托管您的assetlinks.json 文件的URL。 完成后,您需要將更新后的應用程序提交到 Play 商店,並填寫從屬關系提交表,以便與 go 實時關聯。

使用 Android Studio 3.0 時,App Links Assistant 可以為您生成所有這些。 當您打開 DAL 生成器工具(工具 -> 應用程序鏈接助手 -> 打開數字資產鏈接文件生成器)時,只需確保啟用標有“支持在應用程序和網站之間共享憑據”的新復選框。 同樣,在您的應用程序中使用 WebViews,您可以使用 HTML 自動完成屬性來提供有關字段的提示。 只要您的設備上安裝了 Chrome 61 或更高版本,自動填充功能就可以在 WebViews 中使用。 即使您的應用程序使用自定義視圖,您也可以定義允許自動填充工作的元數據。

我遇到的問題是我的 webviews 嵌入在 recyclerview 中,並且要在 recyclerview 中的 web 視圖上啟用自動填充,您必須將其設置為在 recyclerview 上啟用,而不是在 webview 本身上啟用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM