Firebase:如何在注销期间使用 onDisconnect?

rcp*_*p51 -1 node.js angularjs firebase

我如何检测用户何时退出 firebase(facebook、google 或密码)并触发 firebase 存在系统中的 onDisconnect 方法。.unauth() 不起作用。我想在用户登录和退出时显示他们的在线和离线状态,最小化应用程序(空闲) - 而不仅仅是在关闭设备电源并从设备上的活动应用程序中删除应用程序时。

我正在为 angularjs/angularfire 使用 firebase 简单登录

我在 firebase 站点上使用基于本教程的代码。 https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html

请我需要帮助!存在代码:

var connectedRef = new Firebase(fb_connections);
var presenceRef = new Firebase(fb_url + 'presence/');
var presenceUserRef = new Firebase(fb_url + 'presence/'+ userID + '/status');
var currentUserPresenceRef =  new Firebase(fb_url + 'users/'+ userID + '/status');

connectedRef.on("value", function(isOnline) {
    if (isOnline.val()) {
      // If we lose our internet connection, we want ourselves removed from the list.
      presenceUserRef.onDisconnect().remove();
      currentUserPresenceRef.onDisconnect().set("<span class='balanced'>?</span>");
      // Set our initial online status.
      presenceUserRef.set("<span class='balanced'>?</span>");
      currentUserPresenceRef.set("<span class='balanced'>?</span>");
    }

  });
Run Code Online (Sandbox Code Playgroud)

登出功能:

var ref = new Firebase(fb_url);
var usersRef = ref.child('users');
service.logout = function(loginData) {
    ref.unauth();
    //Firebase.goOffline();  //not working
    loggedIn = false;
    seedUser = {};
    clearLoginFromStorage();
    saveLoginToStorage();
    auth.logout();


};
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

onDisconnect()当与客户端的连接丢失时,您提供的代码将在 Firebase 服务器上自动运行。要强制客户端断开连接,您可以调用Firebase.goOffline().

请注意,调用unauth()只会让用户从 Firebase 连接中注销。它不会断开连接,因为可能有用户仍然可以访问的数据。

更新

这对我有用:

var fb_url = 'https://yours.firebaseio.com/';
var ref = new Firebase(fb_url);

function connect() {
  Firebase.goOnline();
  ref.authAnonymously(function(error, authData) {
    if (!error) {
      ref.child(authData.uid).set(true);
      ref.child(authData.uid).onDisconnect().remove();
    }
  });
  setTimeout(disconnect, 5000);
}

function disconnect() {
  ref.unauth();
  Firebase.goOffline();
  setTimeout(connect, 5000);
}

connect();
Run Code Online (Sandbox Code Playgroud)