我在 Android 应用程序中使用 Firebase 数据库,每次注册用户时,我都会为此在数据库中存储一些值,我正在执行以下操作:
database = FirebaseDatabase.getInstance();
DatabaseReference mRef = database.getReference().child("Users").push();
FirebaseUser user = mAuth.getCurrentUser();
String userId = user.getUid();
mRef.child("User").child("age").setValue(selectedAge);
mRef.child("User").child("gender").setValue(finalGender);
mRef.child("User").child("userId").setValue(userId);
mRef.child("User").child("username").setValue(username);
Run Code Online (Sandbox Code Playgroud)
但是当我转到我的 firebase 控制台时,我看到自动生成了一种我不需要的 ID,因为正如您在图像中看到的那样,我设置了自己的 ID。
有没有办法避免这种情况,并创建像图像中第二个用户节点这样的节点?
注意:我手动添加的第二个用户节点
我一直在使用Firebase对应用程序中的用户进行身份验证。注册后用户FirebaseAuth.getInstance().getCurrentUser().getMetadata()返回应用null时返回。当用户首次注册时,它可以完美地工作,但是null对于回头用户则返回。
我需要检查用户是否是首次登录,并使用true的其他属性(积分,会员资格等)来初始化其帐户。
可能用户更改了设备并希望再次登录另一台设备。
我正在使用Google登录方法。我尝试过这样的事情。
if(FirebaseAuth.getInstance().getCurrentUser() != null){
Toast.makeText(Anamain.this, "Welcome again xyz", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
我使用新帐户登录,因此是第一次使用此应用程序登录,但无论如何都会显示“ Welcome again xyz”消息。
如何检测以前用户是否存在于数据库中?
完整代码
package com.mertg.testsignin;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.database.FirebaseDatabase;
public class …Run Code Online (Sandbox Code Playgroud) 我创建了一种方法,在用户登录后获取用户的facebook数据,并在我的firebase数据库中为他们创建"用户".此方法addUser()也为所述用户创建和设置变量.但我必须保留方法,登录,所以它创建我的变量,然后注释方法以供将来测试,或者它将重置所有值.那么我可以在哪里添加"addUser()"来第一次创建所述用户,并确保它永远不会再次调用它,只要用户已经存在?
该MainActivity(启动和登录)
public class MainActivity extends AppCompatActivity {
CallbackManager callbackManager;
ShareDialog shareDialog;
LoginButton login;
ProfilePictureView profile;
Dialog details_dialog;
TextView details_txt;
JSONObject response;
/* Used to track user logging in/out off Facebook */
private AccessTokenTracker mFacebookAccessTokenTracker;
/* A reference to the Firebase */
private Firebase mFirebaseRef;
/* A reference to the Firebase */
private Firebase userRef;
/* Data from the authenticated user */
public static AuthData mAuthData;
/* Listener for Firebase session changes */
private Firebase.AuthStateListener mAuthStateListener;
public static …Run Code Online (Sandbox Code Playgroud)