如何修复 xamarin android 中的“不允许到 x 的明文 HTTP 流量”

Sof*_*Dev 13 https http xamarin.android xamarin.forms cleartext

我的应用程序存在问题,不允许到 x 的明文 HTTP 流量。

我已经尝试将 android:usesCleartextTraffic="true" 放入我的清单中。但我想将“android:usesCleartextTraffic”标志更改为“false”以防止发送未加密的流量。

怎么解决这个问题呢?

tho*_*iel 41

如果在某个时候您想移动到MAUI(没有AssemblyInfo.cs),您可能需要将UsesCleartextTraffic) 添加到您的应用程序属性中Platforms/Android/MainApplication.cs

#if DEBUG                                   // connect to local service on the
[Application(UsesCleartextTraffic = true)]  // emulator's host for debugging,
#else                                       // access via http://10.0.2.2
[Application]                               
#endif
public class MainApplication : MauiApplication
{
    ...
}
Run Code Online (Sandbox Code Playgroud)


小智 18

您可以用一行代码解决这个问题。在 android 项目的属性下打开 AssemblyInfo.cs 并添加以下代码:

[assembly: Application(UsesCleartextTraffic = true)]
Run Code Online (Sandbox Code Playgroud)

  • 我还可能建议将其包装在“#if DEBUG”和“#endif”中,以防您只想在调试版本中允许此行为。 (4认同)

小智 18

在 Maui 中,展开 Platforms/Android 并编辑 MainApplication.cs。

将顶部附近的“[Application]”替换为“[Application(UsesCleartextTraffic = true)]”

  • 基本上是我的答案的重复,但对于严肃应用程序的发行版本,您肯定希望将网络连接限制为仅使用 TLS。如果您将仍允许 http 连接的应用程序上传到 GooglePlay,则可能会降低审核评级。因此我推荐``#if DEBUG``。 (3认同)

ada*_*amm 1

假设您正在访问不支持 HTTPS 的服务器,那么您可以在网络安全配置中创建例外。net_sec_conf.xml您可以创建一个这样的文件:

<?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">api.example.org</domain>
    <trust-anchors>
      <certificates src="system" />
    </trust-anchors>
  </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

然后在清单文件中添加以下行:

android:networkSecurityConfig="@xml/net_sec_conf"
Run Code Online (Sandbox Code Playgroud)

(假设您已将文件放入 xml 文件夹中)。这样,明文 HTTP 流量将仅允许用于指定的域。

当然,如果服务器支持HTTPS,那么你只需要将你的URL“http://...”更改为“https://...”。