首页 文章

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

提问于
浏览
97

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

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

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

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

在Android上实现Facebook登录有两种方法:LoginButton类 - 它提供了一个可以添加到UI的按钮 . 它遵循当前的访问令牌,可以记录和退出人员 .

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

5 回答

  • 57

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

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

    EDIT: 只是提到这适用于 Facebook SDK v4 . 我不知道他们将来是否会改变它 .

    @as batoutofhell提一下,别忘了把 FacebookSdk.sdkInitialize(getApplicationContext()); 初始化为facebook sdk . 有关详细信息,请参阅here .

  • 6

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

    要使用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();
                    }
                });
            }
    
  • 9

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

    借助共享首选项,您可以完全注销,下次您可以使用其他帐户登录 .

相关问题