Попытка проверить вход пользователя в систему существует в базе данных, но при первом запуске addListenerForSingleValueEvent
не срабатывает.
private void signInWithPhoneAuthCredentials(PhoneAuthCredential phoneAuthCredential) {
FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
//String dbUrl = "https://doctalk-f0b75-default-rtdb.europe-west1.firebasedatabase.app/";
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user!= null){
//final DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReferenceFromUrl(dbUrl).child("user").child(user.getUid());
final DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReference().child("user").child(user.getUid());
Log.v(TAG, mUserDB.toString());
mUserDB.addListenerForSingleValueEvent(new ValueEventListener() {
String path = mUserDB.getRef().toString();
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.exists()) {
Map<String, Object> userMap = new HashMap<>();
userMap.put("phone", user.getPhoneNumber());
userMap.put("name", user.getDisplayName());
mUserDB.updateChildren(userMap);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) { throw error.toException();}
});
mUserDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.exists()) {
Map<String, Object> userMap = new HashMap<>();
userMap.put("phone", user.getPhoneNumber());
userMap.put("name", user.getDisplayName());
mUserDB.updateChildren(userMap);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) { throw error.toException(); }
});
}
}
userIsLoggedIn();
}
});
}
Не мог понять почему...
ОБНОВЛЕНИЕ:
Я думаю, что есть что-то, связанное с местоположением и URL-адресом БД.
Я получаю URL-адрес БД = https://app-name-default-rtdb.firebaseio.com/
Где URL-адрес БД на консоли https://app-name-default-rtdb.europe-west1.firebasedatabase.app/
Как указано в документах Google:
Примечание. Чтобы получить ссылку на базу данных, отличную от dstabase по умолчанию us-central1, вы должны передать URL-адрес базы данных в getInstance() (или базу данных Kotlin+KTX()). Для базы данных us-central1 по умолчанию вы можете вызвать getInstance() (или базу данных) без аргументов.
Вы можете найти URL-адрес своей базы данных в реальном времени в разделе «База данных в реальном времени» консоли Firebase. Он будет иметь форму https://.firebaseio.com (для баз данных us-central1) или https://.firebasedatabase.app (для баз данных во всех других местах).
onCancelled
. Как минимум это должно бытьpublic void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }
. - person Frank van Puffelen   schedule 08.03.2021throw error.toException();
, но в логарифме ничего не печатается. При отладке кажется, что прослушиватели создаются, но пропускаются... Я не понимаю, почему пользователь создается вAuthentication
, но не вставляется в БД??? - person Jadeye   schedule 09.03.2021