** ИЗМЕНЕНО **

Мне нужна помощь с Firebase. Что мне нужно сделать:

  1. Создайте новую ссылку на базу данных с именем Токены (в соответствии с клиентами и сотрудниками) в разделе «Токены»;
  2. Создайте еще одну новую ссылку на базу данных на основе дочернего элемента текущего пользователя (например, плотников, сантехников или электриков)

Текущий код:

    FirebaseDatabase db = FirebaseDatabase.getInstance();

    DatabaseReference tokens = db.getReference(Common.token_table);

    Token token = new Token(FirebaseInstanceId.getInstance().getToken());
    //if user is already logged in, will update token
    tokens.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
            .setValue(token);

Текущая база данных

Мне нужно, чтобы это было так:

См. Изображение

Обновленный снимок экрана

2
ayabbear 15 Мар 2018 в 14:11

1 ответ

Лучший ответ

Чтобы решить эту проблему, вам нужно получить uid аутентифицированного пользователя следующим образом:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

Имея этот uid, вы можете использовать его везде, где вам нужно, во время вашей деятельности. Итак, чтобы добавить tokenId в соответствии со структурой вашей базы данных, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String tokenId = FirebaseInstanceId.getInstance().getToken();
rootRef.child("Tokens").child("Carpenters").child(tokenId).setValue(true);

И ваша структура базы данных будет выглядеть так:

Firebase-root
    |
    --- Tokens
          |
          --- Carpenters
                  |
                  --- "uid1": true

В соответствии с вашими изменениями используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
String tokenId = FirebaseInstanceId.getInstance().getToken();
rootRef.child("Tokens").child("Plumbers").child(uid).child("token").setValue(tokenId);

enter image description here

Окончательный ответ:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
String tokenId = FirebaseInstanceId.getInstance().getToken();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference workersRef = rootRef.child("Workers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            if (ds.child(uid).exists()) {
                rootRef.child("Tokens").child(ds.getKey()).child(uid).child("token").setValue(tokenId);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
workersRef.addListenerForSingleValueEvent(valueEventListener);
2
Alex Mamo 15 Мар 2018 в 16:47