Как собственное приложение iOS, такое как Vimeo, устанавливает файлы cookie для мобильных Safari?

Я нахожу, что собственное приложение Vimeo iOS может устанавливать файлы cookie для мобильных Safari. Как это работает?

Действия репо:

1, установите собственное приложение Vimeo iOS на устройстве iOS.

2, откройте это собственное приложение Vimeo iOS и войдите в свою учетную запись Vimeo.

3, откройте Mobile Safari, а затем откройте веб-страницу "https://vimeo.com/". Вы обнаружили, что вы не подписаны в Vimeo.

4, Откройте собственное приложение Video iOS, а затем нажмите значок "Справка (знак вопроса)" в левой панели навигации. Вы увидите, что справочный центр веб-страницы Vimeo открывается через UIWebView. А затем вы можете закрыть этот справочный центр.

5, откройте Mobile Safari, а затем откройте веб-страницу "https://vimeo.com/". Вы обнаружили, что вы вошли в Vimeo.

Спасибо.

Ответ 1

Как показано в этот вопрос, вы можете установить cookie с помощью класса NSHTTPCookieStorage.

EDIT:
Как отметил Кицунэ, в документах указано, что это не будет работать между приложениями в iOS, как в OSX.

У меня нет времени проверять это прямо сейчас, но, возможно, вы можете установить cookie с помощью javascript и метода stringByEvaluatingJavaScriptFromString UIWebView, и он будет общим? Вот функция, которую я нашел в Интернете, которую можно было бы назвать:

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

Ответ 2

Возможно, что родное приложение vimeo передает какой-то знак в токене через строку запроса на страницу справки, которая может сразу перенаправить вас на страницу без маркера signin в URL-адресе после установки cookie. Поскольку cookie устанавливается веб-сервером в UIWebView (Safari), он обнаруживается при использовании приложения Safari.

Это не потребует поддержки API в iOS...

Ответ 3

Это явно не применимо во время вопроса OP, но в последнее время куки были разделены между Safari и экземплярами SFSafariViewController в iOS 9 и 10. Vimeo мог установить cookie через невидимый SFSafariViewController to достичь этого результата. Тем не менее, это изменилось в iOS 11.. В будущем каждое приложение (включая сафари) будет иметь полностью изолированное хранилище данных. Официальное объявление здесь (на отметке 17:28).

В iOS 11 подобное поведение больше не будет возможным (на самом деле, предотвращая его появление в объявлении Apple об этом изменении).

Если вам нужен способ пройти гарантированное совпадение пользователей через Safari в ваше приложение, вам нужно будет использовать существующую сеть совпадений устройств, например Branch.io (полное раскрытие: я нахожусь в отделении). Вы можете прочитать о тех приемах, которые использует Branch, вместо перехода cookie здесь.