Firebase in ANDROID

Buonasera ,sperando di avere abbastanza tempo vorrei parlare in questa pagina di Firebase ,un potente database realtime OnLine!
Per implementare Firebase in un applicazione Android ,esistono due modi uno e’ piu’ semplice :FirebaseUI Auth e l’altro e’ quello di usare le piu’ complete librerie offerte dall’SDK.
Come gia’ accennato sopra con SDK e’ un po piu’ elaborata l’implementazione ma offre piu’ funzioni come ad esempio il reset password fatto direttamente dall’utente dell’app.
Bene non ci resta che metterci a lavoro e scrivere unpo di codice!


andiamo all'indirizzo https://firebase.google.com
accediamo alla console e creiamo un nuovo progetto
chiamiamolo "FirebaseNuovoProgetto"

Autenticazione a Firebase

La prima cosa da fare e’ autenticarsi al Database e in questo ci viene in aiuto la classe FirebaseUser

quindi nella nuova acivity che chiameremo "FirebaseAuthEmail "importeremo tale classe
import com.google.firebase.auth.FirebaseUser;
e di conseguenza la sua funzione getCurrentUser(),
essa conterra' informazioni dell' utente come nome, email,url della foto e l'importantissimo ID l'identificativo offerto dal provider per idenificare l'utente nell'app.
Qui per Provider si intende Google,Facebook,Twitter ecc..


Con la classe AuthCredential incapsulremo il token di identificazione utente per renderlo compatibile con i vari Provider.Cosi’ avremo:
EmailAuthCredential
PhoneAuthCredential
FacebookAuthCredential
GithubAuthCredential
GoogleAuthCredential
TwitterAuthCredential

Primo metodo di autenticazione: “FirebaseUI Auth”
1-Per prima cosa faremo una richiesta di registrazione dell’utente ai vari Provider
2-implementeremo le librerie necessarie
3-useremo gli Intent offerti dal metodo per poterci registrare
4-Analizzeremo il risultato ottenuto dalla richiesta che abbiamo fatto con l’Intent

primo progetto FirebaseAuth

Clicciamo sul menu “Tools” e scegliamo la voce “Firebase”.
Si aprira’ una finestra laterale scegliamo “Authentication”.
Clicchiamo sulla voce “Email and password authentication”
comparira’ una serie di bottoni che ci permetteranno di collegarci al database Firebase impostato in precedenza.Il mio Database l’ho chiamato “progettofirebase” colleghiamoci
al database tramite il bottone sottostante.
Aggiungiamo l’autenticazione alla nostra app tramite la scelta propostaci da Android Studio.

Ci viene proposto di agiungere delle librerie,aggiungiamole.
Notiamo che nella colonna di sinistra sotto il menu “File”
nella directory “app” compare ora un file con estensione “.json” in questo file sono contenute le informazioni necessarie per il collegamente al database.

Nel file build.gradle(:app) aggiuniamo le librerie necessarie

implementation 'com.firebaseui:firebase-ui:2.0.1'
implementation 'com.firebaseui:firebase-ui-auth:2.0.1'

Colleghiamoci alla console di firebase

https://firebase.google.com

selezioniamo il nostro progettofirebase ,scegliamo il menu Authentication e poi il menu “metodo di accesso” ,abilitiamo
email/password.

Per conoscere se l’utente sia registrato o meno ci servira’ un istanza di com.google.firebase.auth.FirebaseAuth

import com.google.firebase.auth.FirebaseAuth;

L’interrogzione la faremo con un Intent messo a disposizione dalla classe.
impostiamo la variabile “private FirebaseAuth auth;” e in onCreate
ci accertiamo che l’utente sia gia’ registrato

auth = FirebaseAuth.getInstance();

if (auth.getCurrentUser() != null) { startActivity(new Intent(this, RegistratoActivity.class)); finish(); } else { AutenticaUtente(); }


ackage org.altervita.ultimaprovaprimadi.firebaseauthemail;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.google.firebase.auth.FirebaseAuth;

public class FirebaseAuthEmailUser extends AppCompatActivity {
private FirebaseAuth auth;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firebase_auth);
auth = FirebaseAuth.getInstance();

if (auth.getCurrentUser() != null) {
startActivity(new Intent(this,
Registrato_Activity.class));finish(); }
else {autenticaUtente(); }
}
private static final int REQUEST_CODE = 101;

private void autenticaUtente() {
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(ottieniProviderList())
.setIsSmartLockEnabled(false) .build(), REQUEST_CODE);
}
private List ottieniProviderList() {
List providers = new ArrayList<>();

providers.add( new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build());

return providers;
}
}

Come accennato sopra per ottenere i dati dell’ utente ci serviremo di un Intent con startActivityForResult grazie al metodo “private void autenticaUtente()”.Tramite il metodo
“ottieniProviderList()” otterremo la lista dei provider.
Andiamo a leggere ora i risutati dell’interrogazione, ma per fare cio’ dobiamo importare alcue cose

import com.firebase.ui.auth.AuthUI;

import com.firebase.ui.auth.ErrorCodes; import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.ResultCodes; import
import java.util.ArrayList;
import java.util.List;
===================================================
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

IdpResponse response = IdpResponse.fromResultIntent(data);

if (requestCode == REQUEST_CODE) {

if (resultCode == Activity.RESULT_OK) {
startActivity(new Intent(this, Registrato_Activity.class));
return;
}
} else {
if (response == null) {
// L'utente si e' cancellato
return;
}

if (response.getErrorCode() == ErrorCodes.NO_NETWORK) {
// non c'e' conessione di rete
return;
}

if (response.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
// errore sconosciuto
return;
}
}
}

Creiamo una seconda activity :”Registrato_activity”

Quest’ultima activitysara’ chiamata da FirebaseAuthActivity se l’utente e’ gia’ registrato.Essa visuaizzera’ il nome dell’ utente e la sua email.
Inoltre l’ctiviti tramite il metodo “esciFuori”permettera all’utente di abbandonare la sessione.
Importiamo alcune classi:

import android.view.View; import android.widget.TextView;

import com.firebase.ui.auth.AuthUI; 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;

==========================================================
=============Registrato_activity.class=====================

package org.altervita.ultimaprovaprimadi.firebaseauthemail;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

import com.firebase.ui.auth.AuthUI;
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 Registrato_Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registrato_);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});

FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

if (currentUser == null) { startActivity(new Intent(this, FirebaseAuthEmailUser.class)); finish(); return; }

TextView email = (TextView) findViewById(R.id.email);
TextView displayname = (TextView) findViewById(R.id.displayname);

email.setText(currentUser.getEmail());
displayname.setText(currentUser.getDisplayName());
}
public void esciFuori(View view) {
AuthUI.getInstance() .signOut(this)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
startActivity(
new Intent( Registrato_Activity.this,
FirebaseAuthEmailUser.class)); finish();
} else { } } }); }

}
=============================================================
Ci servira’ ora un ultimo bottone “Cancella User”
Co questo bottone cancelleremo dal database le credenziali dell’utente.
Riandiamo nella cosole firebase ,nel nostroprogetto nella sezione autenticazione selezionando “modelli” e’ possibile resettare la password degli utenti.

FIREBASE DATABASE REALTIME

Bene,ora che abbiamo ottenuto l’autenticazione vediamo di poter implementare un database personalizzato per l’utente.
aggiungiamo un altro bottone e passiamo al database.
Sempre da menu “Tools” scegliamo “Firebase” e poi la voce “Realtime Database”.
clicchiamo sul bottone “add realtime database”,ci verrano proposte delle librerie da accettare,accettiamo.

Caratteristiche del Database di Firebase

aggiungendo al file gradle implementation ‘com.google.firebase:firebase-database:11.0.1’
assicuriamo la persistenza dei dati in locale anche se la nostr app non e’ collegata a internet