Firestore (Firebase) Как подсчитать общее количество активных / онлайн пользователей - PullRequest
0 голосов
/ 28 мая 2018

Я собираюсь создать приложение с некоторыми функциями ниже:

  • Нет необходимости зарегистрироваться или войти в систему, чтобы использовать приложение

  • Каждый деньМой администратор загрузит аудиофайл длиной 10 минут (или меньше) в бэкэнд и установит время, когда звук будет доступен для всех пользователей.Например: 10 утра

  • Количество активных / онлайн-пользователей будет в реальном времени .

Что я пробовал:

  • Каждый раз, когда пользователь открывает экран аудио, приложение будет использовать FirebaseAuth для входа в систему как анонимный.Когда пользователь покидает этот экран, используйте FirebaseAuth для выхода из системы.Но этот подход не работает, поскольку, когда пользователь выходит из системы, анонимный пользователь все еще находится в таблице Users

Мои вопросы:

  1. С этими функциямиМожно ли использовать Firebase / Firestore для реализации?

  2. Каков наилучший подход для подсчета общего числа активных пользователей?

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете использовать FirebaseAuth, чтобы записать значение в базу данных, если авторизация вернет, что кто-то использует приложение, напишите ссылку и продолжайте добавлять пользователей в нее.

Я имею в виду, если естьесли пользователь в сети, FirebaseAuth запишет ссылку на usersonline со значением 1, если другой пользователь присоединится, это будет usersonline + 1 и т. д., а затем вы можете прикрепить onChildEventListener и обновить в режиме реального временипользователи в сети с onChildChanged, поэтому каждый раз, когда дочерний элемент изменяется (увеличивается в зависимости от пользователей), он будет отображать пользователей в сети.

Чтобы уменьшить количество пользователей в сети, после того, как они выйдут из системы, а AuthListener будетбольше не видя вошедшего в систему пользователя, вы можете уменьшать значение только на 1 каждый раз, когда пользователь выходит из системы, поэтому, если пользователь выходит из системы, запускается AuthListener, и вы можете изменять своего ребенка с помощью usersonline - 1 каждый раз, когда это происходит.

Например, Firebase удается записать данные в базу данных, когда пользователь теряет соединение.

// Write a string when this client loses connection
presenceRef.onDisconnect().setValue("I disconnected!");

Вы можете проверить это в автономном режиме:

https://firebase.google.com/docs/database/android/offline-capabilities

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

Этот фрагмент этого документа действительно хорош для достижения того, что вы ищете

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      System.out.println("connected"); // tell your usersonline ref to increment by 1
    } else {
      System.out.println("not connected"); //then if the user is not longer connected just decrement your usersonline by 1
    }
  }

  @Override
  public void onCancelled(DatabaseError error) {
    System.err.println("Listener was cancelled");
  }
});

С точки зрения одновременных подключений, это для базы данных реального времени Firebase:

Предел плана Spark равен 100 и не может быть увеличен.Планы Flame и Blaze имеют ограничение в 100 000 одновременных подключений к базе данных.Если вам нужно более 100 000 одновременных подключений, обратитесь в службу поддержки Firebase.

https://firebase.google.com/docs/firestore/quotas для Firestore, 100k - это ограничение для одновременных подключений в данный момент, это только длябета период .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...