4

Я понимаю, что с iOS9 вы должны иметь возможность читать файлы cookie с помощью SFSafariViewController.SFSafariViewController cookie

Если установить куки на моей странице в JS с помощью следующих действий:

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=/ "; 

Если я:

- (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, работающий вне вашего приложения. Ваше приложение не будет иметь доступа к файлам cookie, используемым SFSafariViewController, так же, как ваше приложение не имеет доступа к файлам cookie в самом приложении Safari.

Если вам нужна эта функциональность, вам нужно застрять с UIWebView или WKWebView.

+0

Спасибо за возвращение ко мне, но в соответствии с: https://developer.apple.com/reference/safariservices/sfsafariviewcontroller Контроллер вида включает в себя функцию Safari, такие как Reader, автозаполнение, мошенническим обнаружение веб-сайте, а также блокирование контента. Он включает файлы cookie и другие данные веб-сайта с Safari. Активность пользователя и взаимодействие с SFSafariViewController не отображаются в вашем приложении, которое не может получить доступ к данным AutoFill, истории просмотра или данным веб-сайта. Вам не нужно защищать данные между вашим приложением и Safari. –

+1

Вы не понимаете, что значит сказать, что SFSafariViewController «передает файлы cookie и другие данные сайта с помощью Safari». SFSafariViewController - это пример Safari. Это не часть вашего приложения. Он обращается к песочнице Safari данных (файлы cookie, автозаполнение и т. Д.), Это не ваше приложение, которое делится этими данными с Safari. Ваше приложение не имеет доступа к любой из защищенных данных в Safari, включая файлы cookie. Если вам нужно иметь доступ к файлам cookie веб-сайтов в вашем приложении, SFSafariViewController не является правильным выбором. – wottle

+0

Вы подтвердили свой ответ в своем коде. NSHTTPCookieStorage будет пустым, если вы получите доступ к веб-сайту в SFSafariViewController. SFSafariViewController использует его, но не для того, что вы пытаетесь сделать. – wottle

Смежные вопросы