Android FireBaseUI身份验证-如何知道帐户是来自新注册用户还是现有用户?
我正在使用。它实质上是打开一个外部活动,将用户登录到firebase,并在onActivityResult中向开发人员发送一个回调。它工作得很好问题是我需要知道用户是新注册用户还是现有用户。是否有任何类型的元数据或我可以使用的东西来了解这一点?以下是迄今为止我在JAVA ANDROID中所做的:Android FireBaseUI身份验证-如何知道帐户是来自新注册用户还是现有用户?,android,firebase-authentication,firebaseui,Android,Firebase Authentication,Firebaseui,我正在使用。它实质上是打开一个外部活动,将用户登录到firebase,并在onActivityResult中向开发人员发送一个回调。它工作得很好问题是我需要知道用户是新注册用户还是现有用户。是否有任何类型的元数据或我可以使用的东西来了解这一点?以下是迄今为止我在JAVA ANDROID中所做的: private void ititFireBaseUi() { AuthUI.getInstance() .signOut(getActivity(
private void ititFireBaseUi() {
AuthUI.getInstance()
.signOut(getActivity())
.addOnCompleteListener(new OnCompleteListener<Void>() {
public void onComplete(@NonNull Task<Void> task) {
// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build());
//new AuthUI.IdpConfig.Builder(AuthUI.TWITTER_PROVIDER).build());
// Create and launch sign-in intent
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setLogo(R.drawable.logo)
.build(),
RC_SIGN_IN);
}
});
}
我看到了一个可能对我有帮助,但我不知道如何使用它
gradle:实现'com.firebaseui:firebaseui auth:3.2.2'
public boolean isNewSignUp(){
FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
return metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp();
}
在撰写本文时,似乎每个登录的用户都有我所怀疑的元数据。我们可以检查最后一次签名的时间,以了解它是否是一个新帐户。我听说他们将来会使这变得更容易,在尝试此操作之前,请检查firebase身份验证的更高版本 不要使用创建和登录时间戳比较。我发现它不可靠
idpsresponse
有一个isNewUser()
方法来告诉您登录是否为新帐户。在进行匿名注册时遇到了问题。当用户向提供商注册时,additionalUserInfo的isNewUser()将始终返回false。这个答案解决了我的问题@Frank van Puffelen为什么会这样?元数据刷新需要1分钟。不是实时的,所以呢?当直接在登录后执行时,您的方法是否总是返回true?。每次通话之间只需等待1分钟。如果在一分钟后创建用户,则返回false。Firebase UI团队向我解释了这一点
public boolean isNewSignUp(){
FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
return metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp();
}