ChatGPT解决这个技术问题 Extra ChatGPT

Android 8:不允许明文 HTTP 流量

我收到来自 Android 8 用户的报告,称我的应用(使用后端提要)不显示内容。经过调查,我发现 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 并没有帮助,无论如何这都是默认值),我也没有使用网络安全信息。如果我调用 NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(),它会使用相同的 apk 文件返回 Android 8 的 false,旧版本的 true。我试图在有关 Android O 的 Google 信息中找到一些提及,但没有成功。

这发生在我维护的应用程序上,因为在某些情况下服务器会从 HTTPS 重定向到 HTTP。

N
Nick

根据Network security configuration -

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

也看看Android M and the war on cleartext traffic

Codelabs explanation 来自 Google

选项1 -

首先尝试使用 https:// 而不是 http:// 访问 URL

选项 2 -

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

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

选项 3 -

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 沙箱。以下限制适用于 2 级沙箱: 网络安全配置中 usesCleartextTraffic 的默认值为 false。不允许 Uid 共享。

所以选项4 -

如果您在 <manifest> 中有 android:targetSandboxVersion,则将其减少为 1

AndroidManifest.xml -

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

@HrishikeshKadam 非常感谢您的回答,但似乎在最新版本的 P 中必须有另一个步骤?请看我的问题stackoverflow.com/questions/51770323/…
ClearText HTTP 是否意味着他们只是使用 http 站点而不是 https?
如果每个开发者都想添加 android:usesCleartextTraffic="true",那么这个 Android 安全功能有什么意义?
这甚至没有提到这个问题的最佳解决方案:使用 HTTPS。此答案中提到的选项应该只是最后的手段。
@林果皞 google play store 最终会很容易禁止使用此标志的应用程序
P
Pablo Cegarra

我在 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>

我可以在 gradle 中以某种方式重写它吗?
不为我工作。我无法让我的模拟器连接到 10.0.2.2
这不是发布版本中“最安全”的事情。
如果我想把端口号放在一起怎么办?
为我工作得很好!谢谢!
P
Praveenkumar

在 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


完美。更多信息在这里:codelabs.developers.google.com/codelabs/…
更改后重新安装应用程序
它对我有用的唯一答案(我必须创建文件并添加参数)。
除非这是针对内部应用程序,否则禁用 ssl 要求并不是一个好习惯。但即便如此,也不应该被禁用。
T
Tyler

您可能只想在调试时允许明文,但保留在生产中拒绝明文的安全优势。这对我很有用,因为我针对不支持 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}"

不过,它仅用于 api 23+。如果您想要一个独立于 api 的解决方案,那么在 stackoverflow.com/questions/46302058/… 处获得批准的解决方案是一个不错的选择...
问题:当应用程序使用可以设计为 http 或 https 的 web 服务器时,即使 http url 需要能够使用 web 服务,也将 usesCleartextTraffic:"false" 吗?那么将其设置为 true 意味着默认情况下 https 服务不会发送明文吗?
s
suther

好的,那是 ⇒⇒ 不是 ⇐⇐ add it to your Manifest 的数千次重复,而是基于此的提示,但会给您额外的好处(也许还有一些背景信息) .

以下解决方案允许您为每个环境设置协议(HTTP / HTTPS)。

这样,您就可以将 http 用于您的 DEV-Environment,将 https 用于您的 PRODUCTION-Environment,而无需一直更改它!这是必需的,因为通常您没有本地或开发环境的 https 证书,但它是生产环境(也可能是暂存环境)的必备条件。

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

默认情况下,您有

/app/src/main

但是您可以添加其他目录来覆盖您的 AndroidManifest.xml。下面是它的工作原理:

创建目录 /app/src/debug

在里面创建 AndroidManifest.xml

在此文件中,您不必将所有规则放入其中,而只需将您喜欢从 /app/src/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。主要 |释放环境。

最大的好处...您的生产清单中没有调试内容,并且您保持了一个直截了当且易于维护的结构


这绝对是正确的解决方案。 Android 添加这些安全设置是有原因的,因此它们应该存在。您的解决方案允许我们在本地不安全的环境中进行测试,而生产版本仍将具有推荐的安全设置。谢谢!
e
eli

如果可能,将您的网址从 HTTP 更改为 HTTPS

成功了!!!


这是怎么被赞成的?如果您的服务器 url 不是 https,您将收到握手异常
赞成,因为这是正确的做法(在生产环境中)。 HTTPS 应该是默认值,而不是 HTTP。
@beetsta 您假设您可以完全控制提供内容的内容。因此,这个答案本质上是幼稚或轻率的。
@beetstra 为什么在调试时应该在本地机器上默认使用 HTTPS?这太愚蠢了,只是谷歌家长式作风的另一个例子。幸运的是,可以通过 Tyler 的解决方案在调试模式下解决此问题。
答案是无知的问题。与小公司中的人不同,有时您没有为每个登台服务器设置 SSL。答案就像有人在 Facebook 帖子中纠正语法一样糟糕,这根本不能回答问题,也不能解决问题。
L
Lorence
<?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 然后它开始工作。


域!= URL。 “http”是协议。该协议永远不是域的一部分。
这是正确的,那里只支持 FQDN,没有 IP 地址(上面已修复)。
不适用于域 10.0.2.2。我应该添加端口号吗?
如果我使用 IP 地址而不是域怎么办?
E
El_o.di

它可能对某人有用。

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


如果我只想显示一些 URL,我不需要 WebView。我只是使用一个TextView。 ;) 我想你的意思是你显示一些 html 页面。仅当您的服务器提供 SSL 时,您的修复才有效。您不能简单地更改链接。
这肯定是尽可能最好的选择,但不能总是选择那个 - 无论是出于性能原因还是因为资源可能在明文 HTTP 中不可用。
“我们不想损害整个应用程序的安全性”,它会导致哪些安全风险?就我而言,没有一个 URL,因此我无法将它们添加到清单中。
嗨@RobertWilliams,这只是意味着允许清除流量而不是加密流量。这是一篇博文medium.com/@son.rommer/…
E
Erick M. Sprengel

对于 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>

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


我使用 react-native 0.59.5 并且我遇到了同样的问题,我们必须按照您的建议手动设置 AndroidManifest.xml。
谢谢它有帮助由于谷歌政策,我必须制作 android:usesCleartextTraffic="false" 然后我遇到了在模拟器中从本地运行 react-native 的问题,我确实应用了上述步骤,它对我有用。
c
creativecoder

我已经从已经存在的 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"
    >

那么这个错误 Cleartext HTTP traffic to overlay.openstreetmap.nl not allowed 在 android 9 和 10 中对我来说已经消失了。我希望这也适用于 android 8 如果它有帮助你不要忘记投票谢谢


拯救了我的一天。非常感谢😊☺️
它不会影响应用程序的任何现有功能吗?
S
Sam Shaba

添加 ... android:usesCleartextTraffic="true" ... 到您的清单文件似乎可以解决问题,但它会对数据完整性造成威胁。

出于安全原因,我在清单文件中使用了 manifest placeholdersandroid:usesCleartextTraffic(就像在 Option 3 of the accepted answer 中,即@Hrishikesh 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 Manifest 中,我使用了相同的占位符......

AndroidManifest.xml -

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

这样,仅在调试环境下才允许明文流量。


H
Hemant Ramphul

最简单最简单的解决方案 [Xamarin Form]

安卓版

转到 Android 项目,然后单击属性,

https://i.stack.imgur.com/oVc2y.png

打开 AssemblyInfo.cs 并在此处粘贴此代码:[assembly: Application(UsesCleartextTraffic =true)]

https://i.stack.imgur.com/npJHb.png

对于 iOS

使用 NSAppTransportSecurity

https://i.stack.imgur.com/xD7n9.png

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

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

https://i.stack.imgur.com/Fh3GC.png


这就像一个魅力,精湛的@Hemant Ramphul
绝对一流!
C
Community

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

指定此应用要使用的目标沙箱。更高的 sanbox 版本将具有更高的安全级别。此属性的默认值为 1。

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


S
SushiHangover

要将这些不同的答案应用于 Xamarin.Android,您可以使用类和程序集级属性而不是手动编辑 AndroidManifest.xml

当然需要互联网许可(duh ..):

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]

注意:通常程序集级属性会添加到您的 AssemblyInfo.cs 文件中,但 using 下方和 namespace 上方的任何文件都可以使用。

然后在您的 Application 子类(如果需要,创建一个)上,您可以添加 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>

您还可以在 ApplicationAttribute 上使用 UsesCleartextTraffic 参数:

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, UsesCleartextTraffic = true)]
#else
[Application(AllowBackup = true, Debuggable = false, UsesCleartextTraffic = true))]
#endif

如果您不在域上并且在 192.168 的本地主机地址上,这将如何工作,应用程序将不会在互联网上而是在本地网络上运行
xamrian 形式的语法是什么
@rogue39nin 使用我答案的最后一部分:UsesCleartextTraffic = true
S
Steve Rogers

虽然对我来说有效的答案是@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 检索数据。通过这种方式,安全警告消失了。


G
Gvs Akhil

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 项目的 config.xml 中有以下内容: 运行 ionic科尔多瓦构建安卓。它在 Platforms Open Android Studio 下创建 Android 文件夹并打开我们项目 project-platforms-android 中的 Android 文件夹。让它等待几分钟,以便它构建 gradle 在 gradle 构建完成后,我们收到一些错误,因为在 manifest.xml 中包含 minSdVersion。现在我们要做的只是从 manifest.xml 中删除 。确保将其从以下两个位置删除:app → manifests → AndroidManifest.xml。 CordovaLib → 清单 → AndroidManifest.xml。现在尝试再次构建 gradle,现在它构建成功确保您在 App → manifest → Androidmanifest.xml 中的 Application 标签中有以下内容: 打开 network_security_config (app → res → xml → network_security_config.xml)。添加以下代码: xxx.yyyy .com

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

注意:现在使用 Android Studio (Build -- Build Bundle's/APK -- Build APK) 构建应用程序,现在您可以使用该应用程序,它在 Android Pie 中运行良好。如果您尝试使用 ionic Cordova build android 构建应用程序,它会覆盖所有这些设置,因此请确保您使用 Android Studio 构建项目。

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

未安装应用


离子?科尔多瓦?所以它不是一个普通的 Android 版本,而是 a framework to build native apps with front end tech
Ionic 为您提供了 android 应用程序中的 webivew 实现,Cordova 帮助您访问 android 原生功能,如麦克风、摄像头。
N
Nithinjith

在开发我的应用程序时,我也遇到了相同的“不允许明文 HTTP 流量”错误。我在我的应用程序中使用 Retrofit2 进行网络调用,并且我有两个项目环境(开发和生产)。我的生产域具有带有 HTTPS 调用的 SSL 证书,而 dev 将没有 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();

H
HandyPawan

创建文件 - 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">

A
Ashif
 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 Step:-> manifest add inside manifest application tag

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

//Step 4-->> Create Drawable>>Xml file>>name as>> 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>

可以在aosp中更改吗?
@Shadow 是的,您可以更改它。
我可以知道我在哪里可以改变它吗?
@Shadow www.yourwebsidedomain.com
不!!您再次在应用程序方面说。我在问如何更改 framework/<> 文件夹类?
J
Jarda Pavlíček

将以下内容放入您的 resources/android/xml/network_security_config.xml

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

这解决了 Android for Cordova / Ionic 上的 Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED 问题。


M
Manoj Alwis

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


M
Mayuresh Deshmukh

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

我与https://www.google.com/核对

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

它对我有用。


myWebView.loadUrl("www.site.com");也适用于没有 SSL 作为 HTTPS 但只有 HTTP 的网站管理员。可能会得到空白页,但是。
如果给定的 url 在您的网络浏览器中工作,那么您可以在您的网络视图中使用。否则你会看到这个错误。
我知道有时它会出错,但大多数时候我看到空白页面甚至运行。javascript 是“真”,我可以正确访问该网站。我不知道为什么我看到空白页,我也设置了可缩放为真。
c
chaosifier

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

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

https://i.stack.imgur.com/wEmUs.png


R
Rosenpin

这样做是出于安全原因,您应该始终尽可能使用 HTTPS(HTTP 安全)。
您可以阅读有关它的更多信息here

根据您的情况,此问题有多种解决方案。

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

服务器端:您应该为该服务器添加 HTTPS 支持并使用 HTTPS 而不是 HTTP。如今,您甚至可以免费使用 LetsEncryptothers
客户端: 如果您使用 java.net 软件包中的 HttpURLConnection,您可以切换到java.net.ssl 包中的 HttpsURLConnection,它具有相似的 API(如果不相同),因此切换应该毫不费力。

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

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

作为最后的手段,如果您要与之通信的第三方服务不支持 HTTPS 或任何其他形式的安全通信,您可以使用 this answer,但同样不建议这样做,因为它违背了这么多的目的需要的安全功能。


u
user7641341

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

是的,这对我有用,Android 10/11/12。
t
tripleee

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

ChangeLog

在 Rn 0.58.5 中,他们用他们的服务器域声明了 network_security_config。网络安全配置允许应用程序允许来自某个域的明文流量。因此,无需通过在清单文件的应用程序标记中声明 android:usesCleartextTraffic="true" 来付出额外的努力。升级RN版本后会自动解决。


R
Ripdaman Singh

更改 API 版本 9.0 后出现错误 Cleartext HTTP traffic to YOUR-API.DOMAIN.COM not allowed (targetSdkVersion="28")。在 xamarin、xamarin.android 和 android 工作室中。

在 xamarin、xamarin.android 和 android studio 中解决这个错误的两个步骤。

第一步:创建文件resources/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">

W
Waleed Arshad

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

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

L
Leena

如果您使用 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>

这对我有用!


G
Gk Mohammad Emon

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅