【iOS】ATS

2016-11-25  本文已影响0人  Wavky

UIWebView, WKWebView, Safari, SFSafariViewController

UIWebView

since iOS 2, deprecated now.

WKWebView

Since iOS 8, for replacing the UIWebView, faster, lower memory costs, less bugs to make crash, and much more safty.

import WebKit

let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
view.addSubview(webView)

Safari

An outside browser to make it easy to view a web page without interaction with app.

@IBAction func showWebSite() {
    let url = NSURL(string: "https://www.google.com")
    UIApplication.sharedApplication().openURL(url!)
}

SFSafariViewController

Since iOS 9, an embedded Safari browser can be used to view a web page in Safari like UI, wihtout leaving our app, with sharing all user data from Safari, but with less content controlling from our app.

SFSafariViewControllerはアプリ内でWeb画面を表示したいときに使うことをAppleが奨励しています。これにより、今まで自作アプリからSafariを起動させていたのに対して、アプリ内でSafariを呼び出すことが可能となりました。
気をつけて欲しいのは、 カスタマイズはできない ということです。
例えば、UIWebViewやWKWebViewでやっていたような『Web側から document.location = …. を実行することでネイティブ側で何か処理をさせる』といったことはできません。
あくまでも 単なるWebサイトの表示 に利用します。

needs: SafariServices.framework

@IBAction func showWebSite() {
    let url = NSURL(string: "https://www.google.com")
    let safariVC = SFSafariViewController(URL: url!)
    self.showViewController(safariVC, sender: nil)
}

ATS

App Transport Security, since iOS 9.

ATS設定の適用範囲

ATSの対象外

ATS protections are not available when using lower-level networking APIs provided by Apple, or when using third-party networking libraries.

Note: Consider risks carefully before opting to use lower-level networking APIs provided by Apple, or opting to use third-party networking libraries. Such approaches lose App Transport Security protections, putting your app and your user’s data at risk.

If you’re using SFSafariViewController, you shouldn’t need any ATS exceptions; SFSafariViewController acts just like Safari with regards ATS.

Disable ATS

iOS 9

info.plist: NSAppTransportSecurity > NSAllowsArbitraryLoads:true

ATSを無効にする(Appleは非推奨)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

ドメインを指定してATSを無効にする(推奨ではないが、暫定対応としてはこちらを推奨していると思われる)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>xxx.co.jp</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

iOS 10

info.plist: NSAppTransportSecurity > NSAllowsArbitraryLoadsInWebContent:true

<key>NSAppTransportSecurity</key>
<dict>
    <key> NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

References

上一篇下一篇

猜你喜欢

热点阅读