简体   繁体   English

如何在android中为facebook sdk添加注销回调

[英]How to add a logout callback for facebook sdk in android

I have integrated Facebook sdk in my android app. 我在我的Android应用程序中集成了Facebook sdk。 As described in the manual I added the login callback for facebook. 如手册中所述,我添加了facebook的登录回调。 But I have to change the UI if the user logs out from facebook. 但是如果用户从Facebook注销,我必须更改UI。 Where do I put that code. 我在哪里放这个代码。 My code for login is 我的登录代码是

         /**
         * Login Callback for facebook login
         */
        callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {

                @Override
                public void onSuccess(LoginResult loginResult) {
                    //Call updateUI()

                    setData("provider","facebook");
                    loginType = LoginTypes.FB_LOGIN;
                    isLoggedin = true;
                    GraphRequest request = GraphRequest.newMeRequest(
                            loginResult.getAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(
                                        JSONObject object,
                                        GraphResponse response) {
                                    // Application code

                                    txtName.setText(response.toString());
                                    updateUI();
                                }
                            });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id,name,email");
                    request.setParameters(parameters);
                    request.executeAsync();
                }

                @Override
                public void onCancel() {
                    editText_message.setText("Login Cancelled.");
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });

there are 2 possible ways: 有两种可能的方法:

1) you need to overwrite in on create AccessTokenTracker like this: 1)你需要覆盖创建AccessTokenTracker,如下所示:

accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken,
                                                       AccessToken currentAccessToken) {
                    if (currentAccessToken == null) {
                        //write your code here what to do when user logout
                    } 
                }
            }

2) You can call LoginManager.logOut() to log out the user 2)您可以调用LoginManager.logOut()来注销用户

hope this will help you :) 希望对你有帮助 :)

Thank you Stan. 谢谢斯坦。 You helped me solve, but took me some time. 你帮我解决了,但花了我一些时间。 To help other people, that's whole code: 为了帮助其他人,这是完整的代码:

Profile fbProfile = Profile.getCurrentProfile();
AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
    @Override
    protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken,
                                               AccessToken currentAccessToken) {
        if (currentAccessToken == null) {
            Log.d(TAG, "onLogout catched");
            deleteContact();//This is my code
        }
    }
};
if (fbProfile == null) {
    Log.d(TAG, "NOT logged in");
    callbackManager = CallbackManager.Factory.create();

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("email");

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.d(TAG, "onSuccess login Facebook");
            GraphRequest request = GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            FacebookSdk.setIsDebugEnabled(true);
                            FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

                            Log.d(TAG, "AccessToken.getCurrentAccessToken() " + AccessToken.getCurrentAccessToken().toString());
                            Profile profile = Profile.getCurrentProfile();
                            Log.d(TAG, "Current profile: " + profile);
                            if (profile != null) {
                                Log.d(TAG, String.format("id = %s; name = %s; lastName = %s; uri = %s",
                                        profile.getId(), profile.getFirstName(),
                                        profile.getLastName(), profile.getProfilePictureUri(50, 60)));
                                name = String.format("%s %s",profile.getFirstName(),profile.getLastName());
                                fbid = profile.getId();
                                pushNewContact();//This is my code
                            }
                        }
                    });
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            Log.d(TAG, "onCancel");
        }

        @Override
        public void onError(FacebookException e) {
            Log.e(TAG, "onError", e);
        }
    });
} else {
    Log.d(TAG, "Logged with " + fbProfile.getName());
    fbid = fbProfile.getId();
}
accessTokenTracker.startTracking();

This worked for me:- 这对我有用: -

profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(
                Profile oldProfile,
                Profile currentProfile) {

            if(currentProfile == null){
                tvUNameandEmail.setText(R.string.app_name);
            }
        }
    };

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

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