Android Facebook SDK:检查用户是否login

我在Android应用程序中有一个function,用户授权应用程序并共享链接。

我也需要给用户注销Facebook的选项,我需要有条件地禁用此button,如果用户没有loginint(或未授权的应用程序)。

我似乎无法findAndroid SDK上的API调用,让我问FB,如果用户login或不。

我发现的是getAccessExpires()

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

将检查会话是否等于0的路要走? 还是有什么我失踪?

我努力在FB文档中find一个简单的答案。 使用Facebook SDK版本3.0我认为有两种方法来检查用户是否login。

1)使用Session.isOpened()

要使用此方法,您需要使用getActiveSession()检索活动会话,如果会话处于用户login状态,则(这里是令人困惑的部分)解密。 我认为对于login用户唯一重要的是会话isOpened() 。 所以如果会话不是null并且它是开放的,那么用户login。在所有其他情况下,用户被注销(记住Session可以具有除了打开和closures之外的状态)。

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

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

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

如果你按照这个教程,你将设置UiLifecycleHelper并在实例化时注册一个Session.StatusCallback对象。 有一个callback方法call() ,你可以在Session.StatusCallback中重写这个方法,在用户login/注销的时候会调用它。 在这种方法中,也许你可以跟踪用户是否login。 也许这样的事情:

 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更简单,可能是更好的select。

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

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

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

要么

通过使用function

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

检查这个链接更好的参考https://developers.facebook.com/docs/facebook-login/android检查这个标题太“; 访问令牌和configuration文件 ”它说:“你可以看到一个人是否已经通过检查AccessTokenlogin。 getCurrentAccessToken()和Profile.getCurrentProfile()

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

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

 Session.getActiveSession().isOpened() 

如果用户login则返回true,否则返回false

Android Studio带有:

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

然后检查login像:

 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;

它总是这样工作。

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

首先,在你的活动处理login检查,一定要打电话给这个主要:

  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(); } } 

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

对于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; }