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.StatusCallback
和UiLifecycleHelper
持续监视状态变化
如果你按照这个教程,你将设置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; }