【发布时间】:2020-05-22 05:50:06
【问题描述】:
在我最新的 Ionic 应用程序发布后,Android 版本无法连接到我在 https 上的 API(但应用程序的 iOS 版本很好)。我试图将 API 调用更改为 http,但存储拒绝它作为不安全的用户数据传输。将 targetSdk 更改为 27 有所帮助,但同样,在商店上传后,它立即被拒绝并显示消息,即 APK 文件必须至少具有 targetSdk v28。
此连接问题仅发生在带有 --release 标志的构建上,并且仅在 Android 9.0 及更高版本上发生。通过调试,我没有收到任何错误消息,但 Android 只是无法连接到我的 API。我不想购买新证书,因为我现在拥有 2 年的 RapidSSL 证书,它适用于 iOS 和低于 v9.0 的 Android。
我的问题是,我想将我在 API 上使用的 pem 证书添加到 netwrok_security_config.xml 中,因为我在这里被告知 https://developer.android.com/training/articles/security-config。
所以该文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">0.0.0.0</domain>
<domain includeSubdomains="true">(my domain IP address)</domain>
<domain includeSubdomains="true">(my domain)</domain>
</domain-config>
<base-config>
<trust-anchors>
<certificates src="@raw/my_ca/cert.pem"/>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
我已经尝试过服务器上的 .pem 甚至服务器上的 .crt,结果仍然相同。
在 config.xml 我也将此文件添加为资源文件,因此它位于 res 文件夹下的生成平台文件夹中:
<resource-file src="resources/android/raw/my_ca/cert.pem" target="app/src/main/res/raw/my_ca/cert.pem" />
还有这一行,它适用于 Android >9.0 能够建立 HTTP 连接,但以防万一:
<application android:usesCleartextTraffic="true" />
有了这个看似不错的设置,我得到了构建错误:
network_security_config.xml:14:AAPT:错误:找不到资源 raw/my_ca/cert.pem(又名 com.myionicproject.app:raw/my_ca/cert.pem)。
当我尝试像他们在 Android 文档上所说的那样将文件夹的路径放入证书 src 时,我收到错误:“资源文件不能是目录”。
当我尝试将其与相对路径链接时,构建会引发警告,即在 netwrok_security_config.xml 文件中,证书标记 src 属性只能具有值 system、user 或 @resource。然而它构建得很好,但是在打开应用程序并创建 API 请求后,应用程序每次都会崩溃。
顺便说一句。我还使用 Charles 代理进行调试,在将他们的 .pem 证书安装到手机中并运行该应用程序后,该应用程序运行良好,因为我猜代理信任服务器上的 ssl。
该应用程序已在商店发布一年多,直到我最近切换到 ionic 4 之前它都可以正常运行。
我找不到有人已经在处理这个问题,拥有 Ionic 并将他们的证书放入网络配置 xml。这里有人有这方面的经验吗?
谢谢
【问题讨论】: