Facebook iOS SDK не хранит куки для доступа - PullRequest
1 голос
/ 06 августа 2011

Это действительно странная ошибка.При входе в систему объект facebook не сохраняет куки на сафари на устройстве, но хранит их на симуляторе.Откуда я знаю?

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
    NSString* domainName = [cookie domain];
    NSLog(domainName);
    NSRange domainRange = [domainName rangeOfString:@"facebook"];
    if(domainRange.length > 0)
    {
        [storage deleteCookie:cookie];
    }
} 

Во время работы на симуляторе я вижу два файла cookie.Я получаю ноль на устройстве.Это происходит даже с DemoApp от Facebook.Я понятия не имею, откуда это берется, поэтому я действительно не знаю, какую информацию я могу предоставить, чтобы сделать публикацию более полной.Пожалуйста, попросите меня что-нибудь, что я пропускаюКод только из DemoApp, я ничего не изменил / добавил / удалил.

Спасибо.

1 Ответ

12 голосов
/ 19 августа 2011

Возможно, вы столкнулись со странной вещью с библиотекой iOS.

Помните, что у каждого приложения iOS есть отдельное место для хранения - они хранятся таким образом, чтобы другое приложение не могло касаться вещей, которые ему не принадлежат. Эта песочница не позволяет вредоносным или плохо созданным приложениям причинять вред чему-либо, кроме себя.

Это верно для Safari на iPhone - файлы cookie, установленные для сеанса в Safari, НЕ доступны вашему приложению. Файлы cookie, установленные в UIWebView в вашем приложении, НЕ доступны Safari. Существует некоторая путаница по этому поводу, поскольку в настольной системе OSX вы можете делиться файлами cookie. Вы не можете сделать это на iOS, несмотря на соблазнительное имя метода класса, SharedHTTPCookieStorage.

Код аутентификации Facebook SDK может использовать до трех способов аутентификации на устройстве ... Он может вызывать приложение Facebook и запрашивать аутентификацию через него, позволяя пользователям этого приложения входить в систему только один раз. Если приложение FB не установлено, оно открывает окно в браузере мобильного сафари и пытается войти в него, устанавливая файлы cookie в песочнице браузера, если это возможно. Если он не может открыть ни того, ни другого, он открывает UIWebView в пространстве вашего приложения и сохраняет свои файлы cookie локально для вашего приложения.

Я бы предположил, что аутентификация происходит в разных местах вашего симулятора и на вашем iPhone, и поэтому cookie-файлы живут где-то еще.

Что действительно расстраивает, так это то, что если вы используете замечательную функцию единого входа, вы не сможете открыть UIWebviews для Facebook в своем приложении без принудительного повторного входа в систему. Кукисы вам недоступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...