Redes Sociais
 Telegram  YouTube
Cadastro de usuário no firebase e database em Java
31 de janeiro de 2020

Nesse tutorial vou descrever como fazer Cadastro de usuário no firebase e database em Java usando assim o serviço Realtime Database para gravar o nome.

Primeiramente vou partir do ponto em que você já tenha integrado o seu aplicativo a sua conta no firebase, caso ainda não tenha integrado veja o turotial a seguir.

Como adicionar o aplicativo ao Firebase

Adicionando bibliotecas ao gradle

Vamos adicionar ao gradle as bibliotecas do Realtime Database, auth do firebase e Material Design então sincronizar para adicionar as funções delas ao nosso projeto.

Para isso vamos adicionar as seguintes linhas ao arquivo gradle/app.

gradle/app

dependencies {
    ...
    implementation 'com.google.android.material:material:1.1.0-alpha09'
    implementation 'com.google.firebase:firebase-analytics:17.2.2'
    implementation 'com.google.firebase:firebase-auth:19.2.0'
    implementation 'com.google.firebase:firebase-database:19.2.0'
}

Após ter incluído as linhas vamos sincronizar o gradle para poder utilizar as funções das seguintes bibliotecas.

Ativando login com E-mail e Senha

Dentro do site do firebase, vamos acessar a parte de Authentication para assim fazer algumas alterações.

Na parte de “Authentication->Método de login” vamos deixar como na imagem a seguir para que funcione o nosso cadastro.

Cadastro de usuário no firebase e database em Java
Cadastro com E-mail e Senha

Agora já temos nosso método de login configurado então vamos para o próximo passo.

Criando o banco de dados no Realtime Database

Ainda dentro do site do firebase vamos ir na parte de Database para criar a nossa base de dados.

Então vamos até a parte do Realtime Database e criar o banco de dados como na imagem a seguir.

Criando o banco de dados no Realtime Database
Criando o banco de dados no Realtime Database

E vamos inserir as seguintes regras no banco de dados para que apenas os próprios usuários possam gravar em em seus registros.

Regras do banco de dados
Regras do banco de dados




Criando strings, colors e ícone

Logo após de ter criado a autenticação e o banco de dados dentro do site do firebase vamos voltar ao nosso projeto e começar a programar.

Vamos inserir no nosso arquivo de strings as seguintes strings.

res/values/strings

<resources>
    <string name="app_name">Cadastro Firebase</string>
    <string name="cadastrar">Cadastar novo usuário</string>
    <string name="entrar">Entar com cadastro existente</string>
    <string name="cad_cadastrar">Cadastrar</string>
    <string name="cad_cancel">Cancelar</string>
    <string name="cad_entar">Entrar</string>
    <string name="nome">Nome:</string>
    <string name="email">E-Mail:</string>
    <string name="senha">Senha:</string>
    <string name="confsenha">Confirmar Senha:</string>
    <string name="modificar">Modificar</string>
</resources>

Logo após ter inserido as strings que vamos utilizar vamos inserir as cores no nosso projeto.

Vamos deixar assim no nosso arquivo de colors as seguintes cores.

res/values/colors

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="black">#000000</color>
    <color name="blue">#0000A3</color>
    <color name="white">#FFFFFF</color>
</resources>

Com as strings e cores setadas vamos criar então um ícone para nosso aplicativo com o nome de ic_logo.

Para isso vamos adicionar um Vector Asset no diretório drawable que seja de sua preferência assim como na imagem a seguir.

Novo Vector Asset
Novo Vector Asset

Siga os passos utilizando o nome do ícone como ic_logo.

Criando java class para ser model

Vamos então criar uma class chamada User para que seja o nosso modelo, ela vai guardar apenas o nome e o email.

Então o código dela deve ficar como o seguinte.

User

package br.com.uware.cadastrofirebase;

import com.google.firebase.database.IgnoreExtraProperties;

@IgnoreExtraProperties
public class User {
    public String username;
    public String email;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }

}

Criando as Activities

Então depois de ter criado a base do nosso projeto vamos criar três activities vazias (Empty Activity) para fazer o nosso sistema de login.

As activities vão ser assim:

  1. CadastrarActivity – Responsável por cadastrar
  2. DentroActivity – Activity aberta após login
  3. EntarActivity – Activity para login
  4. MainActivity – Activity de entrada no aplicativo

Vamos agora então montar nossas activities com os seguintes códigos.





MainActivity

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@drawable/ic_logo"/>
        <Button
            android:id="@+id/btnCadastrar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:backgroundTint="@color/blue"
            android:text="@string/cadastrar"/>
        <Button
            android:id="@+id/btnEntrar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/blue"
            android:text="@string/entrar"/>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity

package br.com.uware.cadastrofirebase;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnCadastrar = findViewById(R.id.btnCadastrar);
        Button btnEntrar = findViewById(R.id.btnEntrar);

        btnCadastrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                cadastrar();
            }
        });
        btnEntrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                entrar();
            }
        });

    }
    private void cadastrar(){
        Intent intent = new Intent(this, CadastrarActivity.class);
        startActivity(intent);
    }
    private void entrar(){
        Intent intent = new Intent(this,EntrarActivity.class);
        startActivity(intent);
    }
}




CadastrarActivity

res/layout/activity_cadastrar

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CadastrarActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@drawable/ic_logo"/>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/nome"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edNome"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textEmailAddress"/>
        </com.google.android.material.textfield.TextInputLayout>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/senha"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edSenha1"
                android:inputType="textPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/confsenha"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edConfSenha"
                android:inputType="textPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>

        <Button
            android:id="@+id/btnCadastrar1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/blue"
            android:textColor="@color/white"
            android:text="@string/cad_cadastrar"/>
        <Button
            android:id="@+id/btnCancel1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/cad_cancel"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

CadastrarActivity

package br.com.uware.cadastrofirebase;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class CadastrarActivity extends AppCompatActivity {

    private FirebaseAuth mAuth;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("users");


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cadastrar);

        mAuth = FirebaseAuth.getInstance();

        Button cadastrar = findViewById(R.id.btnCadastrar1);
        Button cancelar = findViewById(R.id.btnCancel1);
        final EditText nome = findViewById(R.id.edNome);
        final EditText email = findViewById(R.id.edEmail);
        final EditText senha = findViewById(R.id.edSenha1);
        final EditText confSenha = findViewById(R.id.edConfSenha);


        cadastrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (email.getText().toString() != "") {
                    Log.d("Btn: ", "email");
                    if (senha.getText().toString().equals(confSenha.getText().toString())) {
                        if (senha.getText().length() > 5) {
                            Log.d("Btn: ", "senha");
                            criaUser(email.getText().toString(), senha.getText().toString(), nome.getText().toString());
                        } else {
                            Toast.makeText(CadastrarActivity.this, "Senha com minimo de 6 caracteres", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        Toast.makeText(CadastrarActivity.this, "Senhas não conferem.", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(CadastrarActivity.this, "E-Mail vazio", Toast.LENGTH_SHORT).show();
                }
            }
        });
        cancelar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                nome.setText("");
                email.setText("");
                senha.setText("");
                confSenha.setText("");
                getCurrentFocus().clearFocus();
            }
        });
    }
    private void criaUser(final String email, String password, final String nome) {
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d("Login: ", "createUserWithEmail:success");
                            FirebaseUser userId = mAuth.getCurrentUser();
                            User user = new User(nome, email);
                            gravaNome(userId.getUid(), user);
                            entrada();
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w("Login: ", "createUserWithEmail:failure", task.getException());
                            Toast.makeText(CadastrarActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
    private void gravaNome(String userId, User user){
        myRef.child(userId).setValue(user);
    }
    private void entrada() {
        Intent intent = new Intent(this, DentroActivity.class);
        startActivity(intent);
    }
}




EntrarActivity

res/layout/activity_entrar

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".EntrarActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@drawable/ic_logo"/>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edEntEmail"
                android:inputType="textEmailAddress"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/senha"
            app:hintTextColor="@color/blue">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edEntSenha"
                android:inputType="textPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <Button
            android:id="@+id/btnEntEntrar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/blue"
            android:textColor="@color/white"
            android:text="@string/cad_entar"/>
        <Button
            android:id="@+id/btnEntCancel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/cad_cancel"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

EntrarActivity

package br.com.uware.cadastrofirebase;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class EntrarActivity extends AppCompatActivity {

    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_entrar);

        mAuth = FirebaseAuth.getInstance();

        Button btnEntrar = findViewById(R.id.btnEntEntrar);
        Button btnCancel = findViewById(R.id.btnEntCancel);
        final EditText edEmail = findViewById(R.id.edEntEmail);
        final EditText edSenha = findViewById(R.id.edEntSenha);


        btnEntrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                entrar(edEmail.getText().toString(),edSenha.getText().toString());
            }
        });
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                edEmail.setText("");
                edSenha.setText("");
                getCurrentFocus().clearFocus();
            }
        });


    }

    private void entrar(String email, String password){
        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d("Entrar: ", "signInWithEmail:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            entrada();
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w("Entrar: ", "signInWithEmail:failure", task.getException());
                            Toast.makeText(EntrarActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();

                        }

                        // ...
                    }
                });
    }
    private void entrada(){
        Intent intent = new Intent(this,DentroActivity.class);
        startActivity(intent);
    }
}




DentroActivity

res/layout/activity_dentro

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DentroActivity">
    <ImageView
        android:id="@+id/ivLogo"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:src="@drawable/ic_logo"
        app:layout_constraintTop_toTopOf="parent"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@id/ivLogo"
        app:layout_constraintBottom_toBottomOf="parent">
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/nome">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/etDentroNome"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email">
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/etDentroEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </com.google.android.material.textfield.TextInputLayout>
        <Button
            android:id="@+id/btnMudar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/modificar"/>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

DentroActivity

package br.com.uware.cadastrofirebase;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class DentroActivity extends AppCompatActivity {
    private FirebaseAuth mAuth;
    FirebaseUser currentUser;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("users");
    EditText etNome;
    EditText etEmail;
    Button btnMudar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dentro);
        etNome = findViewById(R.id.etDentroNome);
        etEmail = findViewById(R.id.etDentroEmail);
        mAuth = FirebaseAuth.getInstance();
        btnMudar = findViewById(R.id.btnMudar);
        btnMudar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                User user = new User(etNome.getText().toString(), etEmail.getText().toString());
                writeDB(user);
            }
        });
    }
    @Override
    public void onStart() {
        super.onStart();
        currentUser = mAuth.getCurrentUser();
        myRef.addValueEventListener(postListener);
    }
    private void setaNome(User user){
        etNome.setText(user.username);
        etEmail.setText(user.email);
    }
    private void writeDB(User user){
        myRef.child(currentUser.getUid()).setValue(user);
    }
    ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            User user;
            user = dataSnapshot.child(currentUser.getUid()).getValue(User.class);
            setaNome(user);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    };
}

Enfim espero poder ter ajudado com mais este tutorial sobre Cadastro de usuário no firebase e database em Java.





Autor: Rodrigo Leutz

Desenvolvedor Web e Android ( Kotlin e Java )


Como fazer calculadora de IMC em Java para Android

Neste tutorial vou descrever como fazer calculadora de IMC em Java para Android e assim você vai poder entender como fazer o cálculo do[...]

26 de abril de 2020

Tocar áudio e vídeo no android com Java

Nesse tutorial vou descrever como fazer para tocar áudio e vídeo no android com Java num aplicativo bem simples para ver como funciona o[...]

21 de março de 2020

Como passar dados entre Activities Java

Nesse tutorial vou descrever Como passar dados entre Activities Java para que você possa assim utilizar dados gerados em uma activity em outra.[...]

21 de dezembro de 2019