Я создаю приложение реального времени, в котором один человек входит в приложение, и все подключенные пользователи этого сеанса получают уведомление или получают полезную нагрузку от того, что вводит человек.
Ниже приведен мой слушатель 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.
Спасибо!