Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android FireBaseUI身份验证-如何知道帐户是来自新注册用户还是现有用户?_Android_Firebase Authentication_Firebaseui - Fatal编程技术网

Android FireBaseUI身份验证-如何知道帐户是来自新注册用户还是现有用户?

Android FireBaseUI身份验证-如何知道帐户是来自新注册用户还是现有用户?,android,firebase-authentication,firebaseui,Android,Firebase Authentication,Firebaseui,我正在使用。它实质上是打开一个外部活动,将用户登录到firebase,并在onActivityResult中向开发人员发送一个回调。它工作得很好问题是我需要知道用户是新注册用户还是现有用户。是否有任何类型的元数据或我可以使用的东西来了解这一点?以下是迄今为止我在JAVA ANDROID中所做的: private void ititFireBaseUi() { AuthUI.getInstance() .signOut(getActivity(

我正在使用。它实质上是打开一个外部活动,将用户登录到firebase,并在onActivityResult中向开发人员发送一个回调。它工作得很好问题是我需要知道用户是新注册用户还是现有用户。是否有任何类型的元数据或我可以使用的东西来了解这一点?以下是迄今为止我在JAVA ANDROID中所做的:

    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();
    }