cordova android应用程序-允许互联网连接

8iwquhpp  于 2022-11-15  发布在  Android
关注(0)|答案(1)|浏览(254)

我开发了一个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 访问互联网。

jhdbpxl9

jhdbpxl91#

最新消息:
我已经设法解决了axios调用返回网络错误的问题。这看起来像是由cors引起的。
我通过更新config.xml以包含以下内容来解决这些错误:
应用程序android:usesCleartextTraffic=“真”

<?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://*/*" />
    <allow-intent href="*" />
    <access origin="*" />
    <allow-navigation href="*"/>

    <edit-config
            xmlns:android="http://schemas.android.com/apk/res/android"
            file="app/src/main/AndroidManifest.xml"
            mode="merge"
            target="/manifest/application">
        <application android:usesCleartextTraffic="true" />
    </edit-config>

</widget>

我将内容安全策略更新为:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data:">

虽然这修复了我的API调用,我仍然有我的WebSocket连接失败的问题,但希望以上可能会帮助一些人。

相关问题