使用 WebView 对用户进行身份验证

本文档介绍了如何将 Credential Manager API 与使用 WebView 的 Android 应用相集成。Credential Manager 在 1.12.0 版及更高版本的 android.webkit.WebView 库中受到原生支持。

前提条件

如需在 WebView 中使用 Credential Manager,请将以下依赖项添加到应用模块的 build 脚本中:

dependencies {
  implementation("androidx.credentials:credentials:1.6.0-beta02")   
  implementation("androidx.credentials:credentials-play-services-auth:1.6.0-beta02")
  implementation("androidx.webkit:webkit:1.14.0")
}

您还需要使用数字资产链接将应用与您拥有的网站相关联。如需了解详情,请参阅添加数字资产链接

使用 WebKit 库

如需使用 WebKit 库,请检查功能支持情况,然后通过调用 setWebAuthenticationSupport() 启用支持:

class WebViewActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val url = "https://passkeys-codelab.glitch.me/"
            AndroidView(
                factory = { context ->
                    WebView(context).apply {
                        settings.javaScriptEnabled = true

                        webViewClient = WebViewClientImpl()
                    }
                },
                update = { webView ->
                    run {
                        webView.loadUrl(url)
                        if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) {
                            WebSettingsCompat.setWebAuthenticationSupport(
                                webView.settings,
                                WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP,
                            )
                            // Check if getWebauthenticationSupport may have been disabled by the WebView.
                            Log.e(
                                "WebViewPasskeyDemo",
                                "getWebAuthenticationSupport result: " + WebSettingsCompat.getWebAuthenticationSupport(
                                    webView.settings
                                ),
                            )
                        } else {
                            Log.e("WebViewPasskeyDemo", "WebView does not support passkeys.")
                        }
                    }
                },
            )
        }
    }
}

Web 集成

如需了解如何构建 Web 集成,请参阅为无密码登录创建通行密钥。您还可以参考演示网站来源

测试和部署

在受控环境中全面测试整个流程,以验证 Android 应用、网页和后端之间能否正常通信。

将集成解决方案部署到生产环境中,验证后端是否可以处理传入的注册和身份验证请求。后端代码应生成初始 JSON 以用于注册 (create) 和身份验证 (get) 流程。它还应处理对从网页收到的响应的确认和验证。

确认实现与用户体验建议相符。