Как справиться с отказом Facebook от автономного доступа _при использовании токена как в приложении iOS, так и на сервере

Facebook устареет разрешения offline_accessв мае 2012 года, и документация не дает нам достаточно информации о том, как с этим справиться.

У нас есть приложение для iOS и соответствующий сервис, который поддерживает его и глубоко интегрируется с Facebook, чтобы использовать список друзей пользователя в нашем приложении (, поэтому, если ваши друзья из FB также используют приложение, вам будет проще подключиться ). Так работают все социальные приложения, так что здесь ничего особенного.

Клиент

Наше приложение использует Facebook iOS SDK , чтобы позволить пользователю войти в систему, которую мы в настоящее время запрашиваем offline_access. Токен сохраняется в нашем приложении для iOS, но также отправляется на наш сервер, где он сохраняется. Клиент действует от имени пользователя, публикуя обновления в новостной ленте пользователя (. Мы также запрашиваем publish_streamразрешение ).

Сервер

Наш сервер периодически проверяет, используют ли сейчас наше приложение друзья пользователя на FB. В следующий раз, когда пользователь войдет в систему, мы определенным образом предоставим контент и отношения, чтобы продвигать друзей этого пользователя. Сервер также действует от имени пользователя, чтобы периодически подключаться к API графа и получать текущий список друзей пользователя. Это сделано для того, чтобы мы могли учитывать изменения в отношениях пользователя и отражать их в нашем приложении. Мы делаем это, когда пользователь в настоящее время не использует приложение, чтобы в следующий раз он получил наилучшие впечатления. Чтобы включить это, наше приложение iOS отправляет токен доступа на наш сервер, который он использует, и почему мы запрашиваем offline_access.

Примечание:Если пользователь явно выходит из нашего приложения, мы удаляем токены доступа как с клиента, так и с сервера.

Проблемы

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

Вопросы

О. Когда вы проходите аутентификацию с помощью новейшего SDK Facebook для iOS, каково время жизни полученного токена доступа по умолчанию? В этом документе говорится, что расширенный запрос токена даст вам срок действия 60 дней. В этом другом документе говорится о первом запросе токена доступа и упоминаются разные сроки действия, но неясно и говорится ли о конкретных сроках действия:

(выделение мое)

When you obtain an access token from Facebook, it will be valid immediately and usable in requests to the API for some time period defined by Facebook. After that period has elapsed, the access token is considered to have expired and the user will need to be authenticated again in order for your app to obtain a fresh access token. The duration for which a given access token is valid depends on how it was generated.

There are also events which may cause an access token to become invalid before its expected expiry time. Such events include the user changing their password, an application refreshing it's App Secret. Dealing with varying access token expiry times, and handling the case when an access token becomes invalid before its expected expiry time is essential for building robust social experiences.

B. Для клиента теперь, когда токен доступа не обязательно долгоживущий, это правильный подход для:

Давайте использовать вход через FB, а затем обнаруживать, когда срок действия токена доступа истек. Если это так, то вызовите FB iOS SDK для повторной -аутентификации/повторной -авторизации? (Это должно просто вызвать у пользователя переход в приложение FB для iOS и, в большинстве случаев, немедленное возвращение в наше приложение с новым токеном доступа ).

C. Согласно этому сообщению в блоге , я обнаружил, что вы можете расширить токен доступа только один раз:

Can I exchange my 60 day access token for a new 60 day access token?

No, sorry you cannot. You can only exchange a valid (meaning current) user access token for an extended one. You cannot extend an already extended access token.

На клиенте я могу просто справиться с этим, запросив повторно -аутентификацию/ре -авторизацию, как я упоминал в вопросе B. Однако это не работает на нашем сервере. Мы, конечно, могли бы обновить сервер один раз до 60 дней, но что произойдет на 61-й день? Сервер просто перестает синхронизировать список друзей?

D. Кажется, имеет смысл проверять действительность маркера доступа FB каждый раз, когда приложение запускается или повторно -выходит из спящего режима. Как лучше всего проверить это в нашем приложении для iOS? Существует ли рекомендуемая конечная точка для проверки токена?Должны ли мы просто вызывать https://graph.facebook.com/me, передавая токен доступа и проверяя ответ?

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

11
задан TMC 15 April 2012 в 21:28
поделиться