Есть ли стратегия, которая будет работать в рамках текущего предложения Firebase для обнаружения потери и/или восстановления соединения с сервером?
Я рассматриваю некоторые непредвиденные ситуации в автономном режиме для мобильных устройств, и мне хотелось бы иметь надежное средство для определения того, когда слой данных Firebase доступен.
Это часто запрашиваемая функция, и мы только что выпустили обновление API, которое позволит вам сделать это!
var firebaseRef = new Firebase('http://INSTANCE.firebaseio.com');
firebaseRef.child('.info/connected').on('value', function(connectedSnap) {
if (connectedSnap.val() === true) {
/* we're connected! */
} else {
/* we're disconnected! */
}
});
Полная документация доступна на https://firebase.google.com/docs/database/web/offline-capabilities.
Обновлено: Для многих функций, связанных с присутствием, клиенту полезно знать, когда он находится онлайн или оффлайн. Клиенты Firebase Realtime Database предоставляют специальное место по адресу /.info/connected, которое обновляется каждый раз, когда состояние соединения клиента меняется. Вот пример:
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");
} else {
System.out.println("not connected");
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
});
Полагаю, это изменилось за последние пару месяцев. В настоящее время инструкции находятся здесь: https://firebase.google.com/docs/database/web/offline-capabilities
Подводя итог:
var presenceRef = firebase.database().ref("disconnectmessage");
// Write a string when this client loses connection
presenceRef.onDisconnect().set("I disconnected!");
и:
var connectedRef = firebase.database().ref(".info/connected");
connectedRef.on("value", function(snap) {
if (snap.val() === true) {
alert("connected");
} else {
alert("not connected");
}
});
Признаюсь, я не очень хорошо знаю, как устанавливаются ссылки, или что это значит (вы создаете их из воздуха или должны уже создать их заранее?), или что из этого может вызвать что-то на сервере, а не что-то на front-end, но если ссылка все еще актуальна, когда вы читаете это, немного больше чтения может помочь.
Для Android вы можете сделать в автономном режиме пользователю всего лишь одну функцию под названием onDisconnect()
Я сделал это в одном из моих чат приложение, в котором пользователь должен получить автоматически в автономном режиме если сетевое подключение потеряно или пользователя отключен от Интернета
DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status");
presenceRef.onDisconnect().setValue(0);
На отключение от сети Здесь я делаю online_status
0 id пользователя которого составляет 24 в военнослужащих.
`getReference("по-пользователи/24/online_status и") - это путь к значение нужно обновление офлайн/онлайн.
Вы можете прочитать об этом в оффлайн функции
Обратите внимание, что военнослужащих нужно время около 2-10 минут, чтобы выполнить onDisconnect() функция.
Предложенное решение не't работа для меня, поэтому я решил проверить связь при письме и чтении 'здоровье/Регистрация' значение. Это код:
const config = {databaseURL: `https://${projectName.trim()}.firebaseio.com/`};
//if app was already initialised delete it
if (firebase.apps.length) {
await firebase.app().delete();
}
// initialise app
let cloud = firebase.initializeApp(config).database();
// checking connection with the app/database
let connectionRef = cloud.ref('health');
connectionRef.set('check')
.then(() => {
return connectionRef.once("value");
})
.then(async (snap) => {
if (snap.val() === 'check') {
// clear the check input
await connectionRef.remove();
// do smth here becasue it works
}
});
firebase.database().ref(".info/connected").on("value",(snap)=> {});