Android 9 在上传 ucloud 时失败,需要做一个 网络适配,如下:
配置 ucloud 相关
AndroidManifest
<application
android:networkSecurityConfig="@xml/network_security_config">
</application>
创建 network_security_config.xml 文件
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">cn-bj.ufileos.com</domain>
</domain-config>
</network-security-config>
问题
原以为这样就解决了,还是太年轻了。
项目中集成的网易云信IM忽然只能发文字,不能发送图片,视频,音频
查看云信log,发现报错如下。
javax.net.ssl.SSLHandshakeException: Domain specific configurations require that hostname aware checkServerTrusted(X509Certificate[], String, String) is used
原因就是加了上述限制后,只允许注册过的 domain ,才可以明文请求
云信IM就是明文请求(http),所以被制裁了。
解决
一开始想注册所有的明文domain(即 http),但是云信IM那边地址很多且乱,一直报错,最后就采用了 Android 7.0 + 的默认网络配置:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
详情请看:Android Develop 网络安全性配置
Charles 抓包单独配置
配置 Charles 抓包工具(安装证书后),网络无法访问,无法正常抓包。
放开网络的 user 权限 ,就可以正常抓包了
<certificates src="user" />
如下:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
网友评论