【发布时间】:2018-12-17 17:34:24
【问题描述】:
我是 android 的新手,我使用 Firebase 创建了一个简单的登录方法,其中包括使用电子邮件、Facebook 和 google 登录。我创建了波纹管退出功能。但是当我单击注销方法时,第二次它不要求对 facebook 和 google 进行身份验证。有谁能够帮助我!如果有任何问题请不要惊慌,我对此很陌生。
private void OnClickSignOut(){
sign_out_btn =(Button)findViewById(R.id.logout_btn);
finish();
//startActivity(new Intent(ProfileActivity.this,MainActivity.class));
sign_out_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) {
if (user.getProviderId().equals("facebook.com")) {
System.out.println("User is signed in with Facebook");
LoginManager.getInstance().logOut();
startActivity(new Intent(ProfileActivity.this,MainActivity.class));
}
else if(user.getProviderId().equals("google.com")){
mGoogleSignInClient.signOut().addOnCompleteListener(ProfileActivity.this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
startActivity(new Intent(ProfileActivity.this,MainActivity.class));
}
});
}
else{
startActivity(new Intent(ProfileActivity.this,MainActivity.class));
}
}
}
});
}
【问题讨论】:
-
在设置 onClick 监听器之前有一个
finish()语句。侦听器中的代码是否正在执行? -
@TheGamer007 感谢您的指出。我在每个 startActivity 命令之后移动了完成。但是 getProviderData() 返回 null 并且应用程序正在崩溃。我该如何处理?
-
您能发布确切的错误日志吗?
getProviderData通常返回一个空列表而不是nullAFAIK。也许getCurrentUser是返回null的那个? -
@TheGamer007 谢谢!你怀疑它是正确的。 getCurrentUser 返回 null。这是因为在第一条语句本身中我退出了用户,然后我正在检查当前用户。我现在有另一个问题,我可以正确地检查用户是否使用 facebook 登录,但是如果用户使用 google 帐户登录,我无法检查相同的问题。你能帮我解决这个问题吗?
-
根据文档,Google 的提供商 ID 确实是“google.com”。请检查是否正在输入该代码块(通过放置断点或日志语句)。还要检查
if-else块之前getProviderId的输出,以便我们手动验证。
标签: android firebase firebase-authentication google-authentication