iOS 11 の SFSafariViewController は Cookie が共有されない

iOS 11 で SFSafariViewController の仕様が変わり、 Cookie 等のデータが Safari とは独立した領域に保存されるようになりました。 これによってユーザの行動がアプリをまたいで追跡されるのを防ぎ、閲覧履歴の公開範囲を個々のアプリに限定することができるとしています。

新・ Web サービスの認証方法

SFSafariViewController の認証情報が Safari と共有されなくなるため、 SFSafariViewController で Web サービスにログインしているときに「 Safari で開く」をタップすると、 Safari に遷移したあと改めてログインする必要があります。

In iOS 9 and 10, it shares cookies and other website data with Safari. ( 中略 ) If you would like to share data between your app and Safari in iOS 11 and later, so it is easier for a user to log in only one time, use SFAuthenticationSession instead.

そこで、 OAuth / Single Sign-On の認証情報を共有するために新たに SFAuthenticationSession クラスが追加されました。 SFAuthenticationSession で認証リクエストを行うと、以下のように認証情報の利用を確認するダイアログが表示されます。

f:id:takasfz:20170922233903p:plain

「続ける」をタップすると Web サービスの認証ページが表示され、認証が成功するとアプリへリダイレクトします。

f:id:takasfz:20170922233921p:plain

認証済みの場合、「続ける」をタップすると認証ページを表示せず、すぐにアプリへリダイレクトします。 SFAuthenticationSession と Safari で認証情報が共有されるため、どちらかで認証済みであれば OK です。

プライベートブラウズモードは削除された..?

また、iOS 11 では SFSafariViewController からプライベートブラウズ機能が削除された模様です。 iOS 10 までは Safari をプライベートブラウズモードにしていると SFSafariViewController も Safari と同じ黒ベースの配色に変わっていたのですが、 iOS 11 では Safari をプライベートブラウズモードにしていても SFSafariViewController には Cookie が保存され、配色も変わりませんでした。

Safari とは独立した領域に Cookie を保存するようにしたことで、プライベートブラウズという概念は不要になったという判断でしょうか..?


出典: