我想检查用户是否在主FragmentActivity中登录,但是用户已登录
AccessToken.getCurrentAccessToken()
返回null。 我在下面的代码中做错了什么?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
FacebookSdk.sdkInitialize(context);
callbackManager = CallbackManager.Factory.create();
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
if (!accessToken.isExpired()) {
}
}
}
答案 0 :(得分:2)
用户如何通过LoginButton登录?如果是这样,它会在点击登录按钮后发生,所以您要检查的时间太早。
如果他们已经登录,则访问令牌将从磁盘反序列化,但这是异步操作,因此不会阻止UI线程。您在初始化Sdk后立即检查它,并且异步操作可能尚未完成。我建议您在加载AccessToken时使用AccessTokenTracker进行响应。以下是使用AccessTokenTracker作为参考的示例:https://github.com/facebook/facebook-android-sdk/blob/b384c0655fe96db71229bfdcb981a522f3f1e675/samples/Scrumptious/src/com/facebook/scrumptious/usersettings/UserSettingsFragment.java#L75
答案 1 :(得分:1)
Android Facebook sdk初始化需要一些时间初始化。所以你需要在调用AccessToken.getCurrentAccessToken()
之前等待100毫秒尝试此解决方案后,它正在为我工作
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
FacebookSdk.sdkInitialize(context);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
callbackManager = CallbackManager.Factory.create();
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
if (!accessToken.isExpired()) {
}
}
}
}, 100);
}
答案 2 :(得分:0)
您是否从您的活动中调用了Facebook SDK的onActivityResult()
?
我也遇到了同样的问题,并通过添加此onActivityResult()
回调来解决。