【问题标题】:My firebase connection test fires connected and disconnected我的 Firebase 连接测试触发连接和断开连接
【发布时间】:2016-05-02 00:42:46
【问题描述】:

我正在使用 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)

  }
});

【问题讨论】:

    标签: angularjs ionic-framework firebase firebase-authentication


    【解决方案1】:

    当您首次创建 Firebase 客户端时,它会开始建立与服务器的连接。这可能需要一些时间。在连接完全建立之前,客户端不会连接。它会在.info/connected 中触发false 值。

    每当用户失去连接时显示模式对话框可能是一种糟糕的用户体验。移动设备上的网络连接出人意料地定期下降,而 Firebase 可以毫不费力地保护用户免受短暂中断的影响。显示模态对话框就像在他们面前尖叫“你离线,我们都注定了,你没有互联网”。几乎不是一次愉快的经历。

    .info/connected 的更典型用法是显示不那么突兀的指示符,例如小的状态图标。或者,如果用户已离线一段时间,您可以显示模式。

    【讨论】:

      【解决方案2】:

      我没有足够的声誉来回复您询问如何避免第一个错误事件的评论,我不确定您是否仍然想要回答这个问题,但是像这样简单的事情应该可以解决问题:

      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");
        }
      });
      

      【讨论】:

        猜你喜欢
        • 2012-05-18
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 2012-11-08
        • 1970-01-01
        • 2018-01-28
        相关资源
        最近更新 更多