Подтвердить что ты не робот

Может ли приложение iPhone xcode читать файлы cookie, ранее сохраненные Safari Mobile?

Может ли приложение iPhone читать файлы cookie, ранее сохраненные Safari Mobile?

4b9b3361

Ответ 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)