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

Firebase手机号登录遇“hostname match not found”错误求助

Java WebView Firebase手机号登录出现"hostname match not found"的解决思路

可能的原因及对应解决方案

1. 修正WebView的Host头传递

Firebase的域名验证依赖请求的Host头,Java WebView可能未正确传递或被修改。可以通过自定义WebViewClient强制设置正确的Host头:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        Map<String, String> modifiedHeaders = new HashMap<>(request.getRequestHeaders());
        // 替换为你在Firebase后台授权的域名
        modifiedHeaders.put("Host", "your-authorized-domain.com");
        return super.shouldInterceptRequest(view, new WebResourceRequest() {
            @Override
            public Uri getUrl() { return request.getUrl(); }
            @Override
            public boolean isForMainFrame() { return request.isForMainFrame(); }
            @Override
            public boolean hasGesture() { return request.hasGesture(); }
            @Override
            public String getMethod() { return request.getMethod(); }
            @Override
            public Map<String, String> getRequestHeaders() { return modifiedHeaders; }
            @Override
            public boolean isRedirect() { return request.isRedirect(); }
            @Override
            public boolean isRequestOnly() { return request.isRequestOnly(); }
        });
    }
});

2. 开启WebView的Cookie与DOM存储支持

Firebase验证流程依赖Cookie和DOM存储,Java WebView默认可能限制了这些功能,需手动开启:

WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setAllowThirdPartyCookies(true);
// Android 5.0+ 允许混合内容(若页面包含HTTP资源)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

3. 核对Firebase授权域名的完整性

  • 若WebView加载的页面使用带端口的域名(如https://your-domain.com:3000),需在Firebase后台添加带端口的完整域名作为授权项;
  • 若使用子域名,需确保所有相关子域名已被添加到授权列表中。

4. 确认页面的Firebase初始化配置

检查WebView加载的HTML页面中,Firebase初始化的authDomain字段必须与Firebase后台授权的域名完全一致:

firebase.initializeApp({
  apiKey: "YOUR_API_KEY",
  authDomain: "your-authorized-domain.com", // 必须匹配授权域名
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
});

5. 调整Android系统的网络安全策略

Android 11及以上版本对WebView的跨域请求有严格限制,需确保:

  • 在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 若使用HTTP协议(不推荐),需在application标签中添加:
android:usesCleartextTraffic="true"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:30:43