Как имитировать токен с истекшим доступом в iOS Facebook SDK 3.1?

Я хотел бы протестировать путь кода, в котором токен доступа пользователя Facebook истек, и мне нужно обновить токен. Я заметил, что токен доступа истекает через 2 месяца после его создания. Я не хочу ждать 2 месяца, чтобы проверить этот код, поэтому мне хотелось бы, чтобы имитировать это истечение. Я боюсь, что мой код сработает, если я никогда не проверю эту ситуацию на следующие тайны:

  • В настоящий момент при запуске приложения я вызываю [FBSession openActiveSessionWithReadPermissions:permArray allowLoginUI:NO completionHandler:someFunction], чтобы повторно подключить пользователя Facebook, который уже подключен в прошлом. Обратите внимание, что allowLoginUI - НЕТ. Должно ли это быть ДА, чтобы позволить пользователю повторно войти в систему и обновить токен или возобновить молчание токена?
  • Обработчик завершения любого вызова openActiveSession * запускается каждый раз при изменении состояния сеанса. Два заметных состояния: FBSessionStateOpen и FBSessionStateOpenTokenExtended. Когда токен расширяется, остается ли конечный автомат в расширенном состоянии токена или он переходит в расширенное состояние, а затем сразу переходит в открытое состояние? Мне нужно знать переход состояния, поэтому я дважды не запускаю обработчики.
  • Значит ли [FBSession activeSession].accessToken nil или он остается прежним истекшим токеном?
  • Аналогично для [FBSession activeSession].expirationDate: это nil, старая дата истечения срока действия или автоматически становится новой датой истечения срока действия?

Ответ 1

Чтобы сделать токен истек, проще всего войти в FB на свой компьютер, перейти в App Center, нажать "Мои приложения" и удалить приложение, щелкнув маленький X рядом с вашим приложением. Это приведет к тому, что токен станет "истек". Как только это произойдет, вы не сможете автоматически обновить токен без взаимодействия с пользователем. Вы должны повторно открыть пользовательский интерфейс аутентификации, и пользователь должен нажать "Разрешить"

В отношении ваших вопросов:

  • allowLoginUI должно быть ДА. Если токен истекает, пользователь должен взаимодействовать с пользовательским интерфейсом, прежде чем вы сможете получить новый токен и установить его к НЕТ, он будет терпеть неудачу молча.

  • Я полагаю, что состояние TokenExtended произойдет только при расширении текущего активного токена. Если пользователь использует ваше приложение до истечения двухмесячного периода, FB SDK автоматически продлит токен для вашего времени. Это не то же самое, что обновлять истекший токен. Не 100% уверены в этом, хотя я не тестировал это состояние.

  • Если ваш токен истекает, при следующем запуске приложения вы должны вызвать openActiveSession в одном из ваших методов AppDelegate (didFinishLaunching), и это вызовет обработчик завершения с состоянием Closed или LoginFailed. На этом этапе вы должны называть [FBSession.activeSession closeAndClearTokenInformation]; чтобы удалить токен доступа в соответствии с их учебным пособием.
  • То же, что и # 3