【问题标题】:Firebase anonymous authentication lost on app upgradesFirebase 匿名身份验证在应用升级时丢失
【发布时间】: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


【解决方案1】:

系统的设计使用户可以以匿名模式开始,以降低注册摩擦。但是你可以写代码到convert an anonymous account to a permanent account。如果用户愿意提供一些登录凭据,那么您应该这样做。

如果您将匿名身份验证凭据注销,或者用户清除应用存储空间或用户卸载应用,这些凭据可能会丢失。

【讨论】:

  • 感谢您这么快就加入,我理解您的所有观点,但是有些用户不想在简单的应用安装之外保留他们的权限,而 Firebase 提供了这个简洁的功能。我愿意承担卸载和清除应用程序存储的风险——这由用户承担——但对我来说,随机丢失一小部分用户的身份验证是完全不同的故事。
  • 同意 Anthony:他们的登录状态不应该在 Doug 和我强调的案例之外丢失。我们需要更多地了解发生这种情况的用户,看看是什么原因造成的。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2017-06-03
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多