【发布时间】: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