4

私は、iOS9の時点で、SFSafariViewControllerでクッキーを読むことができるはずです。私が行う場合SFSafariViewControllerクッキー

var dd = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString(); 
var expires = "expires="+ dd; 
document.cookie = "mycookie=cookievalue; " + expires + " domain=.mydomain.co.uk ; path=/ "; 

を:私は、以下のものを使用してJSの私のページでクッキーを設定した場合

- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully 
{ 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookiesArray = [storage cookies]; 
} 

cookiesArrayは常に空です。

私は伝統のUIWebView

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookiesArray = [storage cookies]; 
} 

を使用している場合は、私は私が期待していたクッキーを取得します。

私が間違っていると思われるアイデアはありますか?

答えて

5

SFSafariViewControllerは基本的にあなたのアプリの外で実行されているSafariのプロセスです。 SFSafariViewControllerで使用されているクッキーにアクセスすることはありません。アプリがSafariアプリケーション自体のクッキーにアクセスできないのと同じです。

この機能が必要な場合は、UIWebViewまたはWKWebViewのままにする必要があります。

+0

私に戻ってきたがに応じてくれてありがとう:https://developer.apple.com/reference/safariservices/sfsafariviewcontroller ビューコントローラは、そのようなリーダー、オートフィル、不正Webサイトの検出、およびコンテンツのブロックとしてSafariの機能を備えています。これは、Cookieや他のウェブサイトのデータをSafariと共有します。ユーザーのアクティビティとSFSafariViewControllerとの対話は、オートフィルデータ、閲覧履歴、またはウェブサイトデータにアクセスできないアプリには表示されません。あなたのアプリとSafariの間でデータを保護する必要はありません。 –

+1

あなたは、SFSafariViewControllerが「Safariでクッキーや他のウェブサイトのデータを共有している」とは何を誤解していますか? SFSafariViewControllerはSafariのインスタンスです。あなたのアプリの一部ではありません。 Safariのデータ(クッキー、オートフィルなど)のサンドボックスにアクセスしていますが、Safariでそのデータを共有するアプリではありません。あなたのアプリは、Cookieを含むSafariの安全なデータにアクセスすることはできません。あなたのアプリでウェブサイトのクッキーにアクセスする必要がある場合、SFSafariViewControllerは正しい選択ではありません。 – wottle

+0

あなたはあなたのコードで私の答えを証明しました。 SFSafariViewControllerでWebサイトにアクセスすると、NSHTTPCookieStorageは空になります。 SFSafariViewControllerはそれを使用していますが、あなたがしようとしているものではありません。 – wottle

関連する問題