注销和登录后,用户信息将重新初始化
每当用户注销并尝试再次登录时, 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!"); } } } };
有关更多信息,请参阅官方文档 。