我在努力寻找在FB文档一个简单的答案。使用3.0我认为有两种方法来检查用户是否登录Facebook的SDK版本。
1)使用Session.isOpened()
要使用这个方法,你需要与getActiveSession()
,然后检索活动会议(这里是令人困惑的部分)解密,如果会话处于用户登录状态。我认为对于登录用户唯一重要的是会话isOpened()
。因此,如果会话不是null
并且它是开放的,那么用户已登录。在所有其他情况下,用户已注销(请记住,Session
可以具有除打开和关闭以外的其他状态)。
public boolean isLoggedIn() {
Session session = Session.getActiveSession();
return (session != null && session.isOpened());
}
还有另外一种方式来写这个功能,在这个answer详细,但我不知道哪种方法更清晰或“最佳实践”。
2)不断地监视状态变更Session.StatusCallback
和UiLifecycleHelper
如果按照这个tutorial你会设置的UiLifecycleHelper
和实例化时用它注册Session.StatusCallback
对象。有一个回调方法,call()
,你可以在Session.StatusCallback
中覆盖这个方法,在用户登录/注销时应该会调用它。在该方法中,您可以跟踪用户是否登录。也许是这样的:
private boolean isLoggedIn = false; // by default assume not logged in
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (state.isOpened()) { //note: I think session.isOpened() is the same
isLoggedIn = true;
} else if (state.isClosed()) {
isLoggedIn = false;
}
}
};
public boolean isLoggedIn() {
return isLoggedIn;
}
我想办法更简单,可能是更好的选择。
作为一个侧面说明任何人都可以阐明为什么教程喜欢叫state.isOpened()
而不是session.isOpened()
因为两个光似乎是互换(session.isOpened()
似乎刚刚经历反正打电话到state
版)。
你见过这个文档 - https://developers.facebook.com/docs/reference/androidsdk/authentication/? – deesarus