1

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();
        }

1 Answers1

0

Will this help you?

Write this line just before you sign out from FirebaseAuth:

FirebaseDatabase.getInstance().goOffline();

Reference to this answer: Disconnect programmatically from firebase

Also I suggest to check the documentation on Managing Presence: https://firebase.google.com/docs/database/android/offline-capabilities?hl=en

Jaun
  • 9
  • 3