【问题标题】:Tracking user's online/offline state with Firebase使用 Firebase 跟踪用户的在线/离线状态
【发布时间】:2016-11-26 16:48:53
【问题描述】:

我一直在想办法做到这一点,但到目前为止找不到办法。我希望我的用户能够看到彼此的在线/离线状态,就像在许多社交网络中一样。例如,每个用户的布尔值。 true 表示在线,false 表示离线。但是我什么时候将该布尔值设置为false?用户关闭应用程序的那一刻似乎是个好时机,但根据我的研究,无法保证知道应用程序是否被终止。

那么,你们将如何使用 Firebase 或您自己的服务器或其他任何方式跟踪用户的在线状态。我很好奇

我所说的在线和离线,是指用户当时是否正在使用该应用程序。

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 通过特殊的.info/connected 路径提供了一种便捷的方法

var amOnline = new Firebase('https://<demo>.firebaseio.com/.info/connected');
var userRef = new Firebase('https://<demo>.firebaseio.com/presence/' + userid);
amOnline.on('value', function(snapshot) {
  if (snapshot.val()) {
    // User is online.
    userRef.set(true);
  } else {
    // User is offline.
    // WARNING: This won't work! See an explanation below.
    userRef.set(false);
  }
});

这是关于跟踪用户状态的一个很好的解释。 https://firebase.googleblog.com/2013/06/how-to-build-presence-system.html

【讨论】:

    【解决方案2】:

    您可以为互联网连接设置监听器。比如检查互联网是否连接。如果未连接,则将布尔值设置为 false,如果已连接互联网,则布尔值将为 true。看看代码:

    ConnectivityManager cm =(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    
        if(isConnected)   
        {
            // set your boolean to true
        }
        if(!isConnected) 
        {
            // set your boolean to false here
        }
    

    【讨论】:

    • 您可以选择服务。
    • @Jack 你确定这段代码符合问题吗?
    • @Javacoder 该代码不是问题的 100% 解决方案,但它可以完成大部分工作,例如用户关闭互联网然后将布尔值设置为 false。完整的答案将包括服务,就像他需要在服务中设置一种侦听器以检查应用程序是否仍在 android 进程中运行。如果应用程序像往常一样通过向上滑动最近的应用程序关闭,则再次在此处设置布尔值 false。所以,我在活动部分帮助了他。
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2012-11-16
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多