Может ли приложение iPhone читать файлы cookie, ранее сохраненные Safari Mobile?
Может ли приложение iPhone xcode читать файлы cookie, ранее сохраненные Safari Mobile?
Ответ 1
Чтобы ответить на ваш вопрос:
Нет.
Файлы cookie для мобильных Safari недоступны из приложений SDK. И каждому SDK-приложению предоставляется собственный кеш-хранилище WebKit и хранилища файлов cookie, поэтому, пока файлы cookie будут сохраняться в одном приложении, они не доступны между приложениями.
Ответ 2
На самом деле существует интересный способ, если у вас есть доступ к URL-адресу сервера.
- В приложении запускается URL-адрес сервера с мобильным сафари.
- URL-адрес целевого сервера читает файл cookie и перенаправляет обратно на URL-адрес приложения (myapp://cookie = 123)
- Затем приложение переключается обратно, и вы можете прочитать это значение из обработчика URL.
Это немного взломанно, так как приложение переключит мобильное сафари и сразу же переключится обратно в приложение. Но это возможно.
Ответ 3
Как и в iOS 9, это возможно!
Используйте sfSafariViewController.
Вам нужно будет настроить:
- A настраиваемая схема URL в вашем приложении для получения данных cookie.
- Веб-сайт, на котором вы получаете файлы cookie, должен будет использовать API, специфичный для вашей схемы пользовательских URL-адресов, для перенаправления обратно в ваше приложение.
Вы можете клонировать этот repo, в котором есть полностью работающая демонстрация этого.
Надеюсь, что это поможет,
Лиам
Ответ 4
Обратите внимание, что на iOS 8 вы, вероятно, лучше используете Safari Password Sharing, чтобы решить некоторые из вариантов использования, которые приводят к этому проблема.
Это невозможно напрямую, но при сотрудничестве с веб-сайтом это возможно.
Чтобы пояснить, пользовательский случай состоит в том, что приложение Objective C хочет прочитать значение cookie, установленного веб-сайтом в мобильном сафари. (то есть, в частности, UIWebView не участвовал в настройке файла cookie)
Ваше приложение должно сделать это:
- Запустить мобильное сафари, используя [[UIApplication sharedApplication] openURL: url];
- URL должен быть специальным, например. http://yourwebsite.com/give-ios-app-the-cookie
- На вашем веб-сайте, когда этот URL-адрес запущен, выполните перенаправление к вашей схеме-app-url: cookievalue = (например, angrybirds: cookievalue = hh4523523sapdfa)
- когда ваш делегат приложения получает приложение (BOOL): (UIApplication *) приложение openURL: (NSURL *) url sourceПриложение: (NSString *) sourceApplication аннотация: (id) процесс аннотации URL-адрес для получения значения cookie
Обратите внимание, что вы не должны делать это автоматически при запуске приложения - пользователь увидит переход на Mobile Safari и обратно, что не очень удобно для пользователей, и Apple отклонит ваше приложение (Apple также считает, что это "загрузка" персональные данные пользователя на сервер без их предварительного согласия "). Было бы лучше сделать это в ответ на пользователя, обратив внимание на пользовательский опыт - например. подождите, пока пользователь нажмет кнопку" Войти", а затем сделайте это, и если пользователь не зашел на ваш сайт, http://yourwebsite.com/give-ios-app-the-cookie должен показать пользователю экран входа в сафари. Если пользователь вошел в систему, вы можете на короткое время показать экран "Автоматически регистрировать вас в..." на секунду или два в Safari, прежде чем перенаправить пользователя обратно.
Нет никакого способа заставить это работать с hotmail/gmail/etc, конечно - это должен быть ваш собственный веб-сайт.
Кредит переходит на уникальный идентификатор как для мобильного сафари, так и для приложения в iOS, предлагая такой подход.
Ответ 5
Из-за песочницы на iPhone у вас нет доступа к файлам cookie Safari. Вы можете использовать только файлы cookie, созданные в вашем приложении, например, с помощью UIWebView.
Ответ 6
Хотя вы задали тот же вопрос дважды до, здесь один из подходов еще не упомянут...
Это может быть немного запутанным, но вы можете делать вещи Greasemonkey-esque с UIWebView. Что-то вроде этого:
- Загрузите целевую страницу
- создайте javascript, который будет читать документ .cookie и вернет нужные вам данные.
- В делегате webViewDidFinishLoad вставьте этот javascript в UIWebView с помощью stringByEvaluatingJavaScriptFromString
Я использовал этот метод для улучшения сторонних страниц в приложении iPhone, но я не уверен, что он будет читать файлы cookie с того же места, что и Safari mobile.
Стоит ли сделать снимок?
Ответ 7
Здесь мои утилиты get/set cookie.
+(void)setCookie:(NSString *)key withValue:(NSString *)value {
NSArray *keys = [NSArray arrayWithObjects:
NSHTTPCookieDomain,
NSHTTPCookieExpires,
NSHTTPCookieName,
NSHTTPCookiePath,
NSHTTPCookieValue, nil];
NSArray *objects = [NSArray arrayWithObjects:
@"YOURDOMAIN",
[NSDate distantFuture],
key,
@"/",
value, nil];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];
NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[sharedHTTPCookieStorage setCookie:cookie];
}
+(NSString *)getCookie:(NSString *)key {
NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:@"YOURDOMAIN"]];
NSEnumerator *enumerator = [cookies objectEnumerator];
NSHTTPCookie *cookie;
while (cookie = [enumerator nextObject])
{
if ([[cookie name] isEqualToString:key])
{
return [cookie value];
}
}
return nil;
}
Ответ 8
Возможно, вы захотите проверить
if ([[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy] != NSHTTPCookieAcceptPolicyAlways) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
}
Но, по-видимому, NSHTTPCookieStorage даже не хранит файлы cookie из последнего запроса в текущем приложении на iOS (rdar://8190706)