Firebase单值事件监听器未返回结果

4
我已经成功地在我的应用程序中使用Firebase了几个月。我刚刚更新到了9.0.0版本,但仍有一个问题困扰着我。
在我的MainActivity的onCreate函数中,我检查用户是否已登录Firebase。如果用户已登录,则尝试获取我在数据库中拥有的用户对象。
这是应用程序中唯一出现问题的地方。我已经验证了用户已经登录,并且DatabaseReference指向正确的URL。
DatabaseReference已创建,并添加了监听器,但监听器上没有任何响应...
    FirebaseAuth auth = FirebaseAuth.getInstance();

    if (auth != null && auth.getCurrentUser() != null) {
        DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child(USERS).child(auth.getCurrentUser().getUid());
        userRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Logic for success is here...
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                // Logic for failure is here...
            }
        });
    }

你对我做错了什么有什么想法吗?


它是否会进入那个if块?你有跟踪调试吗? - muratgu
是的。我逐步调试并添加了日志语句。它进入了if语句,创建了DatabaseRef,但监听器从未触发。 - Eagle11
你使用了什么类型的身份验证?似乎存在自定义身份验证的问题... - Ymmanuel
2个回答

4

您的项目配置存在问题,导致Firebase Auth令牌无法正确刷新。您需要在Firebase控制台中为您的应用程序添加SHA-1指纹。

进入Firebase控制台中项目的概览页面。选择有问题的应用程序的设置溢出菜单,然后单击“管理”。会有一个按钮来添加SHA-1值。

您可以按照此指南中的步骤获取应用程序的SHA-1值。您可能需要重新下载并将google-services.json文件再次添加到Android Studio中的应用程序中,但我没有这样做。

如果需要更多详细信息,请参阅Firebase团队成员回答的类似stackoverflow问题


0

如果您未通过任何方式对用户进行身份验证,则需要更改规则:

{
    "rules": {
        ".read": "auth == null",
        ".write": "auth == null"  
    }
}

为确保访问数据库时不需要身份验证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接