如何检测用户何时退出firebase(facebook,google或password)并触发firebase在线系统中的onDisconnect方法。 .unauth()不起作用。我想在用户登录和退出时显示用户的在线和离线状态,最小化应用程序(空闲) - 不仅仅是关闭设备电源并从设备上的活动应用程序中删除应用程序。
我使用firebase简单登录angularjs / angularfire
我在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>");
}
});
退出功能:
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();
};
答案 0 :(得分:3)
当您与客户端的连接丢失时,您提供的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();