DdD*_*DdD 7 java android xmlhttprequest cordova
所以我有一个现有的应用程序已经在应用程序商店中存在了很长一段时间,截至 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'">
Run Code Online (Sandbox Code Playgroud)
我的 Cordova 配置有
<allow-navigation href="*" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
Run Code Online (Sandbox Code Playgroud)
我尝试添加/删除/替换上述/每个组合,<access origin="*" />但没有运气。
我的 XHR 响应始终如下所示
xhr.responseUrl = "http://my-site.com/?d=12343902i49"
xhr.status = 0
xhr.responseText = ""
Run Code Online (Sandbox Code Playgroud)
我已经尽可能在 Cordova 插件中逐步调试了 XHR 请求,逐步调试出来,Whitelist.java但一切都恢复正常,并使其成功上线
// If we don't need to special-case the request, let the browser load it.
return null;
Run Code Online (Sandbox Code Playgroud)
功能的
WebResourceResponse shouldInterceptRequest(WebView view, String url)
Run Code Online (Sandbox Code Playgroud)
在 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" />
Run Code Online (Sandbox Code Playgroud)
我正在使用 Cordova@8.0.0,Cordova 平台 Android@8.0.0
我花了几个小时试图深入挖掘,我在这里错过了什么?任何帮助将不胜感激!
如果您降低 targetSDK,问题就会消失,这可能是usesCleartextTrafficNidhin Josehp 提到的。它仅在面向 SDK 28 或更高版本时影响 Android 8 或更高版本的设备。
不用手动编辑AndroidManifest.xml,他建议(在科尔多瓦的应用程序,你不应该手动编辑它),你可以添加这个到config.xml
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Run Code Online (Sandbox Code Playgroud)
您可能需要将小部件标签更改config.xml为如下所示:
<widget id="com.your.app.id" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
Run Code Online (Sandbox Code Playgroud)
(添加的是xmlns:android="http://schemas.android.com/apk/res/android")
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |