在我的手机上,网络安全策略不允许使用明文通信。

64
我正在开发一款应用程序,在我的朋友手机上测试时遇到了“此网络安全策略不允许明文通信”错误。当然,我无法跟踪问题,因为该应用程序在我的手机上(没有USB调试)下载自Google Play后正常工作。
我已经完成所有必要的工作来解决这个问题,通过在AndroidManifest.xml中的应用程序标签中添加android:usesCleartextTraffic="true",以及添加android:networkSecurityConfig="@xml/network_security_config" 我的配置XML:
<?xml version="1.0" encoding="utf-8"?>
  <network-security-config>
      <domain-config cleartextTrafficPermitted="true">
      <domain includeSubdomains="true">MY IP</domain>
  </domain-config>
</network-security-config>

它仍然无法正常工作。 我无法在我的移动设备上跟踪问题,因为它可以正常工作。为什么我没有像我的朋友手机一样收到相同的错误?

我希望它可以在我的手机上给我相同的错误,以便能够跟踪问题。我删除了所有上面的选项,它仍然可以在我的手机上正常工作。甚至在我添加任何内容之前它就可以正常工作,只有在我将其安装在朋友手机上后才发现了问题。


1
如果您解决了问题,请将答案标记为已接受。 - Mohd Asif Ahmed
4个回答

117
如果您在URL中使用HTTP而不是HTTPS,请在AndroidManifest.xml文件的标签中添加此行。
android:usesCleartextTraffic="true"

这应该可以解决你的问题。


2
好的,但谷歌引入这样一个功能的意义是什么,除了让开发人员的生活变得更加复杂? - Dr Deo
1
有没有编程的方式来实现这个? - Top-Master
能否解释一下这背后的逻辑?实际问题是什么? - dennisrufigill
它解决了我的问题,谢谢。 - nijian81
对我来说,它没有起作用。 - FtheBuilder
显示剩余2条评论

33

我在react-native项目中遇到了同样的问题。我通过这篇文章解决了这个问题,加上我的托管提供商的域名

  • 创建res/xml/network_security_config.xml文件,并添加以下内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">my-domain-name.com</domain>
    </domain-config>
</network-security-config>
  • 在清单文件中指向此文件(如果只为test清单添加,则可获得额外奖励):
<application
  android:networkSecurityConfig="@xml/network_security_config"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
     <activity android:name=" (...)
</application>

3

请为我工作!如果您的api url中使用Http而不是Https,则只需在AndroidManifest.xml中的标签中添加 => android:usesCleartextTraffic="true"。

 <application
    android:allowBackup="true"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:requestLegacyExternalStorage="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    tools:targetApi="31"
    android:usesCleartextTraffic="true">

这不是绕过 Android 安全策略吗? - IgorGanapolsky

0

android:usesCleartextTraffic="true"

只需将此行放入您的AndroidManifest.xml文件中的<application标签中即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接