在 iOS 中允许 HTTP 而不禁用 ATS
Allow HTTP without disabling ATS in iOS
我正在开发一个应用程序,其中有一些小调整。它将显示给定 url 的预览(就像 Facebook、whatsapp 那样)。但是如果 "User-given" url 在 HTTP 中,当 ATS 打开时我无法加载预览。所以我使用 NSAllowsArbitraryLoads 关闭了整个 HTTPS 流量。有没有什么方法可以在启用 ATS 的情况下允许 http?
您可以添加例外 (NSExceptionDomains
) 以允许特定域使用 HTTP。见 documentation.
但是,如果给定的用户 URL 可以是任何 URL,那么除了使用 NSAllowsArbitraryLoads
.
别无他法
打开 Info.plist
作为源代码,然后将其添加到您想要的位置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>aWebsite.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>anotherWebsiteIfYouWant.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
这样您就不必完全禁用 ATS。
According to Apple,如果您针对较旧的 SDK 进行构建,那么 iOS 8 或更早版本将禁用 ATS。我不知道这到底是什么意思,但我猜这是目标构建设置 Architectures,Base SDK -- 而不是部署目标设置。
This video 包含最近在 WWDC 2016 上宣布的 ATS 更改的详细信息。从 2017 年初开始,如果您使用以下任何 ATS 例外情况,Apple 将拒绝您的应用 AND 您无法提供这样做的合理理由:
- NSAllowsArbitraryLoads
- NSExceptionAllowsInsecureHTTPLoads
- NSExceptionMinimumTLSVersion
但是,看来您将被允许使用一个名为:
的新例外
- NSAllowsArbitraryLoadsInWebContent
这意味着一个 WKWebView 控件仍然可以加载 HTTP 内容。不确定这是否也适用于 UIWebView。
在你的情况下,我猜你没有使用 WKWebView,所以你最好开始处理你的 "reasonable justification"。或者坚持使用 iOS 8 SDK。
我正在开发一个应用程序,其中有一些小调整。它将显示给定 url 的预览(就像 Facebook、whatsapp 那样)。但是如果 "User-given" url 在 HTTP 中,当 ATS 打开时我无法加载预览。所以我使用 NSAllowsArbitraryLoads 关闭了整个 HTTPS 流量。有没有什么方法可以在启用 ATS 的情况下允许 http?
您可以添加例外 (NSExceptionDomains
) 以允许特定域使用 HTTP。见 documentation.
但是,如果给定的用户 URL 可以是任何 URL,那么除了使用 NSAllowsArbitraryLoads
.
打开 Info.plist
作为源代码,然后将其添加到您想要的位置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>aWebsite.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>anotherWebsiteIfYouWant.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
这样您就不必完全禁用 ATS。
According to Apple,如果您针对较旧的 SDK 进行构建,那么 iOS 8 或更早版本将禁用 ATS。我不知道这到底是什么意思,但我猜这是目标构建设置 Architectures,Base SDK -- 而不是部署目标设置。
This video 包含最近在 WWDC 2016 上宣布的 ATS 更改的详细信息。从 2017 年初开始,如果您使用以下任何 ATS 例外情况,Apple 将拒绝您的应用 AND 您无法提供这样做的合理理由:
- NSAllowsArbitraryLoads
- NSExceptionAllowsInsecureHTTPLoads
- NSExceptionMinimumTLSVersion
但是,看来您将被允许使用一个名为:
的新例外- NSAllowsArbitraryLoadsInWebContent
这意味着一个 WKWebView 控件仍然可以加载 HTTP 内容。不确定这是否也适用于 UIWebView。
在你的情况下,我猜你没有使用 WKWebView,所以你最好开始处理你的 "reasonable justification"。或者坚持使用 iOS 8 SDK。