注销和登录后,用户信息将重新初始化

每当用户注销并尝试再次登录时, JSON树中的所有属性都将重新初始化。

这是我的代码:

  @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { IdpResponse response = IdpResponse.fromResultIntent(data); if (resultCode == RESULT_OK) { // Sign-in succeeded, set up the UI FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); FirebaseUserMetadata metadata =mFirebaseAuth.getCurrentUser().getMetadata(); if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) { // The user is new, show them a fancy intro screen! User user = new User(firebaseUser.getUid(), firebaseUser.getDisplayName(), firebaseUser.getEmail()); mDatabaseReference.child(user.getId()).setValue(user); } else { // This is an existing user, show them a welcome back screen. Intent intent = new Intent(MainActivity.this, HomeActivity.class); startActivity(intent); } } else if (resultCode == RESULT_CANCELED) { // Sign in was canceled by the user, finish the activity Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show(); finish(); } 

我试图使用用户的元数据,但即使这样也行不通。

这是我的JSON结构

在此处输入图像描述

如果我们想要检查用户是否是新用户,那么如果我们检查用户是否第一次登录则是同样的事情。 所以要解决这个问题,我们可以简单地在OnCompleteListener.onComplete回调中调用isNewUser()方法,如下所示:

 OnCompleteListener completeListener = new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser(); if (isNewUser) { Log.d("TAG", "Is New User!"); } else { Log.d("TAG", "Is Old User!"); } } } }; 

有关更多信息,请参阅官方文档 。