You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView登录报公钥凭据不支持DOMException如何解决

问题根因

抛出Uncaught (in promise) DOMException: The user agent does not support public key credentials的直接原因是页面调用了Web Authentication(WebAuthn,即公钥凭证)相关API,但当前WebView运行环境没有实现/开启对应API支持,且页面对这个异步接口的异常没有做捕获降级,直接抛出了未捕获的Promise异常。
常见触发场景:

  • 门户网站登录流程集成了通行密钥(Passkey)能力,未做环境兼容性判断就直接调用navigator.credentials.get()/navigator.credentials.create()等公钥凭证接口
  • Android WebView默认未开启公钥凭证相关权限,部分低版本系统WebView、定制ROM阉割版WebView本身就没有实现WebAuthn能力
  • 部分站点将WebAuthn校验作为登录前置流程,没有为不支持该能力的客户端预留传统密码登录的降级路径
处理方案

Android App端适配(可修改内嵌WebView代码时使用)

  • 升级WebView相关依赖:确保使用AndroidX WebView 1.8.0及以上版本,设备上的系统WebView(Chrome内核)版本不低于108,低版本内核无完整WebAuthn支持。
  • 给WebView放行公钥凭证权限,配置参考代码:
// 基础JS配置必须开启
webView.settings.javaScriptEnabled = true
webView.webChromeClient = object : WebChromeClient() {
    override fun onPermissionRequest(request: PermissionRequest?) {
        request?.let {
            // 识别到公钥凭证权限请求时直接放行
            if (PermissionRequest.RESOURCE_PUBLIC_KEY_CREDENTIALS in it.resources) {
                it.grant(arrayOf(PermissionRequest.RESOURCE_PUBLIC_KEY_CREDENTIALS))
                return
            }
            super.onPermissionRequest(it)
        }
    }
}
  • 若遇到定制ROM阉割系统WebView WebAuthn能力的情况,可在App内集成独立的Trichrome WebView运行时,绕开系统WebView的功能限制。
  • 临时调试场景可修改WebView的User-Agent,移除UA中默认携带的; wv标识,部分站点会根据该标识识别WebView环境,修改后可绕过部分强制WebAuthn校验的逻辑。

门户网站前端适配(可修改站点登录页代码时使用)

注意:不要把WebAuthn作为登录流程的唯一分支,必须预留密码、短信验证码等降级登录路径,否则所有低版本WebView、旧版浏览器用户都会遇到登录失败问题

  • 调用WebAuthn接口前必须做特性检测,不支持环境直接降级到传统密码登录流程,同时捕获接口调用异常避免未捕获Promise抛出:
// 提前检测WebAuthn能力支持情况
const supportWebAuthn = !!(window.PublicKeyCredential && typeof window.PublicKeyCredential === 'function')

const loginSubmit = async () => {
  try {
    if (supportWebAuthn) {
      // 执行通行密钥登录逻辑
    } else {
      // 直接走账号密码提交流程
    }
  } catch (err) {
    // 捕获WebAuthn调用异常,自动降级到密码登录
    console.warn('WebAuthn unavailable, fallback to password login', err)
    // 执行密码表单提交逻辑
  }
}
  • 增加WebView环境识别逻辑,检测到Android WebView环境时,默认跳过WebAuthn预加载、前置校验相关逻辑,直接渲染密码登录表单。

内容的提问来源于stack exchange,提问作者Anubhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:27:48