Событие Firebase child_changed пропускается случайным образом, если вкладка браузера не используется - PullRequest
0 голосов
/ 05 декабря 2018

Я создаю приложение реального времени, в котором один человек входит в приложение, и все подключенные пользователи этого сеанса получают уведомление или получают полезную нагрузку от того, что вводит человек.

Ниже приведен мой слушатель firebase child_changed, которыйкаждое устройство слушает:

firebase.database().ref().child('collection')
    .orderByChild('sessionId')
    .equalTo('123') //unique id
    .on('child_changed', function (snapshot) {
    //some processing                 
});

Всякий раз, когда человек входит в приложение, я обновляю вышеуказанный документ / коллекцию Firebase следующим образом:

var newObject = {},
        fbId = 'Kh8nyd9C1FGeBx229ogyr';// unique id of document to be updated

newObject[fbId] = {
    'sessionId': '123',
    'payLoad': JSON.stringify(payLoad), //different payload to send to each device which is listening to collection and this session
    'lastUpdated': new Date().getTime() //adding unique time so child_changed should trigger
};

firebase.database().ref().child('collection').update(newObject);

//rules

"rules": {
    "$uid": {
        "collection": {
            ".read": "auth.uid == $uid",
                ".write": "auth.uid == $uid",
                    ".indexOn": ["sessionlId"]
        }  
    }
}

//data

{
  "Azublidegytttsbmnmnmnm": { //uid
    "collection": {
      "Kh8nyd9C1FGeBx229ogyr": {
        "sessionId": 123,
        "payLoad": {Id: '11', Name: 'John Doe'},
        "lastUpdated": 1543875382963 
      }
    }  
  }
}

Приведенный выше код работает в большинстве случаев, но пропускаетсобытия, если вкладка браузера некоторое время простаивает, а затем перестает получать это событие или не может вызвать событие child_changed, если входящий человек вошел, а вкладка другого подключенного пользователя свободна.Я обновляю код подключения браузера firebase, обновляется, и теперь все работает правильно.

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

Моя библиотека Firebase версии 3.5.3.

Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Обновлен мой firebase 3.5.3 до последней версии.И я начал связывать событие непосредственно на узле вместо прослушивания всей коллекции json (слушал в корне).

СТАРЫЙ КОД:

firebase.database().ref().child('collection')
    .orderByChild('sessionId')
    .equalTo('123') //unique id
    .on('child_changed', function (snapshot) {
    //some processing                 
});

НОВЫЙ КОД:

firebase.database().ref().child('collection/Kh8nyd9C1FGeBx229ogyr') //Kh8nyd9C1FGeBx229ogyr here is firebase generated node and its unique id
    .on('child_changed', function (snapshot) {
    //some processing                 
});

PS Попробуйте прослушать самый низкий уровень, чтобы получить событие child_changed.Из поддержки Firebase

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