Facebook неодобрение в offline_access
разрешения приходит май 2012 и документация не дает нам достаточно информации о том, как справиться с этим.
У нас есть приложение iOS и соответствующая служба, которая его поддерживает и интегрируется с Facebook в глубокой форме, чтобы использовать список друзей пользователя внутри приложения (поэтому, если ваши друзья FB также используют приложение, вы можете легко подключиться). Это похоже на то, как работают все социальные приложения, поэтому здесь ничего особенного.
клиент
Наше приложение использует Facebook iOS SDK, чтобы позволить пользователю войти в систему, и в настоящее время мы запрашиваем offline_access
. Токен сохраняется в нашем приложении iOS, но также отправляется на наш сервер, где он сохраняется. Клиент действует от имени пользователя для публикации обновлений в publish_stream
новостей пользователя (мы также запрашиваем разрешение publish_stream
).
сервер
Наш сервер периодически проверяет, могут ли пользователи FB пользователей использовать наше приложение. В следующий раз, когда пользователь заходит, мы показываем контент и отношения определенным образом, чтобы продвигать друзей этого пользователя. Сервер также действует от имени пользователя для периодического подключения к API-интерфейсу графа и получения списка текущих друзей пользователя. Таким образом, мы можем учитывать изменения в пользовательских отношениях и отражать их в нашем приложении. Мы делаем это, когда пользователь в настоящее время не использует приложение, чтобы иметь лучший опыт при следующем использовании. Чтобы включить это, наше приложение iOS отправляет токен доступа на наш сервер, который он использует, и почему мы запрашиваем offline_access
.
Примечание. Если пользователь явно выйдет из нашего приложения, мы удалим токены доступа как с клиента, так и с сервера.
Проблемы
Теперь, когда больше нет постоянного токена доступа, который мы можем использовать, я пытаюсь найти наилучшую практику для того, чтобы все еще разрешать наши сценарии, а также использовать новый подход к facebook для новых приложений и расширения токенов доступа. К сожалению, документация не является полностью полезной.
Вопросов
A. Когда вы проверяете подлинность через новейший SDK iOS для Facebook, каково время жизни маркера доступа по умолчанию, которое вы получаете? В этом документе говорится, что расширенный запрос токена даст вам тот, который длится 60 дней. В этом другом документе говорится о первом запросе доступа к токену и упоминается о разных действиях, но он неясен и говорит о конкретных сроках действия:
(акцент мой)
Когда вы получаете токен доступа от Facebook, он будет действителен немедленно и может использоваться в запросах API за определенный период времени, определенный Facebook. По истечении этого периода токен доступа считается истекшим, и пользователю необходимо будет снова пройти проверку подлинности, чтобы ваше приложение могло получить новый токен доступа. Длительность, для которой действительный токен доступа действительна, зависит от того, как он был сгенерирован.
Также есть события, которые могут привести к тому, что токен доступа станет недействительным до ожидаемого срока его истечения. Такие события включают пользователя, изменяющего свой пароль, приложение, обновляющее его приложение Secret. Работа с разным временем истечения токена доступа и обработка случая, когда токен доступа становится недействительным до того, как его ожидаемое время истечения времени будет необходимо для создания надежного социального опыта.
B. Для клиента теперь, когда токен доступа не обязательно долговечен, является правильным подходом для нас:
Позвольте использовать логин через FB, а затем обнаруживать, когда токен доступа истек. Если это так, то обратитесь в FB iOS SDK для повторной аутентификации/повторной авторизации? (это должно просто заставить пользователя отскакивать в приложение FB iOS и в большинстве случаев сразу же возвращается к нашему приложению с новым токеном доступа).
C. В соответствии с этим сообщением в блоге, которое я нашел, вы можете только продлить токен доступа один раз:
Могу ли я обменять токен доступа на 60 дней на новый токен доступа на 60 дней?
Нет, извините, вы не можете. Вы можете обменивать только действующий (то есть текущий) токен доступа пользователя для расширенного. Вы не можете расширять уже расширенный токен доступа.
На клиенте я могу просто справиться с этим, предложив повторную аутентификацию/повторную авторизацию, как я упоминал в вопросе B. Однако это не работает на нашем сервере. Разумеется, сервер может обновить его раз в 60 дней, но что произойдет в 61-й день? Сервер просто перестает синхронизировать список друзей?
D. Кажется, имеет смысл проверять достоверность токена доступа FB каждый раз, когда приложение запускается или повторно увлажняется от сна. Каков наилучший способ для нашего приложения iOS проверить это? Есть ли рекомендованная конечная точка для вызова проверки токена? Должны ли мы просто позвонить в https://graph.facebook.com/me
передав токен доступа и проверим ответ?
Примечание: мы можем, конечно, записывать время expires
срока, когда мы получаем первоначально расширенный токен, но это ненадежно, так как пользователь может аннулировать наше разрешение на приложение в любое время, которое делает время expires
ненадежной точкой данных о действительности