我使用 Cordova 9.0.0 开发了一个应用程序,并且它已投入生产多年。最近几天,我将 Cordova 版本从 9.x 升级到 10.x。升级后,Http 和 Https(REST API)调用在 release 版本中不起作用。
尽管 API 调用在 android debug build 中运行良好,但已在真实 Android 设备(Realme 3 pro)和 chrome 浏览器中进行了测试。
由于问题发生在release版本中,我无法生成任何错误日志。
我正在使用 AJAX 进行 API 调用。
注意:所有 REST API 均托管于 Https。
AJAX 调用
$.ajax({
type: "POST",
url: "https://example.com/methodName",
data: {
data: mYData
},
contentType: 'application/x-www-form-urlencoded',
timeout: 30000,
success: function (data) {},
error: function (message, textStatus) {}
相关查询:
编辑: 以下错误响应是登录 API 调用。
Cordova 10.0 和 10.1 之间发生了变化。 请检查您的 Cordova 版本并更新至 >10.1 该团队在 10.1 中添加了 http 支持。请检查发行说明。 发行说明 10.1
您必须将此元素添加到 Cordova 的 config.xml 中。
<preference name="scheme" value="http" />
默认情况下仅允许使用 https。
将我自己的问题的解决方案发布给面临同样问题的开发人员,也供我以后参考。
解决方案
将属性
android:usesCleartextTraffic
添加到true
标签内的AndroidManifest.xml文件中的<application>
。
原因
当该属性设置为
"false"
时,平台组件(例如 HTTP 和 FTP 堆栈、DownloadManager 和 MediaPlayer)将拒绝应用程序使用明文流量的请求。
欲了解更多详细信息,请访问 https://developer.android.com/guide/topics/manifest/application-element#usesCleartextTraffic
如果设置 android:usesCleartextTraffic=true 后仍不起作用。然后删除白名单插件(如果已经存在)。或删除其他插件。并重新安装插件。它会起作用的。好像插件没有升级到更高版本。
对于 Android,我建议在 Config.xml
中添加这些行<preference name="hostname" value="localhost" />
<preference name="AndroidInsecureFileModeEnabled" value="true" />