Есть ли способ выйти из системы через Facebook API для Android, если у вас есть приложение Facebook?

#android #facebook #facebook-authentication

#Android #Facebook #facebook-аутентификация

Вопрос:

Я использую Android API Facebook, и все работает, как ожидалось, за одним исключением. Когда я оставляю приложение Facebook установленным на устройстве (это автономное приложение, которое не имеет ничего общего ни с API, ни с моим приложением), и я вызываю logout() для своего объекта Facebook, он правильно аннулирует объект Facebook, но при следующем запуске объекта он отключается.переходит и извлекает данные для входа из приложения Facebook, и логин сохраняется.

Если у меня на устройстве не установлено приложение Facebook, все работает отлично.

Мне любопытно, есть ли какой-то механизм, который я упускаю из виду, чтобы заставить приложение Facebook не удерживать логин, или мне приходится сообщать своему клиенту (это пользовательское приложение для клиента, никогда не выходящее на рынок), что при запуске этого им нужно будет обязательно удалитьприложение Facebook с устройств, на которых оно запущено?

Ответ №1:

Когда вы говорите Facebook Android API, вы имеете в виду Facebook Android SDK?

Если да, то при вызове authorize у вас есть возможность указать, является ли это авторизацией с помощью единого входа (SSO) или диалоговой авторизации OAuth 2.0. По умолчанию используется SSO. Если вы авторизуетесь с помощью единого входа, и приложение Facebook присутствует и вошло в систему, то авторизация завершается успешно, не приближаясь к серверу Facebook.

Если вы не используете единый вход, а используете авторизацию в диалоговом окне OAuth 2.0, пользователь сначала видит диалоговое окно входа в систему и диалоговое окно авторизации приложения, а после успешного входа / авторизации SDK сохраняет токен доступа для последующей авторизации.

К сожалению, выход из SDK не учитывает SSO. Он выполняет OAuth 2.0 expiresession и очищает токен доступа, но не сообщает приложению Facebook, что пользователь вышел из системы. Таким образом, это означает, что когда вы выполняете следующую авторизацию (при условии, что это единый вход), приложение Facebook все еще входит в систему, тогда авторизация завершается успешно, не приближаясь к серверу Facebook.

Одним из способов продвижения вперед было бы не использовать единый вход и требовать авторизации в диалоговом окне OAuth 2.0 (с использованием authorize(FORCE_DIALOG_AUTH) ). Это потребует от пользователя входа в систему, даже если приложение Facebook присутствует и вошло в систему, но это предотвратит сохранение входа в систему.

Комментарии:

1. Отлично! Да, мне не нужно, чтобы логин сохранялся когда-либо. Приложение специально предназначено для использования пользователем за пользователем в общедоступном пространстве, и фактически это было бы полной блокировкой показа, если бы пользователь B все еще входил в систему от пользователя A. Не могли бы вы пояснить, как я указываю, какой способ входа в систему (SSO против OAuth), чтобы требовать входа в систему каждый раз?

2. Неважно, я понимаю, что вы имеете в виду… Facebook. FORCE_DIALOG_AUTH — это третий параметр, а затем он делает то, что мне нужно … большое спасибо!

3. У меня такая же проблема, что люди, вошедшие в систему на Facebook, не могут использовать Facebook для входа в мое приложение. Я не могу найти эти Facebook. Метод FORCE_DIALOG_AUTH или authorize() на кнопке. Я предполагаю, что я должен использовать facbookSignInButton.setAuthType()? Но к чему? Я не могу найти FORECE_DIALOG_AUTH, поэтому я предполагаю, что facebook сохранил ту же проблему, но изменил решение за прошедшие 10 с лишним лет?

4. @Vanheden Я давно перестал заниматься этой темой, но если вы найдете решение (действительно, если есть решение), пожалуйста, опубликуйте его … очевидно, что люди все еще борются с этим.

5. Я опубликовал ответ, который позже удалил, потому что считаю, что в итоге это было неправильное решение, и я основал его на других старых ресурсах. Должно быть легко реализовать единый вход, если вы просто правильно настроите свой ключ-хэш, так что это, вероятно, лучше, чем отключить его в настоящее время. Но я думаю, что facebookLoginButton.setLoginBehavior(LoginBehavior. DIALOG_ONLY); был бы методом достижения старого FORCE_AUTH сегодня.