Android 용 Facebook SDK 4-프로그래밍 방식으로 로그 아웃하는 방법


112

최근 Facebook은 새롭고 멋진 업데이트로 SDK 4를 출시했습니다. 새로운 기능을 사용하기 위해 SDK4로 전환을 시도했지만 Facebook의 로그인 기능에 어려움을 겪고 있습니다.

지금까지 프로그래밍 방식으로 Facebook에서 로그 아웃하기 위해 다음을 사용했습니다.

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

그러나 SDK4는 더 이상 세션을 지원하지 않는 것으로 보이며 공식 문서에서 다음과 같이 언급합니다.

Android에서 Facebook 로그인을 구현하는 방법에는 두 가지가 있습니다.

LoginButton 클래스-UI에 추가 할 수있는 버튼을 제공합니다. 현재 액세스 토큰을 따르고 사람들을 로그인 및 로그 아웃 할 수 있습니다.

글쎄, LoginButton을 사용하는 것 외에는 프로그래밍 방식으로 Facebook에서 로그 아웃 할 수있는 방법이없는 것 같습니다. 누구나 아이디어가 있으시면 여기에서 공유하십시오.

답변:


276

LoginManager.getInstance().logOut();LoginButton을 사용하더라도 사용할 수 있습니다.

이 UI 요소는 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
onCreate에서 이미 초기화되었으므로 FacebookSdk.sdkInitialize를 호출해야하는 이유는 무엇입니까?
CoolMind

1
LoginManager.logOut () 나는 이것을 사용했고, 제대로 작동합니다
Erum

1
@Erum 그런 방법이 없습니다 LoginManager.logOut()FB SDK의 v4.23.0 지금 현재로는
보석

61

SDK4, 완전히 분리하려면 사용자의 페이스 북 계정에서도 앱을 제거해야합니다. 이 방법은 사용자의 연결을 완전히 끊습니다.

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 메시지를 제거해야합니까?
phongvan

1
이 답변은 사용자가 완전히 로그 아웃되도록합니다. 100 %가 되려면 FacebookSdk.sdkInitialize (getApplicationContext ());를 포함해야합니다.
Sandro Wiggers

콜백에서 나는 또한 @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); LoginManager.getInstance (). logOut (); }
Sandro Wiggers

1
@voghDev onCompleted는 내가 믿는 UI 스레드로 돌아 오지 않으므로 거기에서 logOut을 호출 할 때 차단하지 않습니다.
Frank

9

당신이 사용할 수있는 LoginManager.logOut()

https://developers.facebook.com/docs/reference/android/current/class/LoginManager/ 확인


2
LoginManager를 사용하는 경우 작동합니다. LoginButton을 사용할 때 프로그래밍 방식으로 로그 아웃하는 방법이 있습니까?
2015

나는 또한 우리가 로그 아웃하는 방법을 알고 싶어 LoginButton 사용하는 경우
sarath

LoginButton을 사용하고 다시 클릭하면 로그 아웃됩니다
Beeing Jk

7

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

Hey Stevie, 답변에서 언급했듯이 logOut () 메서드를 호출했을 때 "java.lang.SecurityException : Permission Denial : get / set setting for user asks to run as user -2 but is calling from user 0; ". 매니페스트 파일에 권한을 추가하라는 메시지가 표시됩니다. 로그 아웃이 정상적인 절차 여야하므로이 권한을 부여하고 싶지 않기 때문에 어떻게 해결할 수 있습니까?
Aditya

@Aditya 앱에 대한 인터넷 권한 만 필요합니다. <uses-permission android:name="android.permission.INTERNET" />
스티븐

하지만 추가하지 않으면 위의 오류가 발생합니다. 가능하다면 커스텀 로그인 버튼과 커스텀 로그 아웃 버튼이있는 페이스 북 샘플을 공유 해주시 겠어요 ??
Aditya

@Aditya이 예제에서 나는 페이스 북의 로그인 버튼을 사용하고
스티븐

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

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()
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.