Developer's Blog

iOS 11 で Safari View Controller の Cookie 等の共有機能が無くなる (予定)

こんにちは、アプリケーション共同開発部の中澤です。

iOS 9 から登場した Safari View Controller (SFSafariViewController) は、 Cookie 等のデータが Safari と共有される Web ビューとして認知されています。

この仕様によって各種 Web サービスのログイン状態等も共有され、それによってユーザーはそれぞれのアプリで認証が容易になっていました。

しかし、 iOS 11 ではその仕様が変わり、 Safari や各 iOS アプリで表示される Safari View Controller は、Cookie やローカルストレージ等データをそれぞれ別の場所に保存するようになると、 WWDC 2017 にて発表されました。

以下、その発表があった What’s New in Safari View Controller からの引用です。

On iOS 11, Safari View Controller will have a separate persistent data store in each app that it’s used in.
This means that cookies, local storage, and other browsing data will be contained within your app and scoped to your app. And this means that the user won’t automatically be logged in to whatever accounts they were logged into in Safari.
What this does is it will prevent cross-app tracking of user’s browsing activity that you and your users may not have even been aware about. And ultimately, it helps keep users’ browsing activity private and scoped within your app.

上記のように、この変更によってユーザーは自身の閲覧データがアプリをまたいでトラッキングされてしまうのを防ぎ、閲覧データの公開範囲を個々のアプリに限定する事が出来ると紹介されています。

とは言え、それによって Google や Facebook 、 Twitter 等、ほとんどの Web サービスのログイン状態等の共有もされなくなり、アプリごとにいちいちログインし直さないといけなくなります

実際に私も 7 月 7 日現在の最新バージョンで本当にそのような挙動となるか確認したところ、やはりそうなりました。

ユーザーのプライバシーを重んじることはもちろん大切であり、 Apple の選択の背景を理解すれば今回の仕様変更についても納得できるかもしれません。

ただ個人的には、ログイン情報の入力をアプリ毎にイチイチ要求されるので不便になるなぁと思ってしまったり…。
Safari View Controller には Safari と同様にアクションボタン ( ) があり、1Password 等パスワード管理アプリを使っている場合はそれを呼び出せるのでまだマシではありますが、それでも手間ですし、またその Web サービスでシングルサインオンを有効にしていると更に面倒ですし…。

予定?

今回の変更について、既に以下などで反響があるようです。

Impact of iOS 11 no longer providing shared cookies between Safari, Safari View Controller instances · Issue #120 · openid/AppAuth-iOS

この issue の中で、例えば Madison Solarana さんという方は WWDC 当日に Apple の Safari 開発者と話し、その際にこの件について 2 つの issue を Apple Bug Reporter に作ったと言われています。

このような動きがあり、どこに着地するのか直近でまだ変わる余地があるという意味で「予定」としました。
今後の動向に注目したいですね。

 

追記 (2017年11月10日) :
結局 iOS 11 の正式版でも本挙動のままとなり、「予定」ではなくなりました。その代わり SFAuthenticationSession というクラスが登場し、前述の問題がある程度緩和されました🎉。

詳細は、「【iOS 11】 Web認証用の新クラス「SFAuthenticationSession」」をご覧くださいませ!

 

Copyright © 2019 Fenrir Inc. All rights reserved.