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

byt*_*orm 13 android facebook facebook-graph-api

我在我的Android应用程序中集成了Facebook sdk.如手册中所述,我添加了facebook的登录回调.但是如果用户从Facebook注销,我必须更改UI.我在哪里放这个代码.我的登录代码是

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

Sta*_*olm 38

有两种可能的方法:

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

2)您可以调用LoginManager.logOut()来注销用户

希望对你有帮助 :)

  • 它工作得很好......我只需要在用户登录后添加`accesstokenTracker.startTracking()`. (5认同)

bon*_*ndo 7

谢谢斯坦.你帮我解决了,但花了我一些时间.为了帮助其他人,这是完整的代码:

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