要实现Android Facebook登录,并防止按钮变为“退出登录”,可以按照以下步骤进行操作:
implementation 'com.facebook.android:facebook-android-sdk:5.15.3'
...
...
...
Your Facebook App ID
fbYourFacebookAppID
...
activity_main.xml:
MainActivity.java:
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
public class MainActivity extends AppCompatActivity {
private CallbackManager callbackManager;
private LoginButton loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callbackManager = CallbackManager.Factory.create();
loginButton = findViewById(R.id.login_button);
loginButton.registerCallback(callbackManager, new FacebookCallback() {
@Override
public void onSuccess(LoginResult loginResult) {
// 隐藏按钮
loginButton.setVisibility(View.GONE);
// 进行其他操作,如获取用户信息等
// ...
}
@Override
public void onCancel() {
// 登录被取消,可根据需要进行处理
}
@Override
public void onError(FacebookException error) {
// 登录出错,可根据需要进行处理
}
});
// 检查用户是否已登录,如果已登录则隐藏登录按钮
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {
loginButton.setVisibility(View.GONE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
// 退出登录
private void logout() {
LoginManager.getInstance().logOut();
loginButton.setVisibility(View.VISIBLE);
}
}
在上述代码中,当用户成功登录后,我们通过设置按钮的可见性为GONE来隐藏按钮。在onCreate方法中,我们还检查用户是否已登录,如果是,则隐藏按钮。
同时,我们提供了一个logout方法,用于实现退出登录的操作。当用户点击退出登录时,调用此方法,该方法会将按钮的可见性设置为VISIBLE,以便用户可以再次登录。
请注意,以上代码只是示例,你需要根据自己的需求进行适当的修改和调整。