Autenticação Android Firebase

Tempo de leitura: 7 minutes

Olá a todos. Neste artigo, gostaria de falar sobre o serviço Firebase Authentication. O serviço Firebase Authentication nos ajuda no processo de login. O processo de login do Firebase Authentication é mais fácil do que outros processos de login. Este projeto inclui processo de login, processo de login com conta do Google e processos de redefinição de senha.

Em primeiro lugar, devemos criar um projeto no Firebase Console.

Crie um novo projeto, ou use algum dos seus projetos.

 

Siga os próximos passos

Neste passo você pode selecionar se deseja ou não ativar o Google Analytics

Para Facilitar esta apresentação, optamos por não usar o Google Analytics, e o sistema cria por imediato o projeto.

Ao terminar click em continuar.

Irá ver a tela inicia dele.

No meu caso, selecionarei opção de Android, mais pode selecionar para usar nos outros ambientes como iOS e outros.

Na tela abaixo, entre com as informações do seu Aplicativo para o Teste.

A primeira informação é o packetname, apos um Apelido (opcional) do seu app, e por ultimo o sha1 de seu AndroidStuidio (gerado la) (opcional)

Após o registro, ira apresentar a seguinte tela.

Copie como demonstrado o seu google-services.json para a pasta indicada do seu android do projeto.

Siga os passos de (Próximo) e volte para o Console, ao abrir click na aba autentication

 

Finalmente, devemos selecionar a autenticação no lado esquerdo e temos que ativar o e-mail/senha e a seção Google. Concluímos as operações necessárias. Vamos escrever o código …

 

Em primeiro lugar, devemos adicionar a linha de código abaixo ao arquivo build.gradle. (Nível do projeto)

dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath 'com.google.gms:google-services:3.2.0'
    

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

Depois disso, adicionaremos a linha de código abaixo para o tipo do arquivo app build.gradle e clique em Sync Now.

// app build.gradle
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.google.firebase:firebase-auth:11.8.0'
    implementation 'com.google.android.gms:play-services-auth:11.8.0'
}
apply plugin: 'com.google.gms.google-services'

Não devemos esquecer de adicionar permissão de internet no arquivo Android Manifest.

<uses-permission android:name="android.permission.INTERNET"/>

 

Criar conta com e-mail e senha

RegisterActivity inclui 2 EditText e 2 botões. Devemos adicionar a linha de código abaixo para registrar o arquivo xml da atividade.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#FFF"
    >

    <android.support.design.widget.TextInputLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:layout_marginTop="10dp"
            android:hint="E-mail"
            android:id="@+id/uyeEmail" />

    </android.support.design.widget.TextInputLayout>



    <android.support.design.widget.TextInputLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:layout_marginTop="10dp"
            android:id="@+id/Palavra
            android:hint="Palavra" />

    </android.support.design.widget.TextInputLayout>

    <Button
        android:text="Inscrever-se!"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="50dp"
        android:textColor="#FFFF"
        android:id="@+id/novoButton"
        android:background="@color/colorAccent"/>


    <Button
        android:text="já é um membro?"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:id="@+id/loginButton"
        android:background="@null"
        android:textColor="@color/colorAccent"
        android:layout_marginBottom="10dp"
        />


</LinearLayout>

Depois disso, criaremos o arquivo RegisterActivity.java.

package com.example.capsistema.authexample;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
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;


public class RegisterActivity extends AppCompatActivity {
    EditText email,password;
    Button registerButton,loginButton;
    FirebaseAuth firebaseAuth;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_activity);

        email = (EditText) findViewById(R.id.Email);
        password = (EditText) findViewById(R.id.Palavra);
        registerButton = (Button) findViewById(R.id.novoButton);
        loginButton = (Button) findViewById(R.id.loginButton);

        firebaseAuth = FirebaseAuth.getInstance();

        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = email.getText().toString();
                String password = password.getText().toString();

                if(TextUtils.isEmpty(email)){
                    Toast.makeText(getApplicationContext(),"Por favor, preencha os campos obrigatórios",Toast.LENGTH_SHORT).show();
                    return;
                }
                if(TextUtils.isEmpty(parola)){
                    Toast.makeText(getApplicationContext(),"Por favor, preencha os campos obrigatórios",Toast.LENGTH_SHORT).show();
                }

                if(parola.length()<6){
                    Toast.makeText(getApplicationContext(),"A senha deve ter pelo menos 6 caracteres",Toast.LENGTH_SHORT).show();
                }

                firebaseAuth.createUserWithEmailAndPassword(email,parola)
                        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                    if(task.isSuccessful()){
                                        startActivity(new Intent(getApplicationContext(),MainActivity.class));
                                        finish();
                                    }
                                    else{
                                        Toast.makeText(getApplicationContext(),"E-mail ou senha errada",Toast.LENGTH_SHORT).show();
                                    }
                            }
                        });
            }
        });

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(),LoginActivity.class));
            }
        });

        if(firebaseAuth.getCurrentUser()!=null){
            startActivity(new Intent(getApplicationContext(),MainActivity.class));
        }
    }
}

Criamos register_activity xml e o arquivo RegisterActivity.java.

Podemos alcançar usuários registrados na seção Autenticação-> Usuários (Authentication-> Users section).

 

Processo de login com e-mail e conta do Google

Primeiramente, devemos criar o segundo arquivo xml login_activity.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#FFF">

    <android.support.design.widget.TextInputLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:layout_marginTop="10dp"
            android:hint="E-mail"
            android:id="@+id/Email" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:layout_marginTop="10dp"
            android:id="@+id/senha"
            android:hint="Password" />
    </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal"
        android:gravity="center">
        <Button
            android:text="Login"
            android:id="@+id/loginButton"
            android:layout_width="140dp"
            android:layout_height="45dp"
            android:textColor="#FFFF"
            android:textAllCaps="true"
            android:layout_marginTop="10dp"
            android:layout_marginRight="10dp"
            android:background="@color/colorAccent"/>

        <Button
            android:text="Register!"
            android:id="@+id/registerButton"
            android:layout_width="140dp"
            android:layout_height="45dp"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:textColor="#FFFF"
            android:background="@color/colorAccent"/>
    </LinearLayout>

    <Button
        android:text="Esqueci a senha"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:id="@+id/esqueciButton"
        android:background="@null"
        android:textColor="@color/colorPrimary"
        android:layout_marginBottom="8dp"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="OR"
        android:gravity="center"
        android:textColor="@color/colorPrimary"/>

    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="300dp"
        android:layout_height="55dp"
        android:layout_marginTop="15dp"
        />

</LinearLayout>

Para fazer login com a senha de e-mail, usamos o método signInWithEmailAndPassword (e-mail, senha), que consiste em parâmetros de e-mail e senha usando a classe FirebaseAuth novamente.

OnCompleteListener focaliza o resultado. Se o resultado for bem-sucedido, os processos de login serão bem-sucedidos. Depois disso, criaremos o arquivo LoginActivity.java.

package com.example.omerakkus.authexample;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
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.GoogleAuthProvider;



public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
    EditText loginEmail,loginPassword;
    Button loginButton,registerButton,newPassButton;
    private static final int RC_SIGN_IN = 9001;
    private SignInButton signInButton;
    FirebaseAuth firebaseAuth;
    GoogleApiClient mGoogleApiClient;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);

        loginEmail = (EditText) findViewById(R.id.Email);
        loginPassword = (EditText) findViewById(R.id.senha);
        loginButton = (Button) findViewById(R.id.loginButton);
        registerButton = (Button) findViewById(R.id.registerButton);
        signInButton = (SignInButton) findViewById(R.id.sign_in_button);
        newPassButton = (Button) findViewById(R.id.esqueciButton);

        firebaseAuth = FirebaseAuth.getInstance();

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(LoginActivity.this,this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
                .build();

        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signIn();
            }
        });

        if(firebaseAuth.getCurrentUser()!=null){
            startActivity(new Intent(getApplicationContext(),MainActivity.class));
        }

    }

    private void signIn() {
        Intent signIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        startActivityForResult(signIntent,RC_SIGN_IN);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==RC_SIGN_IN){
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if(result.isSuccess()){
                GoogleSignInAccount account = result.getSignInAccount();
                authWithGoogle(account);
            }
        }
    }

    private void authWithGoogle(GoogleSignInAccount account) {
        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
        firebaseAuth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    startActivity(new Intent(getApplicationContext(),MainActivity.class));
                    finish();
                }
                else{
                    Toast.makeText(getApplicationContext(),"Erro de autenticação",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

O método getCurrentUser () verifica o valor do usuário atual. Se tivermos o usuário atual, o aplicativo abrirá diretamente MainActivity.java. Se não tivermos o usuário atual, será aberto o arquivo LoginActivity.java.

Não devemos esquecer de adicionar o arquivo LoginActivity.java ao arquivo AndroidManifest.xml.

 

Esqueci a minha senha ?

Se você não se lembra da sua senha, o serviço de autenticação Firebase nos ajuda a lembrar sua senha. Devemos criar um novo arquivo xml de atividade de senha.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#FFF">

    <android.support.design.widget.TextInputLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:layout_marginTop="10dp"
            android:hint="E-Mail"
            android:id="@+id/Email" />

    </android.support.design.widget.TextInputLayout>

    <Button
        android:text="Enviar novo link de senha"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="100dp"
        android:textColor="#FFFF"
        android:id="@+id/newPassword"
        android:background="@color/colorAccent"/>

</LinearLayout>

Depois disso, criaremos NewPassActivity.java e adicionaremos ao arquivo AndroidManifest.xml.

package com.example.omerakkus.authexample;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
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.FirebaseAuth;

public class YeniParolaActivity extends AppCompatActivity {
    EditText email;
    Button btnNewPass;
    FirebaseAuth firebaseAuth;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yeni_parola_activity);
        email = (EditText) findViewById(R.id.Email);
        btnNewPass = (Button) findViewById(R.id.newPassword);

        firebaseAuth = FirebaseAuth.getInstance();

        btnNewPass.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = email.getText().toString();

                if(TextUtils.isEmpty(email)){
                    Toast.makeText(getApplicationContext(),"Por favor preencha o e-mail",Toast.LENGTH_SHORT).show();
                    return;
                }

                firebaseAuth.sendPasswordResetEmail(email)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if(task.isSuccessful()){
                                    Toast.makeText(getApplicationContext(),"O link de redefinição de senha foi enviado com seu endereço de e-mail",Toast.LENGTH_SHORT).show();
                                }
                                else{
                                    Toast.makeText(getApplicationContext(),"Erro de envio de e-mail",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
            }
        });


    }
}

Graças ao método sendPasswordResetEmail (), o serviço Firebase Authentication envia ao nosso link de redefinição de senha de endereço de e-mail. Método OnCompleteListener (), verifica os eventos de resultado. Se for bem sucedido neste método, o link de redefinição de senha será enviado para seu endereço de e-mail.

Finalmente, faremos MainActivity para a tela de perfil.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:id="@+id/textView1"
        android:textColor="@color/colorAccent"
        android:textStyle="bold"
        android:layout_marginTop="100dp"
        android:textAlignment="center" />

    <Button
        android:id="@+id/userDelete"
        style="?android:textAppearanceSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Deletar usuário"
        android:textColor="@android:color/white"
        android:textStyle="bold"
        android:background="@android:color/holo_blue_bright"/>
    <Button
        android:id="@+id/Sair"
        style="?android:textAppearanceSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Logout"
        android:textColor="@android:color/white"
        android:textStyle="bold"
        android:background="@color/colorAccent"/>

</LinearLayout>

Então, faremos o arquivo MainActivity.java.

package com.example.capsistema.authexample;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Button btnDeleteUser,btnLogout;
    FirebaseAuth firebaseAuth;
    private FirebaseAuth.AuthStateListener  authStateListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textView1);
        btnDeleteUser =(Button) findViewById(R.id.kullaniciSil);
        btnLogout =(Button) findViewById(R.id.cikis_yap);

        firebaseAuth = FirebaseAuth.getInstance();

        authStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if(user == null){
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                    finish();
                }
            }
        };

        final FirebaseUser user  = firebaseAuth.getCurrentUser();
        textView.setText("Oi " + user.getDisplayName());

         btnDeleteUser.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 if(user!=null){
                     user.delete()
                             .addOnCompleteListener(new OnCompleteListener<Void>() {
                                 @Override
                                 public void onComplete(@NonNull Task<Void> task) {
                                     if(task.isSuccessful()){
                                         Toast.makeText(getApplicationContext(),"Usuário excluído",Toast.LENGTH_SHORT).show();
                                         startActivity(new Intent(getApplicationContext(),RegisterActivity.class));
                                         finish();
                                     }
                                 }
                             });
                 }
             }
         });

         btnLogout.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 firebaseAuth.signOut();
                 startActivity(new Intent(getApplicationContext(),LoginActivity.class));
                 finish();
             }
         });


    }

    @Override
    protected void onStart() {
        super.onStart();
        firebaseAuth.addAuthStateListener(authStateListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(authStateListener!=null){
            firebaseAuth.removeAuthStateListener(authStateListener);
        }
    }
}

Criamos um ouvinte AuthStateListener, e esse ouvinte executa a seção onAuthStateChanged. Usamos o método getCurrentUser para acessar os dados do usuário.

Usando a classe Firebase User, excluímos a conta do usuário com o método delete (). Se o processo de exclusão for bem-sucedido, OnCompleteListener retornará verdadeiro.

Processamento de login concluído com sucesso. Se você gostou deste artigo, não se esqueça de aplaudi-lo. Muito obrigado pela leitura.

 

 

Visits: 1 Visits: 1200410