Как собственное приложение 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 здесь.