【发布时间】:2020-03-11 02:18:40
【问题描述】:
这就是我想出的在我的 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();
}
}
这个StartupActivity 是在我的AndroidManifest.xml 中定义为我的应用的主启动器活动的那个。
该模式运行良好:在IntroActivity 的末尾,我的代码匿名验证用户并将其发送到LoggedInActivity。之后每次启动,匿名身份验证都会持续进行,用户直接转到LoggedInActivity。
但是,由于我的其他应用程序内部屏幕被驱动出与用户 UID 对应的 Firebase 节点,因此一些用户报告丢失了他们的匿名身份验证并实际上丢失了他们的数据。
这很糟糕,但它似乎只发生在少数用户身上。并且仅适用于匿名身份验证 - 如果它发生在电子邮件身份验证中,它甚至不会有什么大不了的,因为用户可以重新登录。但对于匿名,这是一个相当大的问题。用户失去了一切。
此问题可能与 Firebase SDK 更新或应用更新有关 - 这似乎是它发生最多/被我的用户报告最多的时候。
为什么会这样?这对身份验证来说是一个糟糕的模式吗?我喜欢使用匿名身份验证让用户无需登录即可轻松使用您的应用的概念,我相信这也是 Firebase 的意图。这几乎就像我需要让他们选择通过实际登录来支持他们的帐户,因为这个错误有如此糟糕的影响。
【问题讨论】:
-
嘿,安东尼。乍一看,您的代码在我看来完全正常,并且是您应该如何实现它的示例。只有在以下情况下,匿名 UID 才会丢失:1) 您致电
signOut,2) 用户卸载应用程序。如果它确实在升级中丢失,那将是一个回归/错误。它应该很容易复制。你已经试过了吗? -
@FrankvanPuffelen 这不会发生在我身上,但它是由我的用户报告的,所以我不知道我将如何重现。我昨晚刚刚发布了更新,今天下午收到了 2 份报告——对我来说,这不仅仅是巧合。我不在我的应用程序的任何地方使用
signOut。 -
嘿@AnthonyChuinard,我有完全相同的问题,我找不到问题/解决方案。更多关于我的问题的信息:stackoverflow.com/questions/60650500/…。你设法解决了这个问题吗?欢迎任何帮助。感谢,并有一个愉快的一天。 :)
-
@matox 不,他们要求我提供日志并重现这一点,当我有 10,000 个用户并且其中有 5-10 个用户发生这种情况时,真的很难做到这一点。
-
@AnthonyChuinard 我明白了,无论如何感谢您的回复。如果您发现任何有用的信息,请告诉我。 :)
标签: android firebase firebase-authentication