Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 平台不允许颤振不安全的http_Android_Flutter_Http - Fatal编程技术网

Android 平台不允许颤振不安全的http

Android 平台不允许颤振不安全的http,android,flutter,http,Android,Flutter,Http,Flatter团队最近做了这个更改,现在不允许不安全的http连接。 我想知道如何将手机上的Flitter应用程序连接到PC上运行的本地go服务器 我的服务器正在运行:但它没有连接到它。正如我已经回答的那样。来解决你的问题。首先在res/xml目录中名为network\u security\u config的文件中添加以下配置(我的完整路径是/Users/dolphin/source/third-party/Cruise/android/app/src/main/res/xml/network

Flatter团队最近做了这个更改,现在不允许不安全的http连接。

我想知道如何将手机上的Flitter应用程序连接到PC上运行的本地go服务器


我的服务器正在运行:但它没有连接到它。

正如我已经回答的那样。来解决你的问题。首先在res/xml目录中名为
network\u security\u config
的文件中添加以下配置(我的完整路径是
/Users/dolphin/source/third-party/Cruise/android/app/src/main/res/xml/network\u security\u config
):


这可能允许http通信。但它只是用于在本地环境或测试环境中进行调试,最好的方法是使用https通信。更多信息:

在android/app/AndroidManifest中

<application ...
  android:networkSecurityConfig="@xml/network_security_config" >

 <meta-data android:name="io.flutter.network-policy"
        android:resource="@xml/network_security_config"/>

然后在其中创建一个文件夹xml创建一个文件:network\u security\u config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <base-config cleartextTrafficPermitted="true">
     <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
  </base-config>
 </network-security-config>

我正在使用

final String baseUrl='0http://......herokuapp.com/';

这个url给了我这个例外,但是我做了httphttps

final String baseUrl='0https://......herokuapp.com/';

那是由于某些手机的安全目的


这对我很有用,提前谢谢

实现这一点的简单方法是在AndroidManifest.xml中使用此属性,这将允许http通信:

<application android:usesCleartextTraffic="true">
</application>

通常需要(而且更可取)使用https链接而不是http链接。但是,这可以被覆盖,如下所示

安卓 打开android/app/src/main文件夹中的AndroidManifest.xml文件。然后将
usesCleartextTraffic
设置为
true

<application
    ...
    android:usesCleartextTraffic="true"
    ...   >
了解更多信息

网间网操作系统 打开ios/Runner文件夹中的Info.plist文件。然后添加以下键

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
更多信息,请参阅

马科斯 这与iOS相同。打开macos/Runner文件夹中的Info.plist文件。然后添加以下键

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads

1-转到以下路径:yourProject\android\app\src\main\res
并创建名为xml的文件夹

2-打开此路径:yourProject\android\app\src\main\res\xml 并创建名为network\u security\u config.xml的xml文件

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <base-config cleartextTrafficPermitted="true">
     <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
  </base-config>
 </network-security-config>
3-在network\u security\u config.xml文件中写入以下内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

4-您需要转到以下路径:yourProject\android\app\src\main\AndroidManifest.xml:

<application
    android:usesCleartextTraffic="true"

    <activity>
         <meta-data android:name="io.flutter.network-policy"
              android:resource="@xml/network_security_config"/>
     </activity>
 </application>

如果您尝试了上述所有解决方案,但没有修复,则应关闭模拟器并再次打开,因为gradle中的更改是重要的更改,因此他们需要它。您需要关闭模拟器,然后再次打开它以查看上述解决方案的结果。

对我来说,最简单的解决方案是将以下行添加到我的DEBUG清单文件中,该文件可以在$project\u path\android\app\src\DEBUG\AndroidManifest.xml中找到:

<application
    android:usesCleartextTraffic="true"

    <activity>
         <meta-data android:name="io.flutter.network-policy"
              android:resource="@xml/network_security_config"/>
     </activity>
 </application>


重要-直到我重新启动模拟器,它才起作用,所以请确保不要跳过这一步。

我将颤振HTTP库升级到最新版本

然后将URI声明更改为HTTPS而不是HTTP

    final http.Response response = await http.post(
        Uri.https('<IP_ADDRESS>', ''),

        headers: <String, String>{
            '<YOUR_HEADERS>',
        },
        body: jsonEncode(<String, Object>{
            '<REQUEST_BODY>',
        }),
    );
final http.Response=wait http.post(
Uri.https('',''),
标题:{
'',
},
正文:JSONECODE({
'',
}),
);
这为我解决了问题

简单的方法:

Android

转到android/app/src/main/AndroidManifest.xml。打开AndroidManifest.xml文件。然后在内部设置android:usesCleartextTraffic=“true”

例如:

    <uses-permission android:name="android.permission.INTERNET" /> //This line add
    <application
        android:name="io.demo.app.test"
        android:label="ProjectName"
        android:usesCleartextTraffic="true" //This line add
        android:icon="@mipmap/ic_launcher">
//此行添加
iOS

转到主词典下的ios/Runner/info.plist并打开info.plist设置以下代码行:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
完成此浸泡后,关闭此应用程序并运行:

  • 扑通
  • 飞舞酒吧
  • 飞跑

我不知道有人说要更改app/src/main/AndriodManifest.xml中的Android清单文件,而flift网站上的教程明确指出:

如果要允许Android调试版本使用HTTP连接,可以将以下代码段添加到$project\u path\Android\app\src\debug\AndroidManifest.xml中:

<application
    android:usesCleartextTraffic="true"

    <activity>
         <meta-data android:name="io.flutter.network-policy"
              android:resource="@xml/network_security_config"/>
     </activity>
 </application>

请阅读如何通过与您的帖子共享的相同指南链接启用http网络请求。您可以只允许到域的不安全连接。不接受特定IP地址作为输入。这与平台支持的一致。您可以检查步骤4代码吗?对于那些在iOS上进行测试并想知道将代码放在哪里的人,我在AndroidManifest.xml:46:5-49:17上的元素活动缺少'name'键属性,这是一个错误;将iOS应答中的代码放在
标记之间。另外,再次检查主机防火墙是否未启用。