我通过使用新的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进行检查?
答案 0 :(得分:0)
您可以通过以下方式跟踪令牌是否已更改:`
accessTokenTracker=new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
updateWithToken(currentAccessToken);
}
};`
然后使用以下方法更新当前令牌:
private void updateWithToken(final AccessToken currentAccessToken) {
//start next activity if user is already logged in
// Intent i = new Intent(MainActivity.this,ProfilePictureActivity.class);
startActivity(i);
finish();
} else {
// redirect to login activity
Intent i = new Intent(MainActivity.this, login.class);
startActivity(i);
finish();
}
}
}
调用updateWithToken(AccessToken.getCurrentAccessToken());在sdk初始化之后