我的代码正在android kitkat上运行,但它给io异常
Cleartext http traffic to server.com not permitted
在馅饼中。 我正在使用凌空拨打服务器。
答案 0 :(得分:6)
第一步是了解为什么 Google强制您使用HTTPS。您可以在开发人员页面上阅读更多有关此内容的信息。
关于解决方法,有两种选择:
1)使用HTTPS!
2)在您的XML文件夹中创建一个名为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>
然后在清单文件中添加此
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/security_config">
</application>
</manifest>
出于明显的原因,不建议第二点!
答案 1 :(得分:5)
简单解决方案:
在清单中添加以下行:
android:usesCleartextTraffic="true"
因为我的json API的php页面遇到了同样的问题。
它应该像这样:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
希望它能奏效。
答案 2 :(得分:0)
如果没有使用HTTPS的选项,则可以使用网络安全配置xml文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.1.100</domain>
<domain includeSubdomains="true">http://example1.com</domain>
<domain includeSubdomains="true">example1.com</domain>
</domain-config>
</network-security-config>
然后您需要使用此行将其添加到Android Manifest中的<application
部分
android:networkSecurityConfig="@xml/testing_security"
在其他答案中提出了一些替代方案-我说允许所有明文通信都是不明智的,因为第三方库可能会危害您。最好明确定义主机目标,以最大程度地减少这种不安全通信的影响
答案 3 :(得分:0)
在您的AndroidManifest.xml的application元素中添加android:usesCleartextTraffic属性即可!
要在 Xamarin表单中执行此操作,可以通过在Android解决方案的 AssemblyInfo.cs 中添加以下内容来实现。
// Because I only want this in development
#if DEBUG
[assembly: Application(UsesCleartextTraffic = true)]
#endif
答案 4 :(得分:0)
已解决
编辑您的►‘network security_config.xml
添加行►Domain.com或您的IP(12.34.456.78)
更改后,它将看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Domain.com OR your IP(12.34.456.78)</domain>
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>