Android用Facebook SDK 4-プログラムでログアウトする方法


112

最近、FacebookはSDK 4をリリースし、新しくてクールなアップデートをしています。新しい機能を使用するためにSDK4に切り替えようとしましたが、Facebookのログイン機能に苦労しています。

これまでのところ、プログラムでFacebookからログアウトするには、以下を使用しました。

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

しかし、SDK4はもはやSessionをサポートしていないようであり、公式ドキュメントでは彼らは次のように述べています:

AndroidにFacebookログインを実装するには、2つの方法があります。

LoginButtonクラス-UIに追加できるボタンを提供します。現在のアクセストークンに従い、ユーザーをログインおよびログアウトできます。

まあ、LoginButtonを使用する以外にプログラムでFacebookからログアウトする方法はないようです。どなたかアイデアがあれば、こちらで共有してください。

回答:


276

LoginManager.getInstance().logOut();LoginButtonを使用しても、を使用できます。

このUI要素は、LoginManagerで使用可能な機能をラップします。

編集: これはFacebook SDK v4で機能することを説明します。彼らが将来それを変えるかどうかはわかりません。

@ batoutofhellの言及としてFacebookSdk.sdkInitialize(getApplicationContext());、FacebookのSDKを初期化することを忘れないでください。詳細はこちらをご覧ください。


2
これはGoogleの上位の結果であるため、最初にこの行を追加するまでログアウトしようとするとアプリがクラッシュしました:FacebookSdk.sdkInitialize(this.getApplicationContext()); LoginManager.getInstance()。logOut();
batoutofhell 2015年

7
ログアウト後、再度ログインすることはできません。LoginManager.getInstance()。logOut();を実行した後で再度ログインする方法はありますか?
AndroidDev 2015

1
onCreateですでに初期化されているので、なぜFacebookSdk.sdkInitializeを呼び出す必要があるのですか?
CoolMind 2017年

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 2016年

つまり、アプリのログアウトを完了するにはFacebookアプリとFacebookメッセージを削除する必要がありますか?
フォンバン

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を呼び出してもブロックされません。
フランク

9

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

ヘイスティービー、回答で述べたようにlogOut()メソッドを呼び出すと、エラー「java.lang.SecurityException:Permission Denial:get / set setting for user was run as run as user -2 is running from user 0; " マニフェストファイルに権限を追加するように求められています。ログアウトは通常の手順であるため、この権限を与えたくないので、どうすれば解決できますか?
Aditya

@Adityaあなたはアプリのインターネット許可のみが必要です。<uses-permission android:name="android.permission.INTERNET" />
スティーブン

しかし、追加しないとエラーが発生します。可能であれば、カスタムログインボタンとカスタムログアウトボタンを備えたFacebookサンプルを共有していただけませんか?
Aditya 2015年

@Adityaこの例では、Facebookのログインボタンを使用しています
スティーブン

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()
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.