【问题标题】:How can I know if a user already created an account while using firebase-ui on my android application?在我的 android 应用程序上使用 firebase-ui 时,我如何知道用户是否已经创建了一个帐户?
【发布时间】:2017-03-19 22:16:50
【问题描述】:

这是长版:

我对 Firebase 和 Android Studio 完全陌生,并且我已经编写了一些部分,例如在我的应用中使用 google 和 FB 登录。我关注了this tutorial。

一切正常,但我现在想做的是从用户那里收集一些信息并将其存储在 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");
        }
    }
}}

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    首先在gradle的app级别添加依赖
    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");
        }
    }
    

    【讨论】:

    • 我尝试了不同的输出组合来确定代码的哪一部分是“帐户创建”部分。但我无法理解。让我试试这个。谢谢。
    • 为什么 com.google.firebase:firebase-database:9.6.1 而不是 com.google.firebase:firebase-database:9.8.0 ?我所有的其他依赖项都是 9.8.0..
    • 我只是在文档上找到了一个,最好用9.8.0
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2011-10-16
    • 2018-12-05
    • 2020-05-11
    相关资源
    最近更新 更多