[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

一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


Play Ground
本業と並行してやるには月額制なのがありがたいです。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールで「エンジニアになって職を得たい」のであれば手っ取り早いかもしれません


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


シェアする

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

フォローする