安卓Facebook SDK 4:检查用户是否已经登录

3

我正在使用新版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直接检查用户是否已经登录?


1
尝试运行随SDK一起提供的HelloFacebook或Scrumptious示例应用程序。它们都使用getCurrentAccessToken来检查用户是否已经登录。除非您在某个时刻清除了令牌,否则不应该收到null。 - Ming Li
1个回答

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

        }
    }
}

在 SDK 初始化后调用 updateWithToken(AccessToken.getCurrentAccessToken())。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接