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

Facebook & APOS; sнеодобрение изoffline_access разрешение поступает в мае 2012 года, и документация не дает нам достаточной информации о том, как с ним обращаться.

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

Client

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

Server

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

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

Problems

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

Questions

A. Когда вы проходите аутентификацию с помощью новейшего 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 время ненадежных данных указывают на действительность

Ответы на вопрос(2)

Ваш ответ на вопрос