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
相关产品推荐
相关产品推荐

