Android için Facebook SDK 4 - programlı olarak nasıl çıkış yapılır


112

Son zamanlarda, Facebook yeni ve harika güncellemelerle SDK 4'ü yayınladı. Yeni özellikleri kullanmak için SDK4'e geçmeye çalıştım ancak Facebook'un Oturum Açma özelliği ile uğraşıyorum.

Şimdiye kadar programlı olarak Facebook'tan çıkmak için şunu kullandım:

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

Ancak SDK4 artık Oturumu desteklemiyor gibi görünüyor ve resmi belgelerde şunlar belirtiliyor:

Android'de Facebook girişini uygulamanın iki yolu vardır:

LoginButton sınıfı - Kullanıcı arayüzünüze ekleyebileceğiniz bir düğme sağlar. Mevcut erişim belirtecini takip eder ve kişilerin giriş ve çıkışlarını yapabilir.

Görünüşe göre, LoginButton'ı kullanmak dışında Facebook'tan programlı olarak çıkış yapmanın bir yolu yok. Herhangi bir fikri olan varsa, lütfen burada paylaşın.

Yanıtlar:


276

LoginManager.getInstance().logOut();LoginButton kullansanız bile kullanabilirsiniz , çünkü

Bu UI öğesi, LoginManager'da bulunan işlevselliği sarar.

DÜZENLEME: Bunun Facebook SDK v4 için çalıştığını belirtmek isterim . Gelecekte değiştirecekler mi bilmiyorum.

@ batoutofhell'den bahsederken, facebook sdk'yi FacebookSdk.sdkInitialize(getApplicationContext());başlatmayı unutmayın . Ayrıntılar için lütfen buraya bakın.


2
Bunun en iyi google sonucu olduğundan bahsetmek istiyorum, ilk olarak bu satırı ekleyene kadar çıkış yapmaya çalışırken uygulamam çöktü: FacebookSdk.sdkInitialize (this.getApplicationContext ()); . LoginManager.getInstance () Çıkışı ();
batoutofhell

7
Çıkış yaptıktan sonra tekrar Giriş yapmama izin vermiyor. LoginManager.getInstance (). LogOut () yaptıktan sonra tekrar oturum açmanın bir yolu var mı?
AndroidDev

1
OnCreate'de zaten başlatılmış olduğundan neden FacebookSdk.sdkInitialize'ı çağırmalıyız?
CoolMind

1
LoginManager.logOut () Bunu kullandım, düzgün çalışıyor
Erum

1
@Erum LoginManager.logOut()FB SDK v4.23.0'da şu an için böyle bir yöntem yok
Gem

61

SDK4, tamamen ayrıştırmak istiyorsanız, uygulamayı kullanıcının facebook hesabından da kaldırdığınızdan emin olun. Bu yöntem, kullanıcının bağlantısını tamamen keser:

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

Bu tam olarak istediğim şey!
Sash_KP

Bu, uygulamamdan çıkış işlemini tamamlamak için Facebook Uygulamasını ve Facebook mesajını kaldırmam gerektiği anlamına mı geliyor?
phongvan

1
Bu cevap, kullanıcının tamamen çıkış yapmasını sağlar. Sadece% 100 olması için FacebookSdk.sdkInitialize (getApplicationContext ());
Sandro Wiggers

Geri aramada ayrıca @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); . LoginManager.getInstance () Çıkışı (); }
Sandro Wiggers

1
@voghDev onCompleted inandığım UI iş parçacığına geri dönmüyor, bu yüzden logOut'u çağırdığınızda onu engellemiyor.
Frank


7

Bunu loginButton ile işlemek için:

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

Hey Stevie, cevabınızda belirttiğiniz gibi logOut () yöntemini çağırdığımda bana "java.lang.SecurityException: İzin Reddi: kullanıcı için get / set ayarı -2 kullanıcı olarak çalışmasını istiyor ancak kullanıcıdan arıyor 0;". Manifest dosyasına bir izin eklememi istiyor. Bunu nasıl çözebilirim çünkü bu izni vermek istemiyorum çünkü çıkış normal bir prosedür olmalıdır.
Aditya

@Aditya Uygulama için yalnızca internet iznine ihtiyacınız var. <uses-permission android:name="android.permission.INTERNET" />
stephen

Ama eklemezsem, yukarıdaki hatayı alıyorum. Mümkünse, özel giriş düğmesi ve özel çıkış düğmesi olan bir facebook örneğini paylaşabilir misiniz?
Aditya

@Aditya Bu örnekte facebook Oturum Aç düğmesini kullanıyorum
stephen

4

LoginManager'ı kullanarak çıkış yapabilirsiniz, ancak aynı zamanda grafik talebini de kullanmanız gerekir. Tamamen çıkıştan bahsediyorum, böylece bir dahaki sefere farklı bir hesapla giriş yapabilirsiniz.

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

Buradaki paylaşılan tercihlerin yardımıyla tamamen çıkış yapabilir ve bir dahaki sefere farklı bir hesapla giriş yapabilirsiniz.


1

Frank versiyonu 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()
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.