Как выход из системы работает в Facebook SDK Android

Я немного смущен тем, как работает facebook.logout(контекст).

Потому что даже после вызова выхода из системы я могу получить доступ к информации, для которой требуется auth_token. Так как это возможно? Я наткнулся на эту тему, которая позволила мне немного смутить: qaru.site/info/526684/...

После прочтения этого ответа, это мой вопрос: Итак, если пользователь предоставляет доступ к [моему] приложению, он всегда будет аутентифицирован, если он войдет в [официальное] приложение facebook? Даже если я попытаюсь вызвать facebook.logout(контекст) в [моем] приложении, он войдет в систему, и мое приложение сможет звонить в Facebook API? '

Извините, я не могу понять это поведение.

ОБНОВЛЕНИЕ:. Прочитав ответ Torid, я смущен функцией facebook.logout(). Какова цель этой функции, если она не регистрирует пользователя? Потому что я больше не вижу цели назвать эту цель. Он не регистрирует пользователя.

Ответ 1

Здесь есть две самостоятельные вещи: 1) выполнил ли ваш пользователь аутентификацию вашего приложения (с разрешениями) на Facebook и 2) зарегистрировался ли ваш пользователь в Facebook.

Аутентификация требуется при первом использовании пользователем вашего приложения и продолжается до тех пор, пока пользователь не будет явно деактивирован (например, через настройки веб-аккаунта Facebook → Приложения → Настройки приложения).

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

Если вы используете SSO, когда вы выполняете выход из системы, это не имеет никакого эффекта, так как реальный выход из системы должен будет отключить приложение Facebook, которое может не понравиться пользователю.

Вы можете обойти это поведение, выполнив авторизацию формы

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener());

который позволяет избежать SSO и заставляет логин войти в систему. Конечно, это заставляет вашего пользователя входить в систему при каждом запуске вашего приложения - если вы не сохраните регистрационную информацию/токен доступа под (что и делает SDK - проверьте источник).