简体   繁体   English

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

[英]Android facebook sdk 4: check if user is already logged in

I'm facing a problem by using new facebook sdk. 我使用新的facebook sdk面临一个问题。 On my app, i've used old sdk, and everything works fine, but now something doesn't work well. 在我的应用程序上,我使用旧sdk,一切正常,但现在有些东西不能正常工作。 I have a login FragmentActivity that check if user was already logged in in the past, so open app principal activity. 我有一个登录FragmentActivity,检查用户是否已经登录过,所以打开应用程序主体活动。 If user is not logged in, activity show a fragment with login options (and one option is to log in with facebook). 如果用户未登录,则活动会显示带有登录选项的片段(并且一个选项是使用facebook登录)。 Fragment contains facebook login button, as described on documentation: 片段包含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);
}

and this is code of FragmentActivity. 这是FragmentActivity的代码。 This activity should check if user is already connected or not: 此活动应检查用户是否已连接:

FacebookSdk.sdkInitialize(this.getApplicationContext());
 AccessToken fb_token = AccessToken.getCurrentAccessToken();
if(fb_token != null) {
    //already connected, launch activity
} else {
    //show fragment with login button
}

Now, also if user logged in the past, when I call getCurrentAccessToken I obtain always null, so fragment is showed, facebook detect that user was logged in, and main activity is launched. 现在,如果用户登录过去,当我调用getCurrentAccessToken时,我总是获得null,因此显示片段,facebook检测到用户已登录,并且主要活动已启动。 How can I check directly from FragmentActivity if user was already logged in? 如果用户已经登录,我该如何直接从FragmentActivity进行检查?

You can track if token changed by following:` 您可以通过以下方式跟踪令牌是否已更改:`

accessTokenTracker=new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
                updateWithToken(currentAccessToken);
            }
        };`

then use following method to update the current token: 然后使用以下方法更新当前令牌:

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

        }
    }
}

call updateWithToken(AccessToken.getCurrentAccessToken()); 调用updateWithToken(AccessToken.getCurrentAccessToken()); after sdk initialization 在sdk初始化之后

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM