Firebase数据库侦听器在经过身份验证后不会在一段时间后触发

时间:2017-09-17 14:48:51

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

我正在制作应用,但我遇到了Firebase数据库和身份验证服务的问题。

过了一段时间,当我通过身份验证(使用Firebase Auth)并使用我的应用程序时,我的数据库ValueEventListener似乎没有被调用,即使数据库中有 数据。

我如何添加我的听众:

FirebaseDatabase
        .getInstance()
        .getReference()
        .child("my_child")
        .addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                Log.d("App", "onDataChange");
            }

            @Override
            public void onCancelled(DatabaseError databaseError)
            {

            }
        });

我试过的东西:

  • 检查数据库规则(在重新读取后很好 - 但模拟读取即使在经过身份验证和未经身份验证的情况下也会通过)
  • 在DatabaseReferences上保持连续(true)
  • 在活动的onCreate中添加侦听器而不是应用程序onCreate
  • 添加/删除/更新数据库中的数据以触发同步
  • 重新启动

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

所以,显然问题是我的Google API信息中心没有启用名为“令牌服务”的API。
感谢来自Firebase支持的有用电子邮件(谢谢大家!),我通过调用D/PersistentConnection: pc_0 - Error fetching token: An internal error has occurred. [ �Token Service API has not been used in project <project-id> before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/securetoken.googleapis.com/overview?project=<project-id> then retry.启用了调试日志记录

瞧瞧:{{1}}

因此,通过启用API,它似乎修复了错误!

答案 1 :(得分:1)

创建对子数据库的引用,根据您的要求创建自定义Chat类(基本上是您在firebase中看到的)。 addChildEventListener应该为您提供my_child发生的所有更改。希望这会对你有所帮助。

&#13;
&#13;
mFirebaseRef = new Firebase("https://yourapp.firebaseio.com/").child("my_child");

/**
         * Firebase - Receives message
         */
        mFirebaseRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot != null && dataSnapshot.getValue() != null) {
                    try{

                        Chat model = dataSnapshot.getValue(Chat.class);


                        mChats.add(model);
                        mRecyclerView.scrollToPosition(mChats.size() - 1);
                        mAdapter.notifyItemInserted(mChats.size() - 1);
                    } catch (Exception ex) {
                        Log.e(TAG, ex.getMessage());
                    }
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
&#13;
&#13;
&#13;