Firebase:如果缺少或不同,如何更新数据? (例如用户注册)

时间:2016-05-15 15:27:51

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

这是一个非常基本的问题,我很惊讶Firebase指南不会覆盖它。在他们自己注册用户的例子中,代码似乎非常低效,除非有一些我不知道的内置优化。似乎每次登录时,您也会将用户数据推送到firebase。

ref.authWithPassword("jenny@example.com", "correcthorsebatterystaple",
    new Firebase.AuthResultHandler() {
    @Override
    public void onAuthenticated(AuthData authData) {
        // Authentication just completed successfully :)
        // irrelevant: some code to construct userData
        ref.child("users").child(authData.getUid()).setValue(userData);
    }
    @Override
    public void onAuthenticationError(FirebaseError error) {
        // Something went wrong :(
    }
});

1)如果用户已经存在于该位置并且我们试图保持的数据不同,则似乎没有检查。如何实现这一目标?您是否需要首先阅读字段,检查是否有不同然后尝试更新(在交易中所有这些)?

2)如果我关于(1),你会建议在本地存储一些指示性数据,以短路需要"检查"如果用户注册了firebase?我可以存储一个布尔+用户的本地副本,所以我可以(A)检查注册的布尔值,如果是,则(B)检查本地用户数据是否相同。如果两者都是真的,我可以完全跳过上面的步骤(1)。

显然,由于通常的复杂性成本,我想避免应用空间中的任何缓存逻辑。如果数据没有被更改,Firebase是否保证超快速本地查询(我在(1)中做了什么)?我希望尽可能避免额外的客户端逻辑。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可能会高估authWithPassword()的运行频率。在经过良好实施的Firebase应用中,您将使用onAuth()侦听器来检测用户之前何时已登录。因此,您只需在会话过期或无效时对其进行主动身份验证。< / p>

如果您只想在首次注册时编写用户的个人资料数据,则可以在拨打ref.createUser()时执行相同的逻辑。

要了解客户端数据是否相同,您首先必须阅读它。这会否定你不写的任何积极影响。