使用Firebase-UI在我的Android应用程序中,如何知道用户是否已经创建了帐户?

3

以下是详细内容:

我对Firebase和Android Studio都是新手,但已经在我的应用程序中编写了一些部分,比如使用Google和FB进行登录。我遵循了这个教程

一切运行良好,但现在我想做的是从用户收集一些信息并将其存储在Firebase数据库中(我认为我有一个基本的概念)。但问题是我不知道如何知道用户是否第一次创建账户,因为我只想要求每个账户提供这些信息一次。所以我想使用来自Auth的“用户UID”。但是我遇到的问题是,当使用上述教程时,我应该在哪里/如何编写代码来检查用户是否已经存在。我应该在数据库的规则部分还是在代码本身中执行此操作?

我会发布我通过遵循教程制作的代码。如果这是一个初学者问题,我很抱歉,但是我认识的开发人员都没有Firebase UI的经验。所以我真的没有人可以向他们询问。感谢任何帮助。

MainActivity.java

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.firebase.ui.auth.AuthUI;
import com.google.firebase.auth.FirebaseAuth;

public class MainActivity extends AppCompatActivity {

private static final int RC_SIGN_IN=0;
private FirebaseAuth auth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    auth = FirebaseAuth.getInstance();
    if(auth.getCurrentUser() != null) {
        //user already signed in

        Log.d("AUTH", auth.getCurrentUser().getEmail());
        Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class);
        startActivity(intent);
        finish();
    }
    else {
        startActivityForResult(AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setProviders(
                        AuthUI.FACEBOOK_PROVIDER,
                        AuthUI.GOOGLE_PROVIDER)
                .build(),RC_SIGN_IN);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == RC_SIGN_IN) {
        if(resultCode == RESULT_OK) {
            //User logged in
            Log.d("AUTH", auth.getCurrentUser().getEmail());
            Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class);
            startActivity(intent);
            finish();
        }
        else {
            //User not authenticated
            Log.d("AUTH", "NOT AUTHENTICATED");
        }
    }
}}
1个回答

1

首先在gradle的应用级别中添加依赖:
com.google.firebase:firebase-database:9.6.1

用户只需登录一次,因此无需检查用户是否存在,只需在注册后添加信息。

例如:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN) {
    if(resultCode == RESULT_OK) {
        //User logged in
        Log.d("AUTH", auth.getCurrentUser().getEmail());
//create the database
        DatabaseReference mdatabase=FirebaseDatabase.getInstance.getReference.child("User-Information");

        //set the information, you can put how much as you want
        mdatabase.child("user-information1").setValue("User-information1");
        mdatabase.child("user-information2").setValue("User-information2")
             .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d(LOG_TAG, "signIn:onComplete:" + task.isSuccessful());

                    if (task.isSuccessful()) {
                        //success
                    } else {
                        //Error

                    }
                }
            });;

        Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class);
        startActivity(intent);
        finish();
    }
    else {
        //User not authenticated
        Log.d("AUTH", "NOT AUTHENTICATED");
    }
}

我尝试了不同的输出组合来确定代码的哪一部分是“账户创建”部分。但我无法理解它。让我再试一下。谢谢。 - Jacob Celestine
为什么使用com.google.firebase:firebase-database:9.6.1而不是com.google.firebase:firebase-database:9.8.0?我的其他依赖项都是9.8.0。 - Jacob Celestine
我刚在文档中找到了这个,最好使用9.8.0版本。 - Martin De Simone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接