繁体   English   中英

适用于 Android 的 Facebook SDK 4 - 如何以编程方式注销

[英]Facebook SDK 4 for Android - how to log out programmatically

最近,Facebook 发布了带有新的很酷的更新的 SDK 4。 我尝试切换到 SDK4 以使用新功能,但是,我在 Facebook 的登录功能上苦苦挣扎。

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

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

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

在Android上实现Facebook登录有两种方式:

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

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

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

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

编辑:只是提到这适用于Facebook SDK v4 不知道以后会不会改。

@as batoutofhell 提到,不要忘记把FacebookSdk.sdkInitialize(getApplicationContext()); 初始化facebook sdk。 详情请参阅此处

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

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

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

通过这里的共享首选项,您可以完全退出,下次您可以使用不同的帐户登录。

弗兰克版 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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM