iOS

[Swift]忘れられがちなSFSafariViewControllerについて

投稿日:

はじめに

こんにちは、nukkyです。
今回はsuzukiさんの記事でWKWebViewが取り扱われたので、もう一つのWebViewで存在が忘れられがちなSFSafariViewControllerについてお話ししたいと思います。
suzukiさんの記事はこちらから
【Swift】WKWebViewでタップしたURLを取得する。

前提条件

Xcode 9.x
iOS 11 Simulator
Swift 4.0

 

SFSafariViewControllerとは

SFSafariViewControllerの特徴

iOS9.0以降使用可能でSafariの標準機能を備えたViewControllerを作成できます。
アプリのViewControllerでSafariを提供する形になるので、Safariアプリに飛ばした時よりアプリへの帰還率が高いです。
ただしカスタマイズ出来る部分が限られており、iOS11現在では、BarのTintColorやDoneボタンのスタイルなど一部しか変更がきかないです。

実装はとてもシンプルですがStoryboardから作成することは出来ません。
(これが忘れがちな理由かと。。。)
何と言っても一番の特徴はSafariブラウザとCookieやウェブサイトのデータの共有が可能です!

iOS11からのCookie同期について

SFSafariViewControllerの特徴としては、Cookie等Safariとの同期が出来ることによっていちいちログインする手間が省けることでした。
しかしiOS11から仕様が変わり、Cookie等のデータがSafariとは独立した領域に保存されるようになりました。
そこでSFAuthenticationSessionクラスという認証情報を共有するためのクラスが提供されました。これ使用することで、サードパーティーのSafari上での認証を共有することが可能になりました。

SFAuthenticationSessionについてはまた別の記事で詳しく紹介したいと思います。

SFSafariViewControllerとWKWebView

SFSafariViewControllerとWKWebViewの違い

SFSafariViewControllerとの違いとしてはローカルのHTMLファイルの読み込みが可能で、Xcode9以降Storyboard上からWKWebViewを利用可能、SFSafariViewControllerの基底クラスがUIViewControllerなのに対しWKWebViewは基底クラスがUIViewViewなので、Viewの一部をWKWebViewにするような扱いも可能。
それとカスタマイズの自由性はあるのですが、操作に必要なボタンがないので自前で閉じるボタンを追加したり、場合によっては戻るボタンを用意する必要があります。

どっちがいい?

見た目のカスタマイズ、フックやJavaScriptなどを使ってアプリのコンテンツとしてWebViewを使いたいならWKWebView。
Webページを表示するだけとかSafariアプリに投げるという使い方ならSFSafariViewControllerと結構住み分けはできていると思いますね。
どっちがいいかは結局アプリでどうWebViewを使いたいかで適した方を選択できると思います。

 

実装

まずは表示してみよう

SFSafariViewControllerを表示するだけであればとにかくシンプルです。

これで実行するとこのように表示されます。

SFSafariViewControllerDelegate

SFSafariViewControllerには以下のようなデリゲートが用意されています。

(1)は、最初に表示する画面の読み込み完了時に呼ばれます。

(2)は、アクションボタンタップ時に呼ばれます。
カスタムUIActivityを返却することもできます。
アクションボタンとは下の画像の右から二番目の四角から上矢印が出ているボタンです。

(3)は、左上の完了ボタンタップ時に呼ばれます。

ログを吐くだけですが実装は以下のになります。

 

さいごに

SFSafariViewControllerですが実装も簡単ですし特にWebViewにカスタム要素がないとか、Safariアプリに投げるとかするならこちらの方が使い勝手がいいと思います。

RE:ENGINESブログ「iOS記事」まとめページはこちらから

page_footer_responsive




-iOS
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Swift5.5での非同期処理async/awaitの追加

1 はじめに2 async/await2.1 実装2.2 シーケンス実行2.3 パラレル実行2.4 メインスレッド問題3 さいごに4 おすすめ書籍 はじめに Xcode13がリリースされ、Swift5 ...

【Swift】WKWebViewでタップしたURLを取得する。

1 はじめに2 WKWebViewについて3 WKWebViewの基本実装4 ナビゲーションにタイトルを追加5 ロングタップの禁止6 特定のリンクの場合はブラウザを起動して表示7 さいごに はじめに ...

swift

[Swift 3] テキストの装飾(フォント・文字サイズ・文字間隔・行間・文字色・下線)

1 はじめに2 フォント・文字サイズ変更3 文字間隔4 行間5 文字色6 下線7 さいごに8 おすすめ書籍 はじめに どうもはじめです。 今回は文字の装飾をやってみようと思います。 完成図を載せておき ...

祝!iOS15でハーフモーダルが追加

1 はじめに2 早速使ってみる2.1 準備2.2 実装2.3 detents2.4 コードでの高さ切り替え2.5 モーダル内のスクロール許可2.6 グラバーの表示2.7 角丸2.8 親Viewとの併用 ...

[Swift]プロトコルの拡張で既定値を設定する。

1 はじめに2 プロトコルの拡張について2.1 プロトコルに既定値を設定2.2 プロトコルを設定したクラスの作成2.3 制約をつけてプロトコルに既定値を設定3 さいごに4 おすすめ書籍 はじめに こん ...

フォロー

blog-page_side_responsive

2018年8月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。