我开发了一个cordova react应用程序,在本地主机上查看时运行良好。
该应用程序包括socket.io,用于连接到在局域网上运行的node.js服务器。
当我构建我的android应用程序,并安装.apk时,我无法连接到WebSocket。我相信这是因为网络错误阻止cordova应用程序访问内部本地网络??或者cors??的问题?
我为CORS设置了以下内容:
<meta http-equiv="Content-Security-Policy" content="script-src-elem * 'self' gap: 'unsafe-inline'; default-src * 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
虽然是在本地主机上工作,但我收到的跨源请求被阻止:相同的请求策略不允许阅读连接到我的本地IP 192.161.1.3的远程资源。
下面是我的 cordova config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.cordovareactapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>APP</name>
<description>APP</description>
<author email="dev@cordova.apache.org" href="https://cordova.apache.org">
Apache Cordova Team
</author>
<icon src="src/img/icon.png" />
<content src="index.html" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<access origin="*" />
<allow-navigation href="*"/>
</widget>
我只搜索了一下,发现我需要允许 cordova 访问,但我正在努力解决这个问题。
我在config.xml的widget标记内和allow-navigation标签下添加了以下内容。
<edit-config file="AndroidManifest.xml" target="/manifest" mode="merge">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</edit-config>
但我无法构建Android应用程序:
Task :app:mergeDebugResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.res.ResourceCompilerRunnable
> Resource compilation failed. Check logs for details.
任何帮助来解决这个问题将是伟大的。我认为这是一个问题与CORS和允许 cordova 访问互联网。
1条答案
按热度按时间jhdbpxl91#
最新消息:
我已经设法解决了axios调用返回网络错误的问题。这看起来像是由cors引起的。
我通过更新config.xml以包含以下内容来解决这些错误:
应用程序android:usesCleartextTraffic=“真”
我将内容安全策略更新为:
虽然这修复了我的API调用,我仍然有我的WebSocket连接失败的问题,但希望以上可能会帮助一些人。