facebook的LoginButton

时间:2016-04-09 07:05:26

标签: android facebook login facebook-login

我正在使用facebook widget的LoginButton来登录facebook。

   mLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

             LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends"));
            }
        });

我有两个问题 -

1.当我点击登录按钮时,Facebook登录对话框会打开两次。所以在我提供用户电子邮件和密码后第一次登录后,它会显示另一个登录对话框,我必须关闭它。

2.登录后移动到下一个屏幕,如果我回到登录界面,它会在登录按钮中显示退出文本,这是理想的。但是当我点击它时,它会打开登录和注销对话框。理想上它应该只打开注销对话框。如果用户已经登录,我该如何阻止执行LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends"));

以下是我正在使用的代码

public class MainActivity extends AppCompatActivity {
private LoginButton mLoginButton;
    CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        callbackManager = CallbackManager.Factory.create();
//        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);
        mLoginButton = (LoginButton) findViewById(R.id.login_button);

        mLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AccessToken accessToken = AccessToken.getCurrentAccessToken();
if(accessToken==null) {
    LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));

}
            }
        });
        mLoginButton.registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {

                    }
                    @Override
                    public void onCancel() {
                    }
                    @Override
                    public void onError(FacebookException exception) {
                    }
                });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

1 个答案:

答案 0 :(得分:0)

在loginButton上删除setOnClickListener,在Login Button上只注册RegisterCallBack,它将处理所有这些,你不需要setOnClickListener用于loginButton。它被调用两次,因为你已经设置了setOnClickListener和registerCalBack。

CallbackManager callbackManager = CallbackManager.Factory.create();

loginButton = (LoginButton) findViewById(R.id.fbLogin);
loginButton.setReadPermissions(Arrays.asList("user_status,public_profile,user_friends,email,user_birthday"));
loginButton.registerCallback(callbackManager, new    FacebookCallback<LoginResult>() {
     @Override
     public void onSuccess(final LoginResult loginResult) {

     }

     @Override
     public void onCancel() {

      }

     @Override
      public void onError(FacebookException error) {

      }
     });

您可以通过

检查用户是否已登录
AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if (accessToken != null) {
        }
        return accessToken != null;