[iPhone] SFSafariView, WKWebView でWebブラウザを作る

iOSアプリからWebにアクセスしたいときは、SFSafariView, WKWebView, (UIWebView)などを使うと可能です。あるいはSafariに投げてしまうこともできます。
 

Swift 5.1
Xcode 11.3.1

 

WebView

 
Webページを表示する方法はいくつかあります。他のブラウザアプリ、Safariなどへ渡してしまったり、ある程度標準的なUIが付随しているSFSafariViewControllerを使うこともできます。またWKWebViewを使ってカスタマイズすることも可能です。
 
今まであったUIWebViewは推奨されていません。UIWebViewでは通信関連APIが操作される可能性があり、セキュリティ上好ましくないのと、クラッシュ率が高いという理由からWKWebViewあるいはSFSafariViewControllerを使う方がいいようです。
 

 

UIApplication を使って Safari へ渡す

 
Safari に代行してもらうという安易ですが安全かもしれない方法です。
アプリからちょっとWeb アクセスしたいだけなのに、「戻る」だの、「ダウンロード中」の表示だの考えなくていいので簡単です。
その辺を適当にやるとAppleの申請で Regect になる可能性があります。
 
UIApplicationクラスを使います

ViewController.swift


 
コードはこれだけです。
SafariでWebに移動する場合は自分のアプリから外れるのでパラメータの扱いは工夫が必要です。

 

SFSafariViewController を使う

 
iOS9(iOS8)からはSFSafariViewControllerを使うことができるようになりました。Safariに渡してしまうのではなく、あくまでアプリの一部のViewControllerとして扱えます。
 
また、ブラウザに必要なボタン等が標準で付いていてお手軽です。カスタマイズしたいのであれば、後出のWKWebViewを使います。
 
UIViewController.swift

 

WKWebView を使う

 
アプリの中にWebページを挿入するなどのカスタマイズをしたい場合に使います。

SafeArea:
何も考えずに今まで通りに画面いっぱいにしているとSafeAreaの問題がiPhone X系で起きます。この場合はステータスバーにWebの内容が被ってしまいます。
 

 
topPaddingを計算してSafeAreaの上部にUIWebViewが被らないようにします。下部はボタンを出すときは考慮する必要がありますが、そうでない場合はむしろ見せるというスタンスのようです(面倒ですが)とりあえずportraitの場合だけ考えてみます。(Landscapの場合は両サイドとホームインジケータに注意を払わないといけませんが)

UIViewController.swift


 
カスタマイズなので「戻る」や「リロード」ボタンなどもそれぞれ作る必要があります。

Safari
WKWebView
 

UIWebView クラス

 
昔からあるものですがサポート終了です。iOS12以上ではWKWebViewを推奨しています。
 
ViewController.swift


 

 

 

References:
UIApplication – UIKit | Apple Developer Documentation
WKWebView – WebKit | Apple Developer Documentation
SFSafariViewController – SafariServices | Apple Developer Documentation
UIWebView – UIKit | Apple Developer Documentation


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする