Firebase 匿名身份验证在应用升级时丢失

Ant*_*ard 4 android firebase firebase-authentication

这就是我在匿名身份验证支持的 Android 应用程序中处理身份验证的方法。

public class StartupActivity extends AppCompatActivity {
    FirebaseAuth.AuthStateListener mAuthListener;
    @Override
    protected void onStart() {
        super.onStart();
        FirebaseAuth.getInstance().addAuthStateListener(mAuthListener = firebaseAuth -> {
            if (firebaseAuth.getCurrentUser() != null) {
                LoggedInActivity.newInstance(this);
            } else {
                IntroActivity.newInstance(this);
            }
        });
    }

    @Override
    protected void onStop() {
        FirebaseAuth.getInstance().removeAuthStateListener(mAuthListener);
        super.onStop();
    }
}
Run Code Online (Sandbox Code Playgroud)

StartupActivity是我在我的应用程序的主要启动器活动中定义的活动AndroidManifest.xml

该模式运行良好:在 的末尾IntroActivity,我的代码对用户进行匿名身份验证并将其发送到LoggedInActivity. 此后每次启动,匿名身份验证都会持续进行,并且用户会直接转到LoggedInActivity

然而,一些用户报告丢失了他们的匿名身份验证并实际上丢失了他们的数据,因为我的其他内部应用程序屏幕是从与用户 UID 相对应的 Firebase 节点驱动的。

这非常糟糕,但似乎只发生在少数用户身上。并且仅适用于匿名身份验证 - 如果发生在电子邮件身份验证中,那甚至不是什么大问题,因为用户可以重新登录。但对于匿名身份验证,这是一个相当大的问题。用户将失去一切。

该问题可能与 Firebase SDK 更新或应用程序更新有关 - 这似乎是我的用户最常发生/报告最多的情况。

为什么会发生这种情况?这对于身份验证来说是一个不好的模式吗?我喜欢使用匿名身份验证的概念,让用户无需登录即可使用您的应用程序,我相信这也是 Firebase 的意图。这几乎就像我需要给他们提供通过实际登录来支持他们的帐户的选项,因为这个错误有如此糟糕的影响。

小智 6

我相信我自己能够重现这个问题。

在收到用户发来的愤怒邮件后,我测试了如果我更新应用程序(为了更好的措施而提高版本代码)并尝试在我的设备离线时打开它会发生什么。结果 Firebase 将我注销,因为我相信它可能认为数据库的内部副本已过时并将其完全擦除,因此它基本上相当于没有凭据的重新安装。在线更新并打开应用程序后,不会发生这种情况。

这可以解释为什么这种情况只发生在极少数用户身上,因为他们需要是更新应用程序的匿名用户,然后尝试在设备没有互联网连接的情况下打开它,我认为这种情况不会经常发生。