我正在使用新版Facebook SDK时遇到问题。在我的应用中,我使用了旧版本的SDK,一切都运行正常,但现在有些地方不太顺畅。
我有一个登录FragmentActivity,它会检查用户是否曾经登录过,如果是,则打开应用程序主要活动。如果用户没有登录,则该活动会显示一个带有登录选项的片段(其中一个选项是使用Facebook登录)。
片段包含Facebook登录按钮,如文档所述:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.choose_access_type, container,
false);
fb_button = (LoginButton) view.findViewById(R.id.fb_button);
fb_button.setFragment(this);
fb_button.setReadPermissions(Arrays.asList("public_profile",
"user_friends"));
LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
callbackManager = CallbackManager.Factory.create();
fb_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//launche main activity
}
@Override
public void onCancel() {
// App code TODO
Log.i("LOGINAFRAGMENT", "session cancel");
}
@Override
public void onError(FacebookException exception) {
// App code TODO
Log.i("LOGINAFRAGMENT", "session error");
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
这是 FragmentActivity 的代码。此活动应检查用户是否已连接:
FacebookSdk.sdkInitialize(this.getApplicationContext());
AccessToken fb_token = AccessToken.getCurrentAccessToken();
if(fb_token != null) {
//already connected, launch activity
} else {
//show fragment with login button
}
现在,即使用户过去曾登录,当我调用getCurrentAccessToken时,我始终获得null,因此片段被显示,Facebook检测到用户已登录,并启动主活动。如何从FragmentActivity直接检查用户是否已经登录?