Android facebook的登录按钮
我正在使用facebook小部件的LoginButton通过facebook登录Android facebook的登录按钮,android,facebook,login,facebook-login,Android,Facebook,Login,Facebook Login,我正在使用facebook小部件的LoginButton通过facebook登录 mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LoginManager.getInstance().logInWithReadPermissions(MainActivity.th
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);
}
}
public类MainActivity扩展了AppCompatActivity{
私人登录按钮mLoginButton;
CallbackManager CallbackManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
callbackManager=callbackManager.Factory.create();
//Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
//设置支持操作栏(工具栏);
mLoginButton=(LoginButton)findviewbyd(R.id.login_按钮);
mLoginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AccessToken AccessToken=AccessToken.getCurrentAccessToken();
if(accessToken==null){
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this、Arrays.asList(“public\u profile”、“user\u friends”);
}
}
});
mLoginButton.registerCallback(回调管理器,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常){
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
在登录按钮上删除setOnClickListener,只需在登录按钮上注册Callback,它就能处理所有问题,登录按钮不需要setOnClickListener。它会被调用两次,因为您同时设置了setOnClickListener和RegisterCallBack
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) {
}
});
你能检查一个错误,它没有被调用吗?它正在被调用。问题是当我点击登录按钮时,facebook登录对话框会打开两次。因此,在我提供用户电子邮件和密码后首次登录后,它会显示另一个登录对话框,我必须关闭该对话框。另一个问题是我应该如何阻止LoginManager.getI如果用户已登录并单击注销按钮,则不会执行nstance().LOGINWITHREADPERCESSIONS(MainActivity.this,Arrays.asList(“public_profile”,“user_friends”);如果用户已登录并单击注销按钮,则不会执行该命令
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
}
return accessToken != null;