2016-03-24 2 views
9

Я создал невероятно базовое приложение, которое содержит SFSafariViewController, указывая на URL-адрес http://www.w3schools.com/js/js_cookies.asp. Это тестовый сайт для чтения и записи файлов cookie.Почему SFSafariWebViewController не использует файлы cookie с Safari?

Затем я загрузил один и тот же сайт в Mobile Safari и добавил один файл cookie. Я переключился на свое приложение, прочитал файл cookie, он есть. Я возвращаюсь в Safari, добавляю еще один куки-файл, возвращаюсь в свое приложение, но второй cookie не появился. Я обновляю страницы, без разницы. Вернитесь в Safari и прочитайте файлы cookie, они оба успешно прочитаны.

Есть ли что-нибудь, что мне нужно делать между приложениями, чтобы файлы cookie были написаны и прочитаны правильно?

+1

которые являются свойствами печенья? заглянуть внутрь NSHTTPCookieStorage – atrebbi

+0

От этого зависит SFSafariViewController? Это стоит расследование, поэтому спасибо. – jowie

+2

Эй, ты когда-нибудь это понял? Я пытаюсь использовать метод авторизации Safari в своем приложении, и у меня такая же проблема. Запросы браузера показывают, что файлы cookie просто прекрасны, но запросы SFSafariVC в приложении нет. – Dima

ответ

2

В документе Apple, сказал:

Класс SFSafariViewController обеспечивает стандартный интерфейс для просмотра веб-страниц. Контроллер представления включает в себя функции Safari, такие как Reader, AutoFill, Обнаружение мошеннических веб-сайтов и блокирование контента. Он включает файлы cookie и другие данные веб-сайта с Safari. Активность пользователя и взаимодействие с SFSafariViewController не отображаются в вашем приложении, которое не может получить доступ к данным AutoFill, истории просмотра или данным веб-сайта. Вам не нужно защищать данные между вашим приложением и Safari.

По умолчанию это файлы cookie cookie и другие данные веб-сайта с Safari. Вам не нужно ничего делать.

+0

Хорошо, да, я читал это раньше. Спасибо, что поделился. Куки-файлы распространяются примерно в 50% случаев и обычно обновляются только в том случае, если вы принудительно завершаете и перезагружаете приложение. – jowie

+0

Мне нужно прочитать файлы cookie из приложения Safari внутри моего приложения. Является ли это возможным? –

4

Вы можете принудительно закрыть SFSarfariViewController, когда приложение закрывается. Это обеспечит обновление веб-страницы вместе с любыми новыми файлами cookie.

В ViewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shouldDismiss:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

затем:

- (void)shouldDismiss:(NSNotification*)notification { 

    [self.safariViewContollerName dismissViewControllerAnimated:YES completion:nil] 
} 

Надеется, что это помогает,

Лиам

+0

Удивительная находка, что, если ваш вариант использования - это наоборот, ваше приложение не может получить последний файл cookie из Safari? – Mills

+0

Это хороший «взлом», но, к сожалению, это не помогает нашему конкретному варианту использования. Мы отправляемся из Safari, сохраняем там файл cookie, а затем, когда приложение запускается, мы используем SFSafariViewController, чтобы попытаться прочитать этот файл cookie. К сожалению, когда мы пытаемся его прочитать, иногда он не читается как заданный. – jowie

4

Пользователь на Apple Dev Forums предположил, что она может работать только для «сохранялись cookies ", а не" cookie сеанса ". Я не устанавливал дату истечения срока действия своих файлов cookie. Я изменил, что, получая время в будущем:

const expireTime = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString(); 

А затем установить его в заголовке:

"Set-Cookie":`query=${uri.query}; path=/; expires=${expireTime}` 

А теперь значение куки появляется в SFSafariViewController.

+0

Работал для меня! Спасибо, что поделился! – Kukiwon