Android 8:不允许使用Cleartext HTTP流量

时间:2017-08-29 13:48:07

标签: android http https

我收到了Android 8用户的报告,我的应用(使用后端Feed)没有显示内容。经过调查,我发现在Android 8上发生以下异常:

08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

(我已删除包名,URL和其他可能的标识符)

在Android 7及更低版本上一切正常,我没有在Manifest中设置android:usesCleartextTraffic(并将其设置为true没有帮助,无论如何都是默认值),我也没有使用Network Security信息。如果我致电NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(),则会针对Android 8返回false,针对旧版本返回true,使用相同的apk文件。 我试图在关于Android O的Google信息上找到一些提及,但没有成功。

35 个答案:

答案 0 :(得分:1008)

根据Network security configuration -

  

从Android 9(API级别28)开始,禁用明文支持   默认情况下。

另请查看 - https://koz.io/android-m-and-the-war-on-cleartext-traffic/

选项1 -

创建文件res / xml / network_security_config.xml -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

选项2 -

android:usesCleartextTraffic Doc

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

同样,@david.s' answer指出android:targetSandboxVersion也可能是一个问题 -

根据Manifest Docs -

  

android:targetSandboxVersion

     

此应用使用的目标沙箱。沙盒版本越高   数量越多,安全级别越高。其默认值为1;您   也可以将其设置为2.将此属性设置为2将应用程序切换为   一个不同的SELinux沙箱。以下限制适用于a   2级沙箱:

     
      
  • Network Security Config中的默认值usesCleartextTraffic为false。
  •   
  • 不允许共享Uid。
  •   

所以选项3 -

如果android:targetSandboxVersion中有<manifest>,请将其缩小为1

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

答案 1 :(得分:59)

在AndroidManifest中我找到了这个参数:

    android:networkSecurityConfig="@xml/network_security_config"

和@ xml / network_security_config在network_security_config.xml中定义为:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--Set application-wide security config using base-config tag.-->
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>  

我刚将cleartextTrafficPermitted改为true

答案 2 :(得分:36)

将您的网址从 HTTP更改为HTTPS

成功了!

答案 3 :(得分:33)

您可能只想在调试时允许使用明文,但是保留了在生产环境中拒绝明文的安全性好处。这对我很有用,因为我在不支持https的开发服务器上测试了我的应用程序。以下是在生产环境中强制使用https,但在调试模式下允许使用明文的方法:

在build.gradle中:

// Put this in your buildtypes debug section:
manifestPlaceholders = [usesCleartextTraffic:"true"]

// Put this in your buildtypes release section
manifestPlaceholders = [usesCleartextTraffic:"false"]

在AndroidManifest.xml中的应用程序标记中

android:usesCleartextTraffic="${usesCleartextTraffic}"

答案 4 :(得分:20)

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
    </domain-config>
</network-security-config>

在上面提供的建议中,我提供的网址为 http://xyz.abc.com/mno/

我将其更改为 xyz.abc.com ,然后它开始工作。

答案 5 :(得分:19)

我在 Android 9 中遇到的问题是在带有http的域的网络视图上导航 this answer

中的解决方案
<application 
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

和:

res / xml / network_security_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>

答案 6 :(得分:18)

对某人可能有用。

我们最近在Android 9上也遇到了同样的问题,但是我们只需要在WebView中显示一些Urls,没有什么特别的。因此,在清单中添加android:usesCleartextTraffic="true"是可行的,但是我们不想为此牺牲整个应用程序的安全性。 因此解决方法是将链接从http更改为https

答案 7 :(得分:14)

我已经从已经存在的android清单文件中删除了这一行

 android:networkSecurityConfig="@xml/network_security_config" 

并添加

android:usesCleartextTraffic="true"

此到清单中的应用程序标记

<application
    android:usesCleartextTraffic="true"
    android:allowBackup="true"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    >

然后出现此错误不允许对overlay.openstreetmap.nl的明文HTTP流量在Android 9和10中消失了。我希望这对Android 8也适用,如果可以帮助您别忘了投票谢谢你

答案 8 :(得分:9)

好吧,这是⇒⇒不是⇐⇐ 将其重复数千次添加到您的清单中,但这只是基于此的提示,但是给您额外的好处(也许还有一些背景信息)。

Android具有src-Directory的一种覆盖功能。

默认情况下,您拥有

  

/ app / src / 主要

但是您可以添加其他目录来覆盖您的AndroidManifest.xml。运作方式如下:

  • 创建目录 / app / src / debug
  • 在内部创建AndroidManifest.xml

在此文件内,您不必将所有规则放入其中,而只需将您要从/ app / src / < strong> main / AndroidManifest.xml

这里是一个示例,显示请求的CLEARTEXT-Permission的外观:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.yourappname">

    <application
            android:usesCleartextTraffic="true"
            android:name=".MainApplication"
            android:label="@string/app_name"
            android:icon="@mipmap/ic_launcher"
            android:allowBackup="false"
            android:theme="@style/AppTheme">
    </application>

</manifest>

有了这些知识,您现在很容易将1,2,3取决于您的 debug |重载权限。主|释放环境。

最大的好处是……您的生产清单中没有调试资料,并且您可以保持简单易维护的结构

答案 9 :(得分:9)

最简单的解决方案[Xamarin表格]

对于Android

  1. 转到Android Project,然后单击Properties

enter image description here

  1. 打开AssemblyInfo.cs并将此代码粘贴到此处:

    [assembly: Application(UsesCleartextTraffic =true)]

enter image description here

对于iOS

使用NSAppTransportSecurity

Enter image description here

您必须将NSAllowsArbitraryLoads文件中YES词典下的NSAppTransportSecurity键设置为info.plist

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

Plist configuration

答案 10 :(得分:7)

添加... android:usesCleartextTraffic =“ true” ...到您的清单文件中似乎可以解决该问题,但对数据完整性构成威胁。

出于安全原因,我在清单文件中使用了manifest placeholdersandroid:usesCleartextTraffic(例如Option 3 of the accepted answer,例如@ Hirishikesh Kadam 的响应),只允许使用明文在调试环境中。

在我的 build.gradle(:app)文件中,我添加了一个清单占位符,如下所示:

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            manifestPlaceholders.cleartextTrafficPermitted ="true"
        }
    }

在上面的这一行上注意占位符名称 cleartextTrafficPermitted

            manifestPlaceholders.cleartextTrafficPermitted ="true"

然后在我的Android清单中,我使用了相同的占位符...

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="${cleartextTrafficPermitted}"
        ...>
        ...
    </application>
</manifest>

因此,仅在调试环境下才允许明文通信。

答案 11 :(得分:7)

好的,我已经弄明白了。这是由于我添加的Manifest参数android:targetSandboxVersion="2"因为我们也有Instant App版本 - 它应该确保用户从Instant App升级到常规应用程序时,他不会通过传输丢失他的数据。然而,由于模糊的描述提示:

  

指定此应用程序要使用的目标沙箱。更高的sanbox版本将具有更高的安全级别。

     

此属性的默认值为1.

它显然也增加了新级别的安全策略,至少在Android 8上。

答案 12 :(得分:4)

用于React Native项目

它已在RN 0.59上修复。 您可以在upgrade diff from 0.58.6 to 0.59上找到 您可以应用它而无需升级RN版本,请按照以下步骤操作:

创建文件:

android/app/src/debug/res/xml/react_native_config.xml-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="false">localhost</domain>
    <domain includeSubdomains="false">10.0.2.2</domain>
    <domain includeSubdomains="false">10.0.3.2</domain>
  </domain-config>
</network-security-config>

android/app/src/debug/AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

  <application tools:targetApi="28"
      tools:ignore="GoogleAppIndexingWarning" 
      android:networkSecurityConfig="@xml/react_native_config" />
</manifest>

检查接受的答案以了解根本原因。

答案 13 :(得分:4)

对我来说,有效的答案是@PabloCegarra的答案:

<?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>

您可能会收到有关cleartextTrafficPermitted="true"

的安全警告

如果您知道要列入“白名单”的域,则应将接受的答案和上述答案混在一起:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">books.google.com</domain>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </domain-config>
</network-security-config>

此代码对我有效,但是我的应用仅需要从books.google.com检索数据。 通过这种方式,安全警告消失了。

答案 14 :(得分:2)

将以下内容放入您的pwd中:

resources/android/xml/network_security_config.xml

这可以解决Android(Cordova / Ionic)上的<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> 问题。

答案 15 :(得分:2)

 cleartext support is disabled by default.Android in 9 and above

 Try This one I hope It will work fine

1 Step:->  add inside android build gradle (Module:App)
            useLibrary 'org.apache.http.legacy'

  android {
               compileSdkVersion 28
              useLibrary 'org.apache.http.legacy'

          }

然后2步:->清单 在清单应用程序标签中添加

<application
    android:networkSecurityConfig="@xml/network_security_config">//add drawable goto Step 4

   // Step --->3  add to top this line  
     <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />

</application>

//步骤4->>创建Drawable >> Xml文件>>名称为>> network_security_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>

答案 16 :(得分:1)

如果您使用的是 ionic ,并且在本地http 插件期间遇到此错误,则需要进行以下修复-

转到resources/android/xml/network_security_config.xml 更改为-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
    </domain-config>
</network-security-config>

对我有用!

答案 17 :(得分:1)

尝试使用“ https://”(而不是“ http://”)访问URL

答案 18 :(得分:1)

在标头中添加此参数解决了我在apiSauce React Native中的问题

"Content-Type": "application/x-www-form-urlencoded",
  Accept: "application/json"

答案 19 :(得分:1)

更新2019年12月ionic-4.7.1

<manifest xmlns:tools=“http://schemas.android.com/tools”>

<application android:usesCleartextTraffic=“true” tools:targetApi=“28”>

请在android manifest .xml文件中添加以上内容

ionic的先前版本

  1. 确保在Ionic Project的config.xml中具有以下内容:

    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
                <application android:networkSecurityConfig="@xml/network_security_config" />
                <application android:usesCleartextTraffic="true" />
            </edit-config>
    
  2. 运行离子Cordova构建android。它在Platforms下创建Android文件夹

  3. 打开Android Studio并打开项目中存在的Android文件夹 项目平台Android。静置几分钟,以便建立gradle

  4. gradle build完成后,我们在将minSdVersion包含在manifest.xml中时遇到了一些错误。 现在,我们要做的就是从<uses-sdk android:minSdkVersion="19" />中删除manifest.xml

    确保将其从两个位置都删除:

    1. app→清单→AndroidManifest.xml
    2. CordovaLib→清单→AndroidManifest.xml

    现在尝试再次构建gradle,现在可以成功构建

  5. 确保在App→清单→Androidmanifest.xml的Application标签中具有以下内容:

    <application
    android:networkSecurityConfig="@xml/network_security_config"  android:usesCleartextTraffic="true" >
    
  6. 打开network_security_config(应用程序→res→xml→network_security_config.xml)。

    添加以下代码:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">xxx.yyyy.com</domain>
        </domain-config>
    </network-security-config>
    

此处xxx.yyyy.com是HTTP API的链接。确保在URL之前不包含任何Http。

注意:现在使用Android Studio来构建应用程序(构建-Build Bundle's / APK-Build APK),现在您可以使用该应用程序了,它在Android Pie中可以正常工作。如果您尝试使用ionic Cordova build android来构建应用程序,它将覆盖所有这些设置,因此请确保使用Android Studio来构建Project。

如果您安装了任何较旧的应用程序版本,请卸载它们并尝试一下,否则将出现一些错误:

  

未安装应用

答案 20 :(得分:1)

在我的情况下,URL在浏览器中也不起作用。

我用https://www.google.com/进行检查

webView.loadUrl("https://www.google.com/")

对我有用。

答案 21 :(得分:1)

将您的网址从HTTP更改为HTTPS;

答案 22 :(得分:1)

要将这些各种答案应用于const Text( 'OVER', style: TextStyle(decoration: TextDecoration.overline), ); ,可以使用类和程序集级别的属性,而无需手动编辑Xamarin.Android

当然需要Internet许可(是)。

AndroidManifest.xml

注意:通常,程序集级属性会添加到您的[assembly: UsesPermission(Android.Manifest.Permission.Internet)] 文件中,但是AssemblyInfo.cs之下和using之上的任何文件都可以使用。

然后在您的Application子类上(如果需要,创建一个),可以添加对namespace文件的引用的NetworkSecurityConfig

Resources/xml/ZZZZ.xml

#if DEBUG [Application(AllowBackup = false, Debuggable = true, NetworkSecurityConfig = "@xml/network_security_config")] #else [Application(AllowBackup = true, Debuggable = false, NetworkSecurityConfig = "@xml/network_security_config"))] #endif public class App : Application { public App(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer) { } public App() { } public override void OnCreate() { base.OnCreate(); } } 文件夹中创建一个文件(如果需要,请创建Resources/xml文件夹)。

示例xml文件,请根据需要进行调整(请参见其他答案)

xml/network_security_config

您还可以在<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">www.example.com</domain> <domain includeSubdomains="true">notsecure.com</domain> <domain includeSubdomains="false">xxx.xxx.xxx</domain> </domain-config> </network-security-config> 上使用UsesCleartextTraffic参数:

ApplicationAttribute

答案 23 :(得分:0)

创建文件-res / xml / network_security.xml

在network_security.xml->

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">192.168.0.101</domain>
    </domain-config>
</network-security-config>

打开AndroidManifests.xml:

 android:usesCleartextTraffic="true" //Add this line in your manifests

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme">

答案 24 :(得分:0)

对于 Xamarin.Android 开发人员,请确保HttpClient实现和SSL / TLS设置为“默认”。

可以在Andorid选项->高级Android选项下找到。

enter image description here

答案 25 :(得分:0)

这样做是出于安全原因,您应该始终倾向于尽可能使用HTTPS(HTTP 安全)。
您可以详细了解here

针对此问题,有多种解决方案,具体取决于您的情况。

如果您尝试与第一方服务进行通信,即IE:您自己的Web服务器

服务器端::您应该向该服务器添加HTTPS支持,并使用HTTPS代替HTTP。如今,您甚至可以使用LetsEncryptothers等服务免费免费做到这一点
客户端:如果您使用的是HttpURLConnection软件包中的java.net,则可以切换到HttpsURLConnection软件包中的java.net.ssl如果API不完全相同,那么切换应该毫不费力。

如果您使用的是第三方服务,例如Google,Facebook,天气服务等。

如果您正在与之通信的服务支持HTTPS(很可能是这样),则可以将请求URL从http://abc.xyz更改为https://abc.xyz

作为最后的选择,如果要与之通信的第三方服务不支持HTTPS或任何其他形式的安全通信,则可以使用this answer,但是同样,不建议这样做,因为它会失败这项急需的安全功能的目的。

答案 26 :(得分:0)

只需在AndroidManifest.xml文件中添加android:usesCleartextTraffic =“ true”

答案 27 :(得分:0)

更改API版本9.0后,将错误消息明文HTTP流量禁止发送到YOUR-API.DOMAIN.COM(targetSdkVersion =“ 28”)。在xamarin,xamarin.android和android studio中。

两个步骤来解决xamarin,xamarin.android和android studio中的错误。

步骤1:创建文件资源/xml/network_security_config.xml

在network_security_config.xml中

<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">mobapi.3detrack.in</domain>
  </domain-config>
</network-security-config>

第2步:更新AndroidManifest.xml-

在应用程序标签上添加android:networkSecurityConfig =“ @ xml / network_security_config”。 例如:

<application android:label="your App Name" android:icon="@drawable/icon" android:networkSecurityConfig="@xml/network_security_config">

答案 28 :(得分:0)

从Android 9.0(API级别28)开始,默认情况下禁用明文支持。 选项1 - 创建文件res / xml / network_security_config.xml-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

选项2- AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

答案 29 :(得分:0)

明文 是任何未加密或打算加密的传输或存储的信息。

当应用使用明文网络流量(例如HTTP(不是https ))与服务器进行通信时,可能会增加黑客入侵和篡改内容的风险。第三方可以注入未经授​​权的数据或泄露有关用户的信息。这就是为什么鼓励开发人员仅保护流量(例如HTTPS)的原因。 Here是解决此问题的实现方式和参考。

答案 30 :(得分:0)

在开发我的应用程序时,我也遇到相同的“不允许明文HTTP通信”错误。我在我的应用程序中使用Retrofit2进行网络调用,并且我有两个项目环境(开发和生产)。我的生产域具有通过HTTPS调用的SSL证书,而开发人员将没有https。配置已添加到构建版本中。但是当我改用dev时,就会触发此问题。因此,我为此添加了以下解决方案。

我在清单中添加了明文流量

 android:usesCleartextTraffic="true"

然后,我在改造配置类OKHttp创建时间中添加了一个连接规范。

 .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))

完整的OkHttpClient创建如下所示

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .readTimeout(10, TimeUnit.SECONDS)
        .connectTimeout(10, TimeUnit.SECONDS)
        .cache(null)
        .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
        .addInterceptor(new NetworkInterceptor(context))
        .addInterceptor(createLoggingInterceptor())
        .addInterceptor(createSessionExpiryInterceptor())
        .addInterceptor(createContextHeaderInterceptor())
        .build();

答案 31 :(得分:0)

我将Cordova 8与cordova-plugin-whitelist 1.3.4一起使用 并且它默认配置我的应用程序无法访问互联网,并且我仅在manifest.xml-> android:usesCleartextTraffic =“ true”

中添加一个参数

Cordova 8中mainfest的路径已更改:platform / android / app / src / main / AndroidManifest.xml。

 <?xml version='1.0' encoding='utf-8'?>
    <manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
        <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
        <application 
android:hardwareAccelerated="true" 
android:icon="@mipmap/ic_launcher" 
android:label="@string/app_name" 
android:supportsRtl="true" 
android:usesCleartextTraffic="true">
            <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
                <intent-filter android:label="@string/launcher_name">
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    </manifest>

这是一个真正的愚蠢,因为很明显您的应用程序需要访问Internet...。

答案 32 :(得分:0)

升级到React Native 0.58.5或更高版本。 他们在RN 0.58.5中的配置文件中有includeSubdomain

ChangeLog

在Rn 0.58.5中,他们使用服务器域声明了network_security_config。网络安全配置允许应用允许来自特定域的明文流量。因此,无需在清单文件的应用程序标记中声明android:usesCleartextTraffic="true"来进行额外的工作。升级RN版本后,它将自动解决。

答案 33 :(得分:0)

videoView 无法打开此视频 在线视频

创建文件 res/xml/network_security_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>

应用程序下的AndroidManifest.xml文件中的新增内容:

android:networkSecurityConfig="@xml/network_security_config"

https://techprogrammingideas.blogspot.com/2021/02/android-code-for-displaying-video-with.html

https://youtu.be/90hWWAqfdUU

答案 34 :(得分:-1)

Oneliner解决您的问题。我假设您将URL存储在myURL字符串中。添加此行,您就完成了。 myURL = myURL.replace(“ http”,“ https”);