Проблемы при авторизации в facebook через Сафари с помощью facebook-ios-sdk

Я довольно долго не мог понять, чем вызвана “не адекватная” реакция фейсбука на мои запросы к нему из приложения для iPhone. Я получал сплошные SessionInvalidated. Самое интересное заключалось в том, что старых версиях приложения все работало нормально. И, если старая версия уже смогла поднять сессию, то обновленная тоже начинала её спокойно “подхватывать”. Я начал искать проблему в отличиях кода двух версий. Но он был одинаковым! Совершенно! Но одна версия приложения работала нормально, другая – нет. Не смешно мне стало, когда и ранее рабочая версия… получила SessionInvalodated!

Поэтому я начал капать глубже и внимательнее. Выяснилось, что у моего делегата никогда не вызывается fbDidLogin. У меня появилось подозрение, что это и есть причина всех проблем. Скажу сразу, что это оказалось весьма недалеко от истины. Как выяснилось, didLogin не вызывался по причине того, что авторизация проходила в вызываемом браузере Сафари, а не внутри приложения. И для того, чтобы производить её не прибегая к внешним программам, нужно немного изменить официальное SDK.

Нужно найти в нем строку:

[self authorizeWithFBAppAuth:YES safariAuth:YES];

И заменить ее на:

[self authorizeWithFBAppAuth:NO safariAuth:NO];

В этом случае при авторизации будет появляться всплывающее окно с UIWebView, а после неё – вызываться fbDidLoad.

Одна проблема была решена.

Остальные я решил другим, возможно не очень красивым способом: производя принудительно каждый раз авторизацию путем вызова

NSArray *permissions = [[NSArray alloc] initWithObjects:
                          @"user_likes",
                          @"read_stream",
                          @"user_photos",
                           @"publish_stream",
                           nil];
    [facebook authorize:permissions];
    [permissions release];

Такой способ не вынуждает пользователя каждый раз вводить данные для авторизации и позволяет уменьшить вероятность получения SessionInvalidated, хотя и отнимает на несколько секунд больше времени.

Полезная статья? Их будет больше, если вы поддержите меня!

https://money.yandex.ru/embed/small.xml?account=410011399843532&quickpay=small&yamoney-payment-type=on&button-text=06&button-size=l&button-color=orange&targets=%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D1%8E+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82+lexpenz.com&default-sum=50&successURL=

Архив комментариев

1 комментарий из прежней версии блога. Архив закрыт для новых ответов.

  1. не могу войти в аккаунт в фейсбуке через wi-fi ? код ошибки 1