美文网首页
【iOS】ATS

【iOS】ATS

作者: Wavky | 来源:发表于2016-11-25 14:27 被阅读0次

    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設定の適用範囲

    • NSURLRequest
    • NSURLConnection
    • NSURLSession
    • UIWebView
    • WKWebView
    • CFNetwork

    ATSの対象外

    • Appleが提供している低レベルネットワークAPI(具体的な記述はない)
    • サードパーティのネットワークライブラリを利用
    • SFSafariViewController / Safari

    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

    • If you’re using UIWebView, you will need to use NSAllowsArbitraryLoads. In this case you should include an explanation as to why it’s necessary for you to continue using UIWebView rather than WKWebView.
    • If you’re using WKWebView, take advantage of NSAllowsArbitraryLoadsInWebContent.
    • If you’re using SFSafariViewController, you shouldn’t need any ATS exceptions; SFSafariViewController acts just like Safari with regards 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

    相关文章

      网友评论

          本文标题:【iOS】ATS

          本文链接:https://www.haomeiwen.com/subject/fazipttx.html