使用Firebase跟踪用户的在线/离线状态

时间:2016-11-26 16:48:53

标签: android firebase firebase-realtime-database

我一直在考虑这样做的方法但到目前为止还找不到方法。我希望我的用户能够在许多社交网络中看到彼此在线/离线状态。例如,每个用户的布尔值。 True表示在线,false表示离线。但是什么时候我将该布尔值设置为false?用户关闭应用程序的那一刻似乎是一个很好的时刻,但从我的研究来看,无法保证知道应用程序是否被杀死。

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

通过在线和离线说,我的意思是如果用户当时正在使用该应用程序。

2 个答案:

答案 0 :(得分:0)

Firebase通过特殊的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); } }); 路径

提供了一种方便的方法
@Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setViewClass(JstlView.class);
        internalResourceViewResolver.setSuffix(".jsp");

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

        if(request.getHeader("User-Agent").contains("Internet Explorer")){
                    internalResourceViewResolver.setPrefix("/WEB-INF/views/legacy/");
        } else {
                    internalResourceViewResolver.setPrefix("/WEB-INF/views/modern/");
        }
        return internalResourceViewResolver;
    }

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

答案 1 :(得分:-1)

您可以为互联网连接设置监听器。比如检查互联网是否连接。如果没有连接,则将布尔值设置为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
    }