【问题标题】:FirebaseUI- Unable to identify new user [duplicate]FirebaseUI-无法识别新用户[重复]
【发布时间】:2020-10-09 22:41:22
【问题描述】:

我有一个使用 Firebase AuthUI 登录用户的 android 应用程序。我只使用电话身份验证。如果新用户登录,我希望他被引导到 Profile 创建活动,如果他是老用户,我希望他被引导到家庭活动。 但是,当我使用新的测试号码时,我会被定向到家而不是个人资料活动。我已经尝试了多个号码,它与一些号码一起工作,而不是与其他号码一起工作(登录成功,但被检测为旧用户)。要检查新/旧用户,我正在使用以下代码:

if (user.getMetadata().getCreationTimestamp() == user.getMetadata().getLastSignInTimestamp()) {
                    //This is a New User
                    //Move to Profile Creation Activity
                    Toast.makeText(this, "new user", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "onActivityResult: creationTimestamp "+user.getMetadata().getCreationTimestamp());
                    Log.d(TAG, "onActivityResult: lastsignin"+user.getMetadata().getLastSignInTimestamp());
                    Intent loginIntent = new Intent(this, ProfileActivity.class);
                    startActivity(loginIntent);
                    this.finish();
                } else {
                    //This is a returning user
                    Toast.makeText(this, "old", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "onActivityResult: creationTimestamp "+user.getMetadata().getCreationTimestamp());
                    Log.d(TAG, "onActivityResult: lastsignin "+user.getMetadata().getLastSignInTimestamp());
                    Intent intent = new Intent(this, HomeActivity.class);
                    startActivity(intent);
                    this.finish();


                }

我已手动将测试编号添加到 Firebase 控制台。我还反复删除用手机号码注册的帐户,以便我可以重复使用我的测试号码。我不知道这是否导致了问题。我还尝试登录创建和上次登录时间戳。每当新用户被错误地识别为旧用户时,创建和上次登录时间戳都会相差 1。

这是带有时间戳的 logcat:

2020-06-19 21:22:37.553 32080-32080/com.example.XX D/LoginRegisterActivity: onActivityResult: creationTimestamp 1592581957752
2020-06-19 21:22:37.553 32080-32080/com.example.XX D/LoginRegisterActivity: onActivityResult: lastsignin 1592581957753

请提出建议

编辑 1:我观察到一件事,如果我从控制台和相应的用户中删除了一个测试号,然后在控制台中再次添加相同的测试号,我会被识别为老用户。测试号被删除后是否还会保存?因为当我将测试号码更改为一个完全随机的新号码然后尝试注册时,我被正确识别为新用户

编辑2:刚刚在控制台中添加了一个完全随机的测试号,现在尝试注册用户。我被带回家而不是个人资料活动。这是一个错误吗?在我添加此号码之前,我的代码运行良好

尝试替代解决方案:我现在正在按照某人的建议在 Firestore 中查询用户 ID。如果 userID 存在,我会将其视为旧用户并将用户发送到 Home。我想问每个电话号码的用户ID是唯一的吗?基本上每个phoneNo都对应一个用户吗?

【问题讨论】:

  • 请检查副本以了解如何知道用户是否是第一次通过身份验证。

标签: java android firebase google-cloud-firestore firebase-authentication


【解决方案1】:

你只需要使用这些东西,而不是做所有这些事情,

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

从以下链接查看官方文档。

doc

【讨论】:

  • 请再看一遍我的问题,我想看看是新用户还是老用户。我不想检查是否有任何用户登录
  • 那么一旦用户要输入他的凭据,您需要通过查询来检查数据是否存在。您可以参考stackoverflow.com/a/39025129/10042469链接了解如何在firebase中查询
  • 我知道如何查询数据。我的代码有什么问题?官方firebase ui github repo中也提到了这个方法
猜你喜欢
  • 2018-11-16
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多