Я использую Google Signin для своего проекта Android, и после успешной аутентификации с помощью firebase auth я добавляю записи пользователей с дополнительными полями по умолчанию в firestore.
Проблема в том, что когда один и тот же пользователь пытается снова войти в систему с тем же адресом электронной почты, в базу данных firestore добавляется новый документ того же пользователя (два документа с одинаковыми данными)
Мне нужен способзнать, если пользователь уже выполнил вход, так что я не буду добавлять новый документ в firestore
Я искал переполнение стека и нашел только решение для аутентификации, используя электронную почту и пароль.Решение использует:
authResultTask.getException () instanceof FirebaseAuthUserCollisionException
, который не работает для входа в Google
//google signin result intent
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RequestSignInCode){
GoogleSignInResult googleSignInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (googleSignInResult.isSuccess()){
Toast.makeText(WelcomeActivity.this,"Google Sign In result available ..."/* authCredential.getProvider()*/,
Toast.LENGTH_LONG).show();
GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount();
firebaseUserAuth(googleSignInAccount);
}
//else Toast.makeText(this, "falsa1", Toast.LENGTH_SHORT).show();
}
//else Toast.makeText(this, "falsa2", Toast.LENGTH_SHORT).show();
}
public void firebaseUserAuth(final GoogleSignInAccount googleSignInAccount) {
AuthCredential authCredential = GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null);
mAuth.signInWithCredential(authCredential)
.addOnCompleteListener(WelcomeActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task AuthResultTask) {
Log.d("auth", "AuthResultTask:Complete ");
if (AuthResultTask.isSuccessful()) {
Log.d("auth", "AuthResultTask successful");
String email = googleSignInAccount.getEmail();
Map<String, Object> userProperties = new HashMap<>();
userProperties.put("email", email);
userProperties.put("fullname", "");
userProperties.put("isActivated", false);
userProperties.put("has_rated", false);
userProperties.put("product_key", "");
userProperties.put("time_registered", new Date());
userProperties.put("total_referral_count", 0);
db.collection("users")
.add(userProperties)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
progressBar.setVisibility(View.GONE);
Log.d("doc_id", documentReference.getId());
Toast.makeText(WelcomeActivity.this, "Google Sign In successful...",
Toast.LENGTH_LONG).show();
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(DB_TAG, "Error adding document", e);
progressBar.setVisibility(View.GONE);
}
});
} else {
Log.d("auth", "Exception: " + AuthResultTask.getException().toString());
Toast.makeText(WelcomeActivity.this, "Something Went Wrong ...", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
}