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

fra*_*ong 103 android facebook facebook-sdk-4.0

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

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

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();
Run Code Online (Sandbox Code Playgroud)

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

有两种方法可以在Android上实现Facebook登录:

LoginButton类 - 它提供了一个可以添加到UI的按钮.它遵循当前的访问令牌,可以记录和退出人员.

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

sta*_*kex 265

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

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

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

@as batoutofhell提到,别忘了把FacebookSdk.sdkInitialize(getApplicationContext());facebook sdk初始化.请看这里的详细信息.

  • 注销后,它将不允许我再次登录.有没有办法在我执行LoginManager.getInstance()之后再次登录.logOut(); (6认同)
  • 很好,谢谢.这对我有用. (2认同)
  • 我想提一下,因为这是谷歌的最高结果,我的应用程序在尝试注销时崩溃,直到我首先添加此行:FacebookSdk.sdkInitialize(this.getApplicationContext()); .LoginManager.getInstance()退出(); (2认同)

Fra*_*ank 60

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();
}
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以使用 LoginManager.logOut()

查看https://developers.facebook.com/docs/reference/android/current/class/LoginManager/

  • 如果您使用的是 LoginManager,这会起作用。有没有办法在使用 LoginButton 时以编程方式注销? (2认同)

sur*_*190 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();
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 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();
Run Code Online (Sandbox Code Playgroud)

通过此处共享首选项的帮助,您可以完全注销,下次您可以使用不同的帐户登录。