Firebase删除的用户无法删除元数据或Firebase元数据不起作用

时间:2019-02-09 19:41:06

标签: android firebase firebase-authentication metadata

我需要使用Firebase(Google或Facebook)对用户进行身份验证。然后,我希望用户在NewUserActivity中添加有关他的更多详细信息,然后输入该应用程序的主要核心。为了检查是否是第一次启动,我使用

prefManager.isFirstTimeLaunch

这没问题,但是我有一个错误。如果用户卸载并重新安装该应用程序,则就像正常情况下第一次启动该应用程序一样。所以我需要检查他是否已经有一个帐户。我用

 FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
                        if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp())

因此,这应该检查用户是否不是新用户(已经有一个帐户)。

我的完整检查代码是:

 mAuthListner = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    if (firebaseAuth.getCurrentUser() != null) {
                        FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
                        if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
                            if (prefManager.isFirstTimeLaunch()) {
                            startActivity(new Intent(MainActivity.this, NewUserActivity.class));
                            }

                        }
                        else
                            {
                            startActivity(new Intent(MainActivity.this, UserProfile.class));
                            finishAffinity();
                    }




                    }

                }
            };

问题:

该代码在UserProfile Activity中始终有效。因此,即使用户是新用户,也不要转到NewUserActivity添加详细信息,并且由于UserProfile Activity没有所需的详细信息,因此将引发null异常。

据我所知,问题是这段代码

if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp())

不起作用。 如果没有此行,则用户卸载并重新安装应用程序后,应用程序可以正常运行。在这种情况下,它就像一个新用户。

通常来说,这是在Firebase中对用户进行身份验证,在活动中首次添加一些详细信息,然后始终在个人资料中的一种非常正常的情况。

我已经很长时间没有问题了。奇怪的行为始于一周前,没有任何实际原因。所以我几乎说服了它的火力场问题。

澄清

不需要logcat,因为null异常必须始终将代码转到UserProfile,因此没有得到所需的详细信息。

1 个答案:

答案 0 :(得分:0)

正如我发现的那样,这是一个firebase错误,由于差异(几秒钟或几次),元数据无法正常工作。仍在测试所有情况,但以下代码看起来可以按预期工作,而不必用其他错误代码替换它:

mAuthListner = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                if (firebaseAuth.getCurrentUser() != null) {
                    FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
                    **if (Math.abs(metadata.getCreationTimestamp() - metadata.getLastSignInTimestamp()) <5000L){**
                        if (prefManager.isFirstTimeLaunch()) {
                            startActivity(new Intent(MainActivity.this, NewUserActivity.class));
                        }

                        else{

                            startActivity(new Intent(MainActivity.this, UserProfile.class));
                            finishAffinity();



                    }

                }
                else{
                        startActivity(new Intent(MainActivity.this, UserProfile.class));
                        finishAffinity();
                    }




                }

            }
        };

希望有帮助!