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

{lang: 'ru'}

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

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

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

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

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


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

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


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


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