【发布时间】:2019-12-13 02:56:08
【问题描述】:
所以我有一个已经在应用商店上架了很长一段时间的现有应用,截至 3 天前,我收到了更多支持查询,说我的应用无法连接到我的服务。
现在它终于在我的 Android 设备上发生了 - 一切都适用于 iOS,并且适用于模拟器上的 Android - 但在现实世界中什么都没有。
我已经尽我所能使用 Cordova 进行逐步调试,它通过了白名单测试。我的第一个 XHR 请求运行良好,但随后的请求总是失败,直到我完全关闭应用程序并重新打开。
我正在使用cordova-plugin-whitelist@1.3.4 - 我也尝试过cordova-plugin-whitelist@1.0.0
我的Content-Security-Policy 看起来像这样
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' gap:; img-src http://*.my-site.com.au https://*.my-site.com.au https://*.my-site.com http://*.my-site.com https://*.googleusercontent.com http://*.googleapis.com https://google.com https://*.google.com https://*.googleapis.com https://*.gstatic.com 'self' data:; style-src http://*.googleapis.com https://*.googleapis.com 'self' 'unsafe-inline'; script-src 'self' https://*.googleapis.com http://*.googleapis.com http://maps.google.com http://*.gstatic.com https://*.gstatic.com https://maps.google.com 'unsafe-inline' 'unsafe-eval'">
我的 Cordova 配置有
<allow-navigation href="*" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
我尝试使用<access origin="*" /> 添加/删除/替换上述/每个组合,但没有运气。
我的 XHR 响应总是如下所示
xhr.responseUrl = "http://my-site.com/?d=12343902i49"
xhr.status = 0
xhr.responseText = ""
我已经在 Cordova 插件中逐步调试了 XHR 请求,通过在 Whitelist.java 之外的逐步调试,但一切都恢复正常,它成功地上线了
// If we don't need to special-case the request, let the browser load it.
return null;
函数
WebResourceResponse shouldInterceptRequest(WebView view, String url)
在org.apache.cordova.engine.SystemWebViewClient.java
我的 Android 清单有以下内容
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
我使用的是 Cordova@8.0.0,Cordova 平台 Android@8.0.0
我花了几个小时试图深入挖掘,我在这里错过了什么?任何帮助将不胜感激!
【问题讨论】:
-
模拟器的操作系统和设备的操作系统是什么?
-
什么是 XHR 错误日志
标签: java android cordova xmlhttprequest