I use onDisconnect when user login, like this:
currentUser = mAuth.getCurrentUser();
if(currentUser != null)
{
String online_user_id = mAuth.getCurrentUser().getUid();
UserReference = FirebaseDatabase.getInstance().getReference()
.child("users").child(online_user_id);
UserReference.addValueEventListener((new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserReference.child("online").onDisconnect().setValue(false);
UserReference.child("online").setValue("true");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}));
}
online will set to "true" when:
- app run and user login
online will set to "false" when:
- user kill app
- user disconnect internet
the problem is when user logout, in firebase database child online always set to "true" as long as app running and internet connected... I want set online to false when user logout... please help me?
Update:
my logout code
I try 2 option
this option below make loop infinte when set online to "true" and "false"
mAuth = FirebaseAuth.getInstance();
UserReference = FirebaseDatabase.getInstance().getReference()
.child("users").child(online_user_id);
UserReference.addValueEventListener((new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserReference.child("online").onDisconnect().setValue(false);
UserReference.child("online").setValue("false");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}));
mAuth.signOut();
second option below this make database online set "true", and then back to "false" again
try {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child(cur).child("online").setValue("false");
Toast.makeText(MainActivity.this,"us: "+cur, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}