WebViewとSafariのCookie共有問題
解決方法として、ios9ならSFSafariViewController で実現できるらしい。
実際に組み込んで動作検証してみました。
##準備
1.Xcode7をインストール
2.プロジェクトを作成し、Deployment Targetを9に設定
##webview組み込み
3.storyboardでViewControllerにButtonを配置
4.ViewController.swiftに、SFSafariViewControllerが開くように実装
import UIKit
import SafariServices // ★追加
// ★SFSafariViewControllerDelegate追加
class ViewController: UIViewController, SFSafariViewControllerDelegate {
// ★Button押した場合のメソッド
@IBAction func openBtn(sender: AnyObject) {
// ★開くURL
let _url:NSURL = NSURL(string: "https://www.google.co.jp/")!
// ★待ちに待った作成
let _brow = SFSafariViewController(URL: _url, entersReaderIfAvailable: true)
_brow.delegate = self
// ★ほぼSafariを開く
presentViewController(_brow, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// ★SFSafariViewControllerを閉じた際の処理
func safariViewControllerDidFinish(controller: SFSafariViewController) {
print("close")
}
}
5.ボタンのタップイベントとのひもづけ
storyboard開いて、ButtonのTouch Downの+をViewControllerへピーッと
定義したメソッドがでてくるので、選択
6.Githubに置きました
SFSafariViewControllerお試し
##実行結果
今回はGoogleのページを開き、ログイン状態を比較することで、共有状態を検証
- Safari未ログイン状態。アプリ起動し、ほぼSafariのWebViewを起動。
---> Google未ログイン状態で表示 - Safariログイン状態。アプリ起動し、WebView表示。
---> Googleログイン状態で表示 - Safari未ログイン状態。WebViewで、ログイン。Safari開く。
---> Googleログイン状態で表示 - Safariログイン状態。WebViewで、ログアウト。Safari開く。
---> Google未ログイン状態で表示
Safari未ログイン状態。WebViewで、未ログイン。Safariでログイン。WebView見る
---> Googleページのどこかのリンクを押せば、Googleログイン状態に切り替わる
ちょっと、最後は意地悪な検証をしましたが、共有できていることがわかりました。
他の完全にCookie使っているサイトで試したいですね。
いまどき、Web Storageに保持してますかね。
##P.S.
ios初心者なので、Qiitaに投稿しながら、腕を上げます。
見やすいマークダウンとか。。。
以上