Android facebook sdk 4:检查用户是否已登录

时间:2015-04-03 11:51:57

标签: android facebook facebook-android-sdk

我通过使用新的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 个答案:

答案 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初始化之后