[英]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.