Я использую Firebase RealtimeDatabase в нашем многопользовательском режиме, как вы хотите.
Во-первых, вам нужен игрок, чтобы создать игру, это что-то вроде
roomDB = FirebaseDatabase.getInstance().reference.child("Rooms").child(roomNumber)
и затем установите значение ребенка.
А затем вам нужно, чтобы все в одной игровой комнате listen
изменили ссылку на базу данных.
Вы можете выбрать один из них:
roomDB.addChildEventListener(...)
чтобы выслушать изменения ребенка.
roomDB.addListenerForSingleValueEvent(...)
чтобы получить значение только один раз.
roomDB.addValueEventListener(...)
прослушивать его значение до .removeEventListener(...)
Я использую addValueEventListener
для синхронизации данных между игроками. Он имеет задержку около 0,5 ~ 1 сек. И не забудьте removeEventListener
, когда игра закончится.
В конце концов, к вашему сведению,
Возможно, вы захотите увидеть Transaction
класс Firebase. Это может обещать вам, игроки не будут записывать данные в одно и то же место в одно и то же время. Например: убедитесь, что в игре на 4 игрока не будет 5 игроков.
--- Обновление -
final DatabaseReference playersDB = FirebaseDatabase.getInstance().getReference()
.child("Rooms") // end here if you want to listen to all rooms
.child(roomId) // end here if you want to listen to THIS room
.child("Players"); // I end here because I only want players' data
playersDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot ds) {
// update UI here;
}
}