Цель — упростить процедуру входа/регистрации пользователя в нашем приложении для iOS. У нас есть собственный бэкэнд и собственный процесс входа и регистрации, и мы хотели добавить аутентификацию Facebook. История действительно такая же, как описано -мы">В ЭТОМ ПОСТЕ. Мы выпускаем собственные токены доступа, и нам нужно связать выпущенные Facebook токены доступа с пользователями нашей базы данных. Мы сделали именно так, как описано в этом посте.
- Мы использовали токен доступа Facebook, выпущенный на стороне клиента,
- передал на сервер,
- сервер подключался к API графа Facebook и получал от него необходимую информацию.
- в качестве сервера ответа отправьте объект JSON, содержащий информацию о профиле пользователя, которая отображается на стороне клиента.
Проблема, с которой я сталкиваюсь, заключается в том, что мы получаем токен доступа к Facebook. Первая версия, которую я сделал, использует FBSession
, как описано ЗДЕСЬ, чтобы войти в систему и получить токен доступа. Он просто отображает окно входа в Facebook, пользователь вводит свои учетные данные, запрашивает необходимые разрешения, и FBSession
становится активным, и я могу получить токен, как описано ЗДЕСЬ.
Начиная с iOS 6 пользователь имеет возможность войти в Facebook в одном месте, в настройках iOS и использовать этот сеанс во всех приложениях для публикации и получения информации из Facebook, единственное, что ему нужно сделать, это утвердить разрешения. которые запрашивает приложение, таким образом, нет необходимости входить в каждое приложение отдельно. С точки зрения UX это огромное улучшение, и я хотел использовать нативную сессию Facebook для iOS, предоставляемую Social Framework, чтобы получить токен доступа и передать его нашему бэкенду. Я думал, что это будет легко, и процедура описана ЗДЕСЬ, а вот цитата оттуда со строками для получения токена доступа
// Get the access token, could be used in other scenarios
ACAccountCredential *fbCredential = [self.fbAccount credential];
NSString *accessToken = [fbCredential oauthToken];
К сожалению, этот код не работает, [self.fbAccount credential];
возвращает nil
. А вот цитата из документации Apple про ACAccount
полномочия
Учетные данные, используемые для аутентификации пользователя этой учетной записи.
@property(nonatomic, retain) ACAccountCredential *credential
Обсуждение — это свойство является обязательным и должно быть задано перед сохранением учетной записи. По соображениям конфиденциальности это свойство недоступно после сохранения учетной записи.
Таким образом, политика конфиденциальности Apple не разрешает доступ к сохраненному токену доступа другим лицам.
Теперь это тупик. Для аутентификации на нашем сервере с помощью Facebook мне нужен токен доступа к Facebook, а для улучшения UX (который требуется клиенту) мне нужно использовать собственный сеанс Facebook, доступный в меню настроек. Есть ли решение этой проблемы?