Android中的Firebase:用户退出时禁用onDisconnect

时间:2017-12-25 09:03:23

标签: android firebase firebase-realtime-database firebase-authentication

我在用户登录时使用onDisconnect,如下所示:

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) {

            }
        }));
    }

在线将设置为" true"当:

  • app run和用户登录

在线将设置为" false"当:

  • 用户杀死应用
  • 用户断开互联网

问题是当用户注销时,在firebase数据库中,子项在线总是设置为" true"只要app运行和互联网连接... 我想在用户退出时将在线设置为false ...请帮帮我?

更新: 我的退出代码
我试试2选项
这个选项在下面设置循环infinte,在线设置为" true"和"假"

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

这下面的第二个选项使数据库在线设置" true",然后回到" false"再次

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 个答案:

答案 0 :(得分:0)

这对您有帮助吗?

在您退出FirebaseAuth之前,请写以下行:

FirebaseDatabase.getInstance()。goOffline();

参考此答案: Disconnect programmatically from firebase

我还建议检查有关“管理状态”的文档: https://firebase.google.com/docs/database/android/offline-capabilities?hl=en