Ich verwende die Firebase-Telefonauthentifizierung. Wenn ein Benutzer ein Konto unter Verwendung der Telefonnummer erstellt und das nächste Mal ein Konto mit derselben Telefonnummer erstellt Dann möchte ich eine Nachricht anzeigen, dass das Konto bereits existiert
Um festzustellen, ob diese Telefonnummer bereits für die Registrierung eines Kontos verwendet wurde , können Sie sich nicht nur auf die Standardauthentifizierungstabelle verlassen. Muss aber auch die Firebase-Datenbank verwenden, um eine Dummy-Benutzertabelle zum Prüfen zu erstellen .
Sie können beispielsweise einen JSON-Baum erstellen, um Benutzerdaten in der Echtzeitdatenbank in einer Struktur wie der folgenden zu speichern:
Und Ihr Code sollte ungefähr so aussehen:
Auf dem Code der erfolgreichen Anmeldung/Benutzerregistrierung:
DatabaseRef userRef = FirebaseDatabase.getInstance.getRef("users");
userRef.orderByChild("telNum").equalTo(phoneNumber).addListenerForSingleValueEvent(new ValueEventListener() {
if (dataSnapshot.getValue() != null){
//it means user already registered
//Add code to show your Prompt
showPrompt();
}else{
//It is new users
//write an entry to your user table
//writeUserEntryToDB();
}
}
onTask
Ergebnisprüfung FirebaseAuthUserCollisionException
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(Signup.this, "User already exist.", Toast.LENGTH_SHORT).show();
}
Ich habe dies in mein Projekt getan und es funktioniert perfekt. Sie können dies verwenden. Sie können statt "deviceId" Ihre Telefonnummer verwenden.
mFirebaseDatabaseRefrence.orderByChild("deviceId").equalTo(deviceId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
Log.d(TAG, "Datasnap Shots: " + dataSnapshot.getValue());
/* if alredy exist and check for first time, second time isExist=true*/
if (!isExist) {
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
UserbasicInfo user = userSnapshot.getValue(UserbasicInfo.class);
Toast.makeText(UserInfoActivity.this, "User already exist...!", Toast.LENGTH_SHORT).show();
}
}
isExist = true;
} else {
isExist = false;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
/*if not exist add data to firebase*/
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.d(TAG, "isExist: " + isExist);
if (!isExist) {
addDataToDB(false);
} else {
addDataToDB(true);
}
}
};
new Handler().postDelayed(runnable, 5000);
Für die Lösung
Geben Sie nach der Anmeldung einen Eintrag in der Datenbank ein, der den Benutzer identifiziert, damit Sie das nächste Mal die Benutzer identifizieren können, die sich bereits angemeldet haben.
Nach der OTP-Überprüfungsprüfung in der RealTime-Datenbank ist bereits eine Mobilnummer vorhanden, sodass ansonsten bereits eine Eingabe dieser bestimmten Mobilnummer erfolgt.
Ich habe diesen Weg gemacht. Firebase löst eine Ausnahme aus, wenn während der Authentifizierung einige Fehler aufgetreten sind, und andere ungültige Dinge, die wir nur behandeln und den Benutzer benachrichtigen müssen.
beispielcode:
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "signInWithCredential:success");
//do something on success
} else {
//handle the error here
showInfoToUser(task)
}
}
}
});
}
und prüfen Sie, welche Art von Fehlern wir erhalten, indem Sie hier Ausnahmen prüfen
private void showInfoToUser(Task<AuthResult> task) {
//here manage the exceptions and show relevant information to user
hideProgressDialog();
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
showSnackBar(getString(R.string.user_already_exist_msg));
} else if (task.getException() instanceof FirebaseAuthWeakPasswordException) {
showSnackBar(task.getException().getMessage());
} else if (task.getException() instanceOf FirebaseAuthInvalidCredentialsException){
//invalid phone /otp
showSnackBar(task.getException().getMessage());
}
else {
showSnackBar(getString(R.string.error_common));
}
}