如何检查用户是否刚刚在 firebase 中首次登录 Google

Anu*_*mar 6 java android firebase firebase-authentication firebase-realtime-database

我有一个已经使用 Firebase 进行电子邮件和密码身份验证的 Android 应用程序。为了用户的方便,我现在还在项目中添加了 Google Sign-In。
问题是,当我使用电子邮件登录时,应用程序会根据用户的 uid(唯一用户 ID - 通过 Firebase 身份验证获取)在密钥下的实时数据库上创建一些数据。该数据通常在用户注册时创建。但是,当用户使用谷歌登录功能时,他们会通过谷歌播放服务托管的另一个活动进行身份验证。我无法添加此数据。
所以,问题出现了,我现在应该怎么做来检查用户是否刚刚使用 Google 帐户登录。此外,如果用户第一次登录 google,它将在实时数据库中创建新数据,否则它将检索数据。
请帮助我,因为我被卡住了。

小智 5

在 javascript 中,以下方法firebase.auth().signInWithCredential返回firebase.auth.UserCredential具有属性additionalUserInfo.

additionalUserInfo有一个名为 的布尔属性isNewUser

您可以进行简单的检查isNewUser来检查用户是否是首次登录。


Anu*_*mar 0

耶!我找到了一种无论数据是否已存在于数据库中都有效的方法。它按我的预期工作,如果我从谷歌/电子邮件创建一个新用户,我会将他们的名字保存在实时数据库中,但从同一帐户登录,早些时候也会导致在同一位置重写新数据(名称)大量使用数据带宽。我通过这个解决了。它只是检查数据存在或不存在的位置,然后进一步前进。

final User newUser = new User();
    newUser.email = user.getEmail();
    newUser.name = user.getDisplayName();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild("user/" + user.getUid())) {
                //User Exists , No Need To add new data.
                //Get previous data from firebase. Take previous data as soon as possible..
                return;
            } else {
                FirebaseDatabase.getInstance().getReference().child("user/" + user.getUid()).setValue(newUser);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

我有件事要告诉你们,User 是一个带有 POJO 的自定义类,用于将数据放入 firebase 数据库中。如果这也适合你,请回复我。

编辑-Firestore

    newUser.email = user.getEmail();
    newUser.name = user.getDisplayName();
    DocumentReference docRef = 
    db.collection("users").document(user.getUid());
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull 
   Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Log.d(TAG, "DocumentSnapshot data: " + document.getData());
    //User Exists , No Need To add new data.
                    //Get previous data from firebase. Take previous data as soon as possible..
            } else {
                Log.d(TAG, "No such document");
   //Set new data here
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
    });```
Run Code Online (Sandbox Code Playgroud)