Facebook SDK 4 for Android - 如何以编程方式注销

时间:2015-03-27 16:10:54

标签: android facebook facebook-sdk-4.0

最近,Facebook发布了新的和酷炫的更新SDK 4。我试图切换到SDK4以使用新功能,但是,我正在努力使用Facebook的登录功能。

到目前为止,为了以编程方式注销Facebook,我使用了:

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

但SDK4似乎不再支持Session了,在官方文档中,他们提到:

  

在Android上实施Facebook登录有两种方法:

     

LoginButton类 - 它提供了一个可以添加到UI的按钮。它遵循当前的访问令牌,可以将人员记录下来。

好吧,除了使用LoginButton之外,似乎没有办法以编程方式注销Facebook。 任何人都有任何想法,请在这里分享。

6 个答案:

答案 0 :(得分:256)

即使您使用LoginButton,也可以使用LoginManager.getInstance().logOut();

  

此UI元素包含LoginManager中可用的功能。

修改 仅举这一点,这适用于 Facebook SDK v4 。我不知道他们将来是否会改变它。

@as batoutofhell提及,不要忘记FacebookSdk.sdkInitialize(getApplicationContext());初始化facebook sdk。有关详细信息,请参阅here

答案 1 :(得分:59)

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

答案 2 :(得分:9)

答案 3 :(得分: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();
                }
            });
        }

答案 4 :(得分:3)

您可以使用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();

借助共享偏好设置,您可以完全退出,下次可以使用其他帐户登录。

答案 5 :(得分: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()
}