混合应用运行时Firebase抛出404错误(Ionic 3环境)
我之前做Ionic项目时也碰到过类似的Android端Firebase连不上的问题,给你几个实际有效的排查方向:
检查内容安全策略(CSP)配置
Android WebView对CSP的限制比浏览器和iOS严格得多,漏掉Firebase相关域名就会直接返回404。你可以在src/index.html里的CSP meta标签中添加这些域名:<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.firebaseio.com *.googleapis.com *.gstatic.com *.firebaseapp.com; style-src 'self' 'unsafe-inline'; media-src *">确保所有Firebase相关的请求域名都被允许,尤其是你项目里用到的Firebase服务对应的域名。
核对Firebase初始化配置
有时候复制配置时容易出现拼写错误(比如databaseURL多了斜杠或者少了后缀),浏览器可能有一定容错,但Android WebView会直接解析失败导致404。建议你重新从Firebase控制台复制最新的配置代码,替换项目里的初始化部分,注意不要泄露敏感信息。确认Android权限配置
检查platforms/android/app/src/main/AndroidManifest.xml里是否添加了必要的网络权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />虽然Ionic默认会自动添加,但如果是自定义打包配置或者修改过Manifest文件,可能会不小心删掉这些权限。
尝试更换Firebase SDK版本
既然降级到4.9.0没用,试试升级到4.x系列的后期稳定版,比如4.13.1——这个版本我在Ionic 3项目里用过,兼容性不错。如果愿意的话,也可以尝试升级到Firebase JS SDK v5的早期稳定版(注意v5部分API有变化,需要调整代码)。检查Android WebView版本
旧版本的Android WebView对现代JS特性支持不足,可能导致Firebase初始化失败。你可以在设备上更新Chrome浏览器(Android WebView和Chrome共享内核),或者如果是针对旧设备开发,可以在config.xml里启用Crosswalk WebView(虽然Crosswalk已停止维护,但对旧设备兼容性很好):<preference name="CrosswalkWebView" value="true" />
从你提供的错误日志来看,是请求Firebase的资源时返回404,大概率是网络访问被限制或者配置有误,按照上面的步骤排查应该能解决问题。
内容的提问来源于stack exchange,提问作者Duannx

