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();
}
}
这个StartupActivity
是在我AndroidManifest.xml
中定义的我的应用程序的主要启动器活动。
这种模式很有效:在IntroActivity
结束时,我的代码会匿名验证用户并将其发送到LoggedInActivity
。每次启动后,匿名验证都会保持不变,并且用户直接进入LoggedInActivity
。
然而,一些用户报告说他们失去了匿名验证,并且实际上失去了他们的数据,因为我的其他内部应用程序屏幕是基于Firebase节点驱动的,这些节点对应于用户的UID。
这很糟糕,但似乎只发生在少数用户身上。而且只有匿名验证才会发生 - 如果出现电子邮件验证,甚至不是什么大问题,因为用户可以重新登录。但是对于匿名验证,这是一个相当大的问题。用户会失去所有内容。
这个问题可能与Firebase SDK更新或应用程序更新有关 - 当它发生时,我的用户似乎最频繁报告。
为什么会发生这种情况?这是否是错误的认证模式?我喜欢使用匿名验证的概念,让用户可以简单地使用您的应用程序而无需登录,我相信这也是Firebase的意图。但是由于这个bug有如此糟糕的影响,我几乎需要给他们提供一个将他们的帐户与实际登录备份的选项。
signOut
,2)用户卸载应用程序。如果它确实在升级时丢失,那就是一个退步/错误。这应该很容易重现。你已经试过了吗? - Frank van PuffelensignOut
。 - Anthony Chuinard