2

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

var firebaseRef = new Firebase(FIREBAE_URL); 
firebaseRef.child('.info/connected').on('value', function(connectedSnap) { 
    if (connectedSnap.val() === true) { 
    console.log("connected"); 
    } else { 
    console.log("not connected"); 
    setTimeout(function(){ 
     $ionicPopup.show({ 
     title: 'Network is either down or poor wifi', 
     template: 'Either pay for some wifi or go to a cafe', 
     buttons: [{ 
      text: '<b>ok</b>', 
      type: 'button-positive' 
     }] 
     }); 
    }, 8000) 

    } 
}); 

ответ

2

Когда вы впервые создаете клиента Firebase, он начинает строить соединение с сервером. Это может занять некоторое время. Пока соединение не будет полностью установлено, клиент не подключен. Для него огни false значение в .info/connected.

Показывать модальный диалог, когда пользователь теряет соединение, вероятно, плохой пользовательский интерфейс. Сетевые подключения на мобильных устройствах неожиданно исчезают, и Firebase легко защищает пользователя от кратковременных перерывов. Показ модального диалога похож на крик: «ВЫ ОНЛАЙН, МЫ ВСЕ СДЕЛАЕМ, У ВАС НЕТ ИНТЕРНЕТ» в их лице. Вряд ли приятный опыт.

Более типичное использование .info/connected - это показать менее навязчивый индикатор, например значок небольшого состояния. В качестве альтернативы вы можете показать модальность, если пользователь был отключен в течение определенного периода времени.

+2

Да, но как избежать первого ложного обратного вызова? – iOSGeek

0

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

var wasPreviouslyConnected = false; 
firebaseRef.child('.info/connected').on('value', function(connectedSnap) { 
    if (connectedSnap.val() === true) { 
    wasPreviouslyConnected = true; 
    console.log("connected"); 
    } 
    else if (wasPreviouslyConnected) { 
    console.log("disconnected") 
    } 
    else { 
    console.log("initial false connected snapshot while data is still loading"); 
    } 
});