[iOS] SFSafariViewControllerの制限事項について
はじめに
こんばんは。CX事業本部の平屋です。
最近、SFSafariViewController
の制限事項を調査することがありました。本記事では、その調査の結果を紹介します。
SFSafariViewControllerとは
SFSafariViewController
はiOS 9で追加されたクラスです。今に至るまで、いくつかの機能追加や仕様変更などが行われてきました。
検証環境
- macOS Catalina 10.15.6
- Xcode Version 12.0.1 (12A7300)
- 検証端末
- iPhone XS, iOS 14.0
- iPhone SE, iOS 13.3
目次
今回は以下の内容を調査しました。これらの調査の結果を紹介していきます。
- (1) SFSafariViewControllerとSafariとの間で認証情報は共有されるか?
- (2) アプリからSFSafariViewControllerに認証情報を共有できるか?
- (3) SFSafariViewController同士で認証情報は共有されるか?
- (4) SFSafariViewControllerに独自のUAを設定することができるか?
- (5) SFAuthenticationSessionはどんな場合に使えるか?
(1) SFSafariViewControllerとSafariとの間で認証情報は共有されるか?
Web版のGmailで試してみました。共有されませんでした。
確認した内容
Safari -> SFSafariViewController方向の共有
- Safari上でログインする
- Safariで
https://mail.google.com
を表示する - ログインする
- ログイン状態になる
- Safariで
- サンプルアプリ上のSFSafariViewControllerでログイン状態を確認する
SFSafariViewController
を表示する(URLはhttps://mail.google.com
を指定)- ページが表示される
- 未ログイン状態になっている
SFSafariViewController -> Safari方向の共有
- Safari上でログアウトする
- SafariでGmailからログアウトする
- サンプルアプリ上のSFSafariViewControllerでログインする
SFSafariViewController
を表示する(URLはhttps://mail.google.com
を指定)- ページが表示される
- 未ログイン状態になっている
- Gmailにログインする
- ログイン状態になる
- Safari上でログイン状態を確認する
- Safariで
https://mail.google.com
を表示する - 未ログイン状態になっている
- Safariで
(2) アプリからSFSafariViewControllerに認証情報を共有できるか?
SFSafariViewController
には認証情報を渡すためのインターフェースがないため、直接、アプリ(ネイティブ実装)から認証情報を共有することはできません。
(3) SFSafariViewController同士で認証情報は共有されるか?
こちらもWeb版のGmailで試してみました。共有されました。
確認した内容
- サンプルアプリ上のSFSafariViewControllerでログインする
SFSafariViewController
を表示する(URLはhttps://mail.google.com
を指定)- 未ログイン状態になっている
- ログインする
- 一旦、SFSafariViewControllerを閉じる
- サンプルアプリ上のSFSafariViewController(初回とは違うインスタンス)を再度開く
SFSafariViewController
を表示する(URLはhttps://mail.google.com
を指定)- ログイン状態になっている
(4) SFSafariViewControllerに独自のUAを設定することができるか?
できないようです。また、SFSafariViewController
とSafariのUAは同じになりました。
SafariViewControllerとSafariのUAの例
- iPhone XS, iOS 14.0
Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1
- iPhone SE, iOS 13.3
Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Mobile/15E148 Safari/604.1
(5) SFAuthenticationSessionはどんな場合に使用できるか?
SFAuthenticationSessionはiOS 11で追加された、アプリとSafariとの間で認証情報を共有するためのクラスです。例えば、以下のような場合に使用できそうです。
- Safari側が持ってるGoogleアカウントの認証情報を使って、アプリ側でGoogleのAPI(認証必須のもの)を使用する
SFAuthenticationSessionはiOS 12でDeprecatedになっており、後継のクラスはASWebAuthenticationSessionのようです。
使い方や画面サンプルなどは以下の記事などで確認できます。
さいごに
本記事では、SFSafariViewController
の制限事項の調査結果を紹介しました。SFSafariViewController
の採用を検討している方の参考になれば幸いです。