繁体   English   中英

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

Android Facebook SDK: Check if the user is logged in or not

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我的 Android 应用程序有一项功能,用户可以在其中授权应用程序并共享链接。

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

我似乎无法在Android SDK上找到可以让我询问 FB 用户是否已登录的 API 调用。

我发现的是getAccessExpires()

检索当前会话的过期时间(自 Unix 纪元以来的毫秒数),如果会话未过期或不存在,则为 0。

检查会话是否等于 0 是要走的路吗? 或者有什么我想念的吗?

10 个回复

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

boolean loggedIn = AccessToken.getCurrentAccessToken() != null;

要么

通过使用函数

boolean loggedIn;
//...
loggedIn = isFacebookLoggedIn();
//...
public boolean isFacebookLoggedIn(){
    return AccessToken.getCurrentAccessToken() != null;
}

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

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

1) 使用Session.isOpened()

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

public boolean isLoggedIn() {
    Session session = Session.getActiveSession();
    return (session != null && session.isOpened());
}

还有另一种编写此函数的方法,在此答案中有详细说明,但我不确定哪种方法更清晰或更“最佳实践”。

2) 使用Session.StatusCallbackUiLifecycleHelper持续监控状态变化

如果您遵循本教程,您将设置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;
}

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

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

读者注意事项:现在在新的 FB 3.0 SDK 中已弃用。

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

Session.getActiveSession().isOpened()

如果用户已登录,则返回 true,否则返回 false

Android Studio 具有:

compile 'com.facebook.android:facebook-android-sdk:4.0.1'

然后像这样检查登录:

private void facebookPost() {
    //check login
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if (accessToken == null) {
        Log.d(TAG, ">>>" + "Signed Out");
    } else {
        Log.d(TAG, ">>>" + "Signed In");
    }
}

@diljeet 是对的。 https://stackoverflow.com/a/29375963/859330

此外,使用

return AccessToken.getAccessToken() != null && Profile.getCurrentProfile()!=null;

它总是以这种方式工作。

对于 Facebook Android SDK 4.x,您必须使用@Diljeet 所说的“AccessToken.getCurrentAccessToken()”,但他的支票对我不起作用,我最终通过以下方式进行了检查:

活动“onCreate”:

facebookAccessToken = AccessToken.getCurrentAccessToken();

要检查会话是否仍然处于活动状态(我在“onResume”方法中进行了但在您需要的地方进行):

  if(facebookAccessToken != null){
        sessionExpired = facebookAccessToken.isExpired();
  }else{
        sessionExpired = true;
  }

https://developers.facebook.com/docs/facebook-login/android 中的更多信息

这似乎与新的 sdk 配合得很好。

private boolean isFacebookLoggedIn(){
    Session session = Session.getActiveSession();

    if (session != null) {
        //Session can be open, check for valid token
        if (!session.isClosed()) {
            if(!session.getAccessToken().equalsIgnoreCase("")){
                return true;
            }
        }
    }
    return false;
}

我遇到过同样的问题。 这是我使用 SDK 4.0 的解决方案:

首先,在你处理登录检查的活动中,一定要调用这个主要的:

        FacebookSdk.sdkInitialize(this.getApplicationContext());

在你的 onCreate 方法中放这个:

updateWithToken(AccessToken.getCurrentAccessToken());

    new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            updateWithToken(newAccessToken, handler);
        }
    };

然后添加调用的方法:

private void updateWithToken(AccessToken currentAccessToken) {
    if (currentAccessToken != null) {
        fillUIWithFacebookInfos(handler);
    } else {
        login();
    }
}

这种方式将处理已经登录的用户和新登录的用户。

我使用 FB sdk 仅用于登录.. Facebook 开发人员拒绝我的应用程序,因为每当用户登录时,我都会发送注销.. 我不关心用户个人资料数据......我只是使用 FB 登录.. FB 会告诉用户是否登录。 .. 不要发送 lgout ......

我找到了黑客方式......现在我的应用程序不会在用户登录时发送注销......无论用户登录,谷歌,Facebook还是正常......当他们点击注销......在这三种情况下我使用LoginManager.getInstance().logOut();

无论他们使用哪个平台......都没有崩溃:)

1 Android facebook sdk 4:检查用户是否已登录

我使用新的facebook sdk面临一个问题。 在我的应用程序上,我使用旧sdk,一切正常,但现在有些东西不能正常工作。 我有一个登录FragmentActivity,检查用户是否已经登录过,所以打开应用程序主体活动。 如果用户未登录,则活动会显示带有登录选项的片段(并且一个选项是使用f ...

2 检查用户是否在Facebook登录或未登录

我开发了一个应用程序,具有登录应用程序的Facebook登录功能,所以我在应用程序的主页面中实现两个按钮,所以当点击登录与Facebook打开的Facebook登录页面所以我的问题是当用户已经使用fb登录然后按钮登录应该是不可见的所以我ckeck facebook.isSessionValid( ...

4 检查 Facebook 用户是否使用 PHP SDK 登录到应用程序

我有一个使用 Facebook 登录 API 的应用程序。 我获取用户的详细信息并将其存储在我自己的数据库中,并为该用户创建我自己的用户 ID(我还存储了 facebook ID)。 下次用户访问我的网站时,我想自动设置会话,而无需再次重新连接。 所以我想获取用户的 Facebook ID(如果他 ...

6 Facebook PHP SDK 3.0(检查用户是否已登录)

我正在尝试使用Facebook PHP SDK 3.0来了解用户当前是否登录到他的Facebook帐户以显示他的信息。 这是流程: 用户来到我的网站并将他的帐户与我的Facebook应用程序连接。 用户现在登录我的网站,我的网站可以访问他的信息。 用户退出face ...

9 Android:如何检查用户是否登录Facebook

我正在尝试将Facebook集成到android中,主要是我面临3个问题。 1)当用户单击“ 使用Facebook登录”按钮,并且如果用户未登录,则它正在打开我从Play商店安装的Facebook应用,而不是弹出窗口。 2)我想检查天气用户是否登录,如果是,那么应用程序只是询问测试应 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM