Firebase подсчет пользователей онлайн и обновление в глобальном счетчике - PullRequest
0 голосов
/ 10 июня 2018

Я хочу посчитать онлайн-пользователей в firebase и сохранить значение в firebase в online_users, когда пользователь подключается к приложению, чтобы увеличивать online_users, и когда пользователь отключается от приложения, уменьшая его.Я создаю функцию firebase

export const countOnlineUser = functions.database
.ref('/UserStatus/{uid}')
.onWrite((change, context) => {
    var collectionRef = change.after.ref.parent;
    var countRef = collectionRef.child('online_users');

    let increment = 0;
    if (change.after.exists() && !change.before.exists()) {
        increment = 1;
    } else if (!change.after.exists() && change.before.exists()) {
        increment = -1;
    } else {
        return null;
    }

    // Return the promise from countRef.transaction() so our function
    // waits for this async event to complete before it exits.
    return countRef.transaction((current) => {
         console.log(current)
        if (current == null) {
            return 0;
        }
        else {
            return (current || 0) + increment;
        }

        }).then(() => {
            return console.log('Counter updated.');
        });

});

клиент на стороне клиента обновляет каждый раз, когда пользователь подключается к приложению

constructor() {
        firebase.auth().onAuthStateChanged((user) => {
            if (user) {
                const { uid, phoneNumber } = firebase.auth().currentUser._user
                 UserStore.setUID(uid)
                 this.setListenConnection()

            }

        })


    setListenConnection = async () => {

        this.userStatusDatabaseRef = firebaseRef(`UserStatus/${UserStore.user.uid}`)

        firebaseRef('.info/connected').on('value', async connected => {
            if (connected.val() === false) {
                return
            }

            await firebaseRef(`UserStatus/${UserStore.user.uid}`).onDisconnect().remove()
            this.userStatusDatabaseRef.set({ state: 'online', last_changed: firebase.firestore.FieldValue.serverTimestamp() }, { merge: true })
        })
    }

enter image description here

У меня естьНекоторые проблемы с этими функциями иногда отрицательны, и я хочу предотвратить это.иногда я получаю в транзакции текущий ноль.

Как я могу это исправить?

1 Ответ

0 голосов
/ 11 июня 2018

Мониторинг производительности предоставляет сеансы или текущих пользователей, но, по-видимому, только для мобильных приложений (ios / android).

Google Analytics для сбора данных Firebase Тип информациисобранный через Google Analytics для Firebase

реализация по умолчанию включает в себя:

  • Количество пользователей и сеансов
  • Продолжительность сеанса
  • Операционные системы
  • Модели устройств
  • География
  • Первые запуски
  • Открывается приложение
  • Обновления приложения
  • Покупки внутри приложения

Что касается облачных функций, ознакомьтесь с Запись и просмотр журналов .Если это выполнимо, это будет API.

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