2015-03-27 21 views
85

Niedawno Facebook opublikował pakiet SDK 4 z nowymi i ciekawymi aktualizacjami. Próbowałem przełączyć się na SDK4, aby korzystać z nowych funkcji, jednak zmagam się z funkcją logowania na Facebooku.Facebook SDK 4 dla systemu Android - sposób automatycznego wylogowania

Do tej pory, aby wylogować Facebooka programowo, użyłem:

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

Ale SDK4 wydaje się nie wspierać Sesja już, aw oficjalnych docs, wspominają:

Istnieją dwa sposoby zaimplementować logowanie do Facebooka na Androida:

Klasa LoginButton - która zapewnia przycisk, który możesz dodać do swojego interfejsu użytkownika. Jest on zgodny z bieżącym tokenem dostępu i może rejestrować ludzi.

Cóż, wygląda na to, że nie ma sposobu na logiczne wylogowanie się z Facebooka z wyjątkiem użycia LoginButton. Każdy ma jakiś pomysł, proszę udostępnij go tutaj.

Odpowiedz

225

Można użyć LoginManager.getInstance().logOut();, nawet jeśli używasz LoginButton ponieważ

Ten element UI zawija funkcjonalność dostępną w LoginManager.

EDIT: Wystarczy wspomnieć, że to działa na Facebook SDK v4. Nie wiem, czy zmienią to w przyszłości.

@ batutofhell wspomnieć, nie zapomnij umieścić FacebookSdk.sdkInitialize(getApplicationContext());, aby zainicjować sdk facebook. Szczegółowe informacje znajdują się pod numerem here.

+2

Perfect - thanks. To działało dla mnie. – Simon

+2

Chcę wspomnieć, ponieważ jest to najlepszy wynik w Google, moja aplikacja uległa awarii podczas próby wylogowania, dopóki nie dodałem pierwszej linii: FacebookSdk.sdkInitialize (this.getApplicationContext()); LoginManager.getInstance(). LogOut(); – batoutofhell

+4

Po wylogowaniu nie pozwoli mi ponownie zalogować się. Czy istnieje sposób na ponowne logowanie po zalogowaniu się do LoginManager.getInstance(). LogOut(); – AndroidDev

5

Aby poradzić z 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(); 
       } 
      }); 
     } 
+0

Hej Stevie, Kiedy nazwałem metodę logOut() jak ty wspomniałem w twojej odpowiedzi, to dało mi błąd "java.lang.SecurityException: Odmowa uprawnień: ustawienie get/set dla użytkownika prosi o uruchomienie jako użytkownik -2, ale dzwoni od użytkownika 0;". Prosi mnie o dodanie pozwolenia w pliku manifestu. Jak mogę to rozwiązać, ponieważ nie chcę tego uprawnienia, ponieważ wylogowanie powinno być normalną procedurą. – Aditya

+0

@Aditya Potrzebujesz tylko dostępu do Internetu dla aplikacji. '' – surfer190

+0

Ale otrzymuję powyższy błąd, jeśli go nie dodaję. Jeśli to możliwe, czy możesz udostępnić przykład z Facebooka, który ma niestandardowy przycisk logowania i przycisk niestandardowego wylogowania? – Aditya

50

SDK4, jeśli chcesz całkowicie de-para, upewnij się, że również usunąć aplikację z konta facebook użytkownika. Ta metoda całkowicie odłączy użytkownika:

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

To jest dokładnie to, co chciałem! –

+0

To znaczy, że muszę usunąć aplikację Facebook i wiadomość z Facebooka, aby zakończyć wylogowanie się z mojej aplikacji? – phongvan

+0

Ta odpowiedź zapewnia całkowite wylogowanie użytkownika. Aby być w 100% konieczne jest włączenie FacebookSdk.sdkInitialize (getApplicationContext()); –

2

U można się wylogować za pomocą LoginManager, ale musisz również użyć żądania wykresu. Mówię o wylogowaniu się całkowicie, aby następnym razem móc logować się na inne konto.

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

Za pomocą udostępnionych ustawień tutaj można się całkowicie wylogować. Następnym razem możesz wylogować się z innego konta.

Powiązane problemy