Facebook SDK 4 untuk Android - cara keluar secara terprogram


112

Baru-baru ini, Facebook merilis SDK 4 dengan pembaruan baru dan keren. Saya mencoba beralih ke SDK4 untuk menggunakan fitur baru, namun saya kesulitan dengan fitur Login dari Facebook.

Sejauh ini, untuk keluar dari Facebook secara terprogram, saya menggunakan:

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

Tetapi SDK4 tampaknya tidak mendukung Sesi lagi, dan di dokumen resmi, mereka menyebutkan:

Ada dua cara untuk menerapkan login Facebook di Android:

Kelas LoginButton - Yang menyediakan tombol yang dapat Anda tambahkan ke UI Anda. Ini mengikuti token akses saat ini dan dapat membuat orang masuk dan keluar.

Sepertinya tidak ada cara untuk keluar dari Facebook secara terprogram kecuali menggunakan LoginButton. Ada yang punya ide, tolong bagikan di sini.

Jawaban:


276

Anda dapat menggunakan LoginManager.getInstance().logOut();, meskipun Anda menggunakan LoginButton karena

Elemen UI ini membungkus fungsionalitas yang tersedia di LoginManager.

EDIT: Hanya untuk menyebutkan bahwa ini berfungsi untuk Facebook SDK v4 . Saya tidak tahu apakah mereka akan mengubahnya di masa depan.

@sebagai batoutofhell, jangan lupa FacebookSdk.sdkInitialize(getApplicationContext());untuk menginisialisasi sdk facebook. Silakan lihat di sini untuk detailnya.


2
Saya ingin menyebutkan karena ini adalah hasil google teratas, aplikasi saya macet saat mencoba keluar sampai saya menambahkan baris ini terlebih dahulu: FacebookSdk.sdkInitialize (this.getApplicationContext ()); LoginManager.getInstance (). LogOut ();
batoutofhell

7
Setelah logout, saya tidak dapat masuk lagi. Apakah ada cara untuk masuk lagi setelah saya melakukan LoginManager.getInstance (). LogOut ();
AndroidDev

1
Mengapa kita harus memanggil FacebookSdk.sdkInitialize, karena sudah diinisialisasi di onCreate?
CoolMind

1
LoginManager.logOut () saya menggunakan ini, berfungsi dengan baik
Erum

1
@Erum Tidak ada metode LoginManager.logOut()seperti sekarang di FB SDK v4.23.0
Permata

61

SDK4, jika Anda ingin menghapus sepenuhnya, pastikan Anda juga menghapus aplikasi dari akun facebook pengguna. Metode ini memutuskan pengguna sepenuhnya:

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();
}

Inilah yang saya inginkan!
Sash_KP

Itu berarti saya harus menghapus Aplikasi Facebook dan pesan Facebook untuk menyelesaikan logout dari aplikasi saya?
phongvan

1
Jawaban ini memastikan pengguna benar-benar keluar. Agar 100% Anda harus menyertakan FacebookSdk.sdkInitialize (getApplicationContext ());
Sandro Wiggers

Dalam panggilan balik saya juga menambahkan @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); LoginManager.getInstance (). LogOut (); }
Sandro Wiggers

1
@voghDev onCompleted tidak kembali ke utas UI yang saya yakini, jadi tidak memblokirnya saat Anda memanggil logOut di sana.
Frank


7

Untuk menanganinya dengan loginButton:

//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();
                }
            });
        }

Hai Stevie, Ketika saya memanggil metode logOut () seperti yang Anda sebutkan dalam jawaban Anda, maka itu memberi saya kesalahan "java.lang.SecurityException: Permission Denial: get / set setting untuk pengguna meminta untuk dijalankan sebagai pengguna -2 tetapi memanggil dari pengguna 0; ". Itu meminta saya untuk menambahkan izin dalam file manifes. Bagaimana saya bisa mengatasinya karena saya tidak ingin memberikan izin ini karena logout seharusnya merupakan prosedur normal.
Aditya

@Aditya Anda hanya memerlukan izin internet untuk Aplikasi. <uses-permission android:name="android.permission.INTERNET" />
Stephen

Tetapi saya mendapatkan kesalahan di atas, jika saya tidak menambahkannya. Jika memungkinkan, dapatkah Anda membagikan contoh facebook yang memiliki tombol login kustom dan tombol logout kustom ??
Aditya

@Aditya dalam contoh ini saya menggunakan tombol Login facebook
stephen

4

Anda dapat keluar dengan menggunakan LoginManager tetapi Anda juga harus menggunakan permintaan grafik. Saya berbicara tentang keluar sepenuhnya jadi, lain kali Anda dapat masuk dengan akun yang berbeda.

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();

Dengan bantuan preferensi bersama di sini Anda dapat keluar sepenuhnya, dan lain kali Anda dapat masuk dengan akun yang berbeda.


1

Versi Frank kotlin:

 fun disconnectFromFacebook() {
    if (AccessToken.getCurrentAccessToken() == null) {
        return  // already logged out
    }
    GraphRequest(
        AccessToken.getCurrentAccessToken(),
        "/me/permissions/",
        null,
        HttpMethod.DELETE,
        GraphRequest.Callback {
            LoginManager.getInstance().logOut()
        }).executeAsync()
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.