Facebook SDK 4 для Android - як програмно вийти


112

Нещодавно Facebook випустив SDK 4 з новими і крутими оновленнями. Я намагався перейти на SDK4, щоб використовувати нові функції, однак, я борюся з функцією входу у Facebook.

Поки для того, щоб вийти з програми на Facebook, я використав:

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();

Але SDK4, здається, більше не підтримує сесію, і в офіційних документах вони згадують:

Є два способи реалізувати вхід у Facebook на Android:

Клас LoginButton - який забезпечує кнопку, яку ви можете додати до інтерфейсу користувача. Він дотримується поточного маркера доступу і може входити в систему та виходити з нього.

Ну, схоже, немає способу вийти з програми Facebook, крім використання LoginButton. У когось є ідея, будь ласка, поділіться нею тут.

Відповіді:


276

Ви можете використовувати LoginManager.getInstance().logOut();, навіть якщо ви використовуєте LoginButton тому, що

Цей елемент інтерфейсу завершує функціональність, доступний у LoginManager.

РЕДАКТИРУЙТЕ: Зазначимо, що це працює для Facebook SDK v4 . Я не знаю, чи змінять це в майбутньому.

@as batoutofhell згадуйте, не забудьте поставити FacebookSdk.sdkInitialize(getApplicationContext());ініціалізацію facebook sdk. Будь ласка, дивіться тут для деталей.


2
Я хочу зазначити, оскільки це найкращий результат google, моє додаток вийшло з ладу під час спроби вийти, поки я перший додав цей рядок: FacebookSdk.sdkInitialize (this.getApplicationContext ()); LoginManager.getInstance (). LogOut ();
batoutofhell

7
Після виходу з системи воно не дозволить мені знову ввійти. Чи є спосіб знову увійти після того, як я зробив LoginManager.getInstance (). LogOut ();
AndroidDev

1
Чому ми повинні закликати FacebookSdk.sdkInitialize, як це вже було ініціалізовано в onCreate?
CoolMind

1
LoginManager.logOut () я використав це, він працює належним чином
Erum

1
@Erum Немає такого способу, LoginManager.logOut()як зараз у FB SDK v4.23.0
Gem

61

SDK4, якщо ви хочете повністю зняти пару, переконайтесь, що ви також видалили додаток із облікового запису facebook користувача. Цей спосіб повністю відключає користувача:

public void disconnectFromFacebook() {

    if (AccessToken.getCurrentAccessToken() == null) {
        return; // already logged out
    }

    new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
            .Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {

            LoginManager.getInstance().logOut();

        }
    }).executeAsync();
}

Це саме те, що я хотів!
Sash_KP

Це означає, що я повинен видалити додаток Facebook та повідомлення Facebook, щоб завершити реєстрацію для свого додатка?
фонгван

1
Ця відповідь гарантує, що користувач повністю вийшов із системи. Для того, щоб бути на 100%, потрібно включити FacebookSdk.sdkInitialize (getApplicationContext ());
Сандро Віггерс

До зворотного дзвінка я також додав @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); LoginManager.getInstance (). LogOut (); }
Сандро Віггерс

1
@voghDev onCompleted не повертається до потоку інтерфейсу, я вважаю, тому він не блокує його, коли ви дзвоните logOut туди.
Френк

9

Можна використовувати LoginManager.logOut()

Перевірте https://developers.facebook.com/docs/reference/android/current/class/LoginManager/


2
Це працює, якщо ви використовуєте LoginManager. Чи існує спосіб програмного виходу при використанні LoginButton?
Співав

Я також хочу знати, як ми можемо вийти з системи LoginButton
sarath

просто використовуйте кнопку LoginButton, клацніть її ще раз, тоді вона вийде з системи
Beeing Jk

7

Щоб обробити його за допомогою кнопки входу:

//Check if user is currently logged in
        if (AccessToken.getCurrentAccessToken() != null && com.facebook.Profile.getCurrentProfile() != null){
            //Logged in so show the login button
            fbLogin.setVisibility(View.VISIBLE);
            fbLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
//log out
                    LoginManager.getInstance().logOut();
                    gotoLogin();
                }
            });
        }

Ей, Стіві, Коли я викликав метод logOut (), як ви вже згадували у своїй відповіді, він дав мені помилку "java.lang.SecurityException: Заборона дозволу: налаштування get / set для користувача просить запустити як користувач -2, але дзвонить від користувача 0; ". Просить мене додати дозвіл у файл маніфесту. Як я можу це вирішити, оскільки я не хочу надати цей дозвіл, оскільки вихід повинен бути звичайною процедурою.
Адітя

@Aditya Вам потрібен лише дозвіл в Інтернеті для додатка. <uses-permission android:name="android.permission.INTERNET" />
Стівен

Але я отримую вище помилку, якщо я не додаю її. Якщо можливо, чи можете ви поділитися зразком facebook, у якому є спеціальна кнопка входу та спеціальна кнопка виходу ??
Адітя

@Aditya в цьому прикладі я використовую кнопку для входу у facebook
Stephen

4

Ви можете вийти за допомогою LoginManager, але вам також потрібно використовувати графіковий запит. Я говорю про вихід повністю, так що наступного разу ви можете увійти з іншим обліковим записом.

new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
            .Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {

            SharedPreferences pref = DashBoard.this.getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = pref.edit();
            editor.clear();
            editor.commit();
            LoginManager.getInstance().logOut();

            Intent logoutint = new Intent(DashBoard.this,MainActivity.class);
            logoutint.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
               startActivity(logoutint);

        }
    }).executeAsync();

За допомогою спільних налаштувань тут ви можете повністю вийти, а наступного разу ви зможете ввійти в інший обліковий запис.


1

Відверта версія котліна:

 fun disconnectFromFacebook() {
    if (AccessToken.getCurrentAccessToken() == null) {
        return  // already logged out
    }
    GraphRequest(
        AccessToken.getCurrentAccessToken(),
        "/me/permissions/",
        null,
        HttpMethod.DELETE,
        GraphRequest.Callback {
            LoginManager.getInstance().logOut()
        }).executeAsync()
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.