Android Facebook SDK:检查用户是否已登录

Jay*_*dri 34 session sdk android facebook logout

我在我的Android应用程序上有一个功能,用户授权该应用程序并共享链接.

我还需要为用户提供登出facebook的选项,如果用户未登录int(或未授权应用程序),我需要有条件地禁用此按钮.

我似乎无法在Android SDK上找到API调用,如果用户登录,我会询问FB.

我发现的是getAccessExpires():

检索当前会话的到期时间(自Unix纪元以来以毫秒为单位),如果会话未到期或不存在,则返回0.

是否可以检查会话是否等于0?还是有什么我想念的?

Dil*_*eet 55

Facebook SDK 4.x版本现在有不同的方法:

boolean loggedIn = AccessToken.getCurrentAccessToken() != null;
Run Code Online (Sandbox Code Playgroud)

要么

通过使用功能

boolean loggedIn;
//...
loggedIn = isFacebookLoggedIn();
//...
public boolean isFacebookLoggedIn(){
    return AccessToken.getCurrentAccessToken() != null;
}
Run Code Online (Sandbox Code Playgroud)

检查此链接以获得更好的参考https://developers.facebook.com/docs/facebook-login/android也 检查此标题" 访问令牌和配置文件 "它说"您可以通过检查AccessToken查看某人是否已登录. getCurrentAccessToken()和Profile.getCurrentProfile()

  • 我投了这个,但显然,在重新启动应用程序后,`getCurrentAccessToken()`仍然返回null,同时查看LoginButton:它说LogOut.我们在这里失踪了什么? (4认同)

Ton*_*han 48

我努力在FB文档中找到一个简单的答案.使用Facebook SDK 3.0版,我认为有两种方法可以检查用户是否已登录.

1)使用 Session.isOpened()

要使用此方法,您需要检索活动会话,getActiveSession()然后(这里是令人困惑的部分)解密,如果会话处于用户登录状态.我认为登录用户唯一重要的是会话isOpened().因此,如果会话不是null并且它已打开,则用户已登录.在所有其他情况下,用户已注销(请记住,Session除了打开和关闭之外,还可以使用其他状态).

public boolean isLoggedIn() {
    Session session = Session.getActiveSession();
    return (session != null && session.isOpened());
}
Run Code Online (Sandbox Code Playgroud)

还有另一种写这个功能的方法,在这个答案中详细说明,但我不确定哪种方法更清楚或"最佳实践".

2)用Session.StatusCallback和持续监控状态变化UiLifecycleHelper

如果您遵循本教程,您将在实例化时设置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;
}
Run Code Online (Sandbox Code Playgroud)

我认为方法1更简单,可能是更好的选择.

作为旁注,任何人都可以阐明为什么教程喜欢调用state.isOpened()而不是session.isOpened()因为两者似乎都可以互换(session.isOpened()似乎只是调用state版本).


Jes*_*hen 6

读者注意:现在新的FB 3.0 SDK已弃用.

facebook.isSessionValid() 如果用户登录则返回true,否则返回false.

  • 读者注意:现在新的FB 3.0 sdk中不推荐使用它.@Jesse我相信检查登录用户的新方法是我的答案吗? (2认同)