如何以编程方式从Facebook SDK 3.0注销而不使用Facebook登录/注销按钮? [英] How to programmatically log out from Facebook SDK 3.0 without using Facebook login/logout button?
问题描述
我该怎么做?这是我如何进行登录:
private void signInWithFacebook(){
SessionTracker sessionTracker = new SessionTracker(getBaseContext(),new StatusCallback()
{
@Override
public void call(Session session,SessionState state,Exception exception){
}
} null,false);
String applicationId = Utility.getMetadataApplicationId(getBaseContext());
mCurrentSession = sessionTracker.getSession();
if(mCurrentSession == null || mCurrentSession.getState()。isClosed()){
sessionTracker.setSession(null);
Session session = new Session.Builder(getBaseContext())。setApplicationId(applicationId).build();
Session.setActiveSession(session);
mCurrentSession = session;
}
if(!mCurrentSession.isOpened()){
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(RegisterActivity.this);
if(openRequest!= null){
openRequest.setPermissions(null);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mCurrentSession.openForRead(openRequest);
}
} else {
Request.executeMeRequestAsync(mCurrentSession,new Request.GraphUserCallback(){
@Override
public void onCompleted(GraphUser user,Response response){
fillProfileWithFacebook(user);
}
});
}
}
理想情况下,我会在开始时打电话这种方法可以注销任何以前的用户。
更新最新的SDK:
现在@ zeuter的答案对于Facebook SDK v4.7 +是正确的:
LoginManager.getInstance()。logOut();
原始答案: / strong>
请不要使用SessionTracker。它是一个内部(包私有)类,并不意味着作为公共API的一部分使用。因此,其API可能随时更改,而无需向后兼容性保证。你应该能够摆脱代码中SessionTracker的所有实例,而只需使用活动的会话。
要回答你的问题,如果你不想要保留任何会话数据,只需致电 closeAndClearTokenInformation 当您的应用程序关闭时。
The title says it all. I'm using a custom button to fetch the user's facebook information (for "sign up" purposes). Yet, I don't want the app to remember the last registered user, neither the currently logged in person via the Facebook native app. I want the Facebook login activity to pop up each time. That is why I want to log out any previous users programmatically.
How can I do that? This is how I do the login:
private void signInWithFacebook() {
SessionTracker sessionTracker = new SessionTracker(getBaseContext(), new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception) {
}
}, null, false);
String applicationId = Utility.getMetadataApplicationId(getBaseContext());
mCurrentSession = sessionTracker.getSession();
if (mCurrentSession == null || mCurrentSession.getState().isClosed()) {
sessionTracker.setSession(null);
Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
Session.setActiveSession(session);
mCurrentSession = session;
}
if (!mCurrentSession.isOpened()) {
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(RegisterActivity.this);
if (openRequest != null) {
openRequest.setPermissions(null);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mCurrentSession.openForRead(openRequest);
}
}else {
Request.executeMeRequestAsync(mCurrentSession, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
fillProfileWithFacebook( user );
}
});
}
}
Ideally, I would make a call at the beginning of this method to log out any previous users.
Update for latest SDK:
Now @zeuter's answer is correct for Facebook SDK v4.7+:
LoginManager.getInstance().logOut();
Original answer:
Please do not use SessionTracker. It is an internal (package private) class, and is not meant to be consumed as part of the public API. As such, its API may change at any time without any backwards compatibility guarantees. You should be able to get rid of all instances of SessionTracker in your code, and just use the active session instead.
To answer your question, if you don't want to keep any session data, simply call closeAndClearTokenInformation when your app closes.
这篇关于如何以编程方式从Facebook SDK 3.0注销而不使用Facebook登录/注销按钮?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!