gpt4 book ai didi

java - Firebase 用户通过 Google 注册

转载 作者:行者123 更新时间:2023-12-02 10:36:21 30 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现谷歌登录功能。我已经关注了这个documentation ,问题是 - 如果我使用以前使用过的谷歌帐户,它不会显示“电子邮件已在此应用程序中注册”之类的错误。因此,该帐户之前存储的数据将被删除,并且 Google 帐户将被重新注册。这是我的代码:

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
int coins = 100;
String name, email;
name = user.getDisplayName();
email = user.getEmail();
//updateUI(user);
storeUserCredentials(name, email, coins);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(SignUpActivity.this, "Error : " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}

public void storeUserCredentials(String name, String email, int coins){
progressBar.setVisibility(View.VISIBLE);
User user = new User(name, email, coins);

mDatabase.getReference("Users")
.child(mAuth.getCurrentUser().getUid())
.setValue(user)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()){
Toast.makeText(SignUpActivity.this, "Registration Successful!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(SignUpActivity.this, MainActivity.class));
finish();
} else {
if (task.getException() instanceof FirebaseAuthUserCollisionException){
Toast.makeText(SignUpActivity.this, "The email is already used", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SignUpActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}

}
}
});
}

我的代码有什么问题,请解释一下。

最佳答案

当您调用 signInWithCredential 时,SDK 会返回一个在用户登录时成功完成的任务。由于您在此条件下调用 storeUserCredentials,因此每次都会调用该任务用户已登录。这实际上是一个非常正常的流程。

如果您想检测此帐户是否是 Firebase 身份验证的新帐户,您可以检查该用户的创建时间。请参阅Firebase Auth, how to know new user signed up, rather than existing user sign in?

如果您想检测之前是否已经见过该用户,则需要在调用storeUserCredentials 之前检查数据库。但您现在拥有的是一个非常惯用的流程,因为它可以确保您每次要求用户登录时存储最新的显示名称。

关于java - Firebase 用户通过 Google 注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53264133/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com