我在努力尋找在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