Android Facebook SDK 4 : check if user is already logged in

标签 android facebook facebook-android-sdk

我在使用新的 facebook sdk 时遇到了问题。在我的应用程序上,我使用了旧的 sdk,并且一切正常,但现在有些地方运行不正常。 我有一个登录 FragmentActivity,它检查用户过去是否已经登录,因此打开应用主体 Activity 。如果用户未登录, Activity 将显示带有登录选项的 fragment (其中一个选项是使用 facebook 登录)。 fragment 包含 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的代码。此 Activity 应检查用户是否已连接:

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,因此显示 fragment ,facebook 检测到用户已登录,并启动主要 Activity 。 如果用户已经登录,我如何直接从 FragmentActivity 检查?

最佳答案

您可以通过以下方式跟踪 token 是否已更改:`

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

然后使用以下方法更新当前 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();

        }
    }
}

调用 updateWithToken(AccessToken.getCurrentAccessToken()); sdk初始化后

关于Android Facebook SDK 4 : check if user is already logged in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29431685/

相关文章:

android - 从 Facebook android SDK 中的 native ShareDialog 发布照片

android - 如何在 Google map 标记的 fragment 中添加链接

android - 在显示 Activity 之前,如何在android中使用来自广播接收器的数据

facebook - 如何禁用 FB 按钮旁边的文本 "Be the first of your friends to like this"

android - Facebook Android SDK ProfilePictureView 缓存

android - Facebook 授权访问 token ?

android - 在清理项目时,R.java 从所有项目中消失

android - 如何拍摄surfaceview的快照?

facebook - FB JS SDK,有没有办法检测用户是否喜欢你的页面?

javascript - 为什么 fbevents.js 会加载到我的页面上?