En aquest tema, explorarem les capacitats fora de línia de la base de dades en temps real de Firebase. Aquestes capacitats permeten que les aplicacions continuïn funcionant correctament fins i tot quan no hi ha connexió a Internet. Això és especialment útil per a aplicacions mòbils que poden experimentar connexions intermitents.
Objectius d'aprenentatge
- Entendre com funciona la sincronització fora de línia en Firebase.
- Aprendre a habilitar les capacitats fora de línia.
- Gestionar dades fora de línia i sincronitzar-les quan es restableix la connexió.
- Introducció a les capacitats fora de línia
Firebase proporciona suport fora de línia per a la seva base de dades en temps real, el que significa que les aplicacions poden:
- Continuar funcionant sense connexió a Internet.
- Emmagatzemar dades localment fins que es restableixi la connexió.
- Sincronitzar automàticament les dades locals amb el servidor quan es restableix la connexió.
- Habilitar les capacitats fora de línia
Per habilitar les capacitats fora de línia, cal configurar la base de dades en temps real perquè emmagatzemi dades localment. A continuació es mostra com fer-ho en diferents plataformes:
Android
// Habilitar la persistència fora de línia FirebaseDatabase.getInstance().setPersistenceEnabled(true);
iOS (Swift)
Web (JavaScript)
- Lectura i escriptura de dades fora de línia
Quan la persistència fora de línia està habilitada, les operacions de lectura i escriptura es gestionen de la següent manera:
Lectura de dades
- Les dades es llegeixen primer de la memòria cau local.
- Si les dades no estan disponibles localment, es fa una sol·licitud al servidor.
Escriptura de dades
- Les dades es guarden primer localment.
- Quan es restableix la connexió, les dades es sincronitzen automàticament amb el servidor.
Exemple en Android
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("missatges"); // Escriure dades myRef.setValue("Hola, món!"); // Llegir dades myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String missatge = dataSnapshot.getValue(String.class); System.out.println(missatge); } @Override public void onCancelled(DatabaseError databaseError) { // Gestionar errors } });
- Sincronització de dades
Quan l'aplicació recupera la connexió a Internet, Firebase sincronitza automàticament les dades locals amb el servidor. Això inclou:
- Enviar les dades que s'han escrit localment al servidor.
- Actualitzar les dades locals amb els canvis del servidor.
- Consells i bones pràctiques
- Gestionar conflictes de dades: Quan es restableix la connexió, poden sorgir conflictes de dades. És important gestionar aquests conflictes adequadament.
- Optimitzar l'ús de la memòria cau: Habilitar la persistència fora de línia pot augmentar l'ús de la memòria. Assegura't de gestionar la memòria cau de manera eficient.
- Provar en diferents condicions de xarxa: Prova l'aplicació en diferents condicions de xarxa per assegurar-te que les capacitats fora de línia funcionen correctament.
Exercici pràctic
Objectiu
Crear una aplicació simple que permeti als usuaris afegir i veure missatges, fins i tot quan no hi ha connexió a Internet.
Passos
- Configura Firebase a la teva aplicació.
- Habilita la persistència fora de línia.
- Crea una interfície d'usuari per afegir i veure missatges.
- Implementa la funcionalitat per afegir missatges a la base de dades.
- Implementa la funcionalitat per llegir missatges de la base de dades.
Solució
Android (Java)
// MainActivity.java public class MainActivity extends AppCompatActivity { private DatabaseReference myRef; private EditText editTextMessage; private TextView textViewMessages; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Habilitar la persistència fora de línia FirebaseDatabase.getInstance().setPersistenceEnabled(true); myRef = FirebaseDatabase.getInstance().getReference("missatges"); editTextMessage = findViewById(R.id.editTextMessage); textViewMessages = findViewById(R.id.textViewMessages); findViewById(R.id.buttonSend).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = editTextMessage.getText().toString(); if (!message.isEmpty()) { myRef.push().setValue(message); editTextMessage.setText(""); } } }); myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { StringBuilder messages = new StringBuilder(); for (DataSnapshot snapshot : dataSnapshot.getChildren()) { String message = snapshot.getValue(String.class); messages.append(message).append("\n"); } textViewMessages.setText(messages.toString()); } @Override public void onCancelled(DatabaseError databaseError) { // Gestionar errors } }); } }
iOS (Swift)
// ViewController.swift import UIKit import Firebase class ViewController: UIViewController { var ref: DatabaseReference! @IBOutlet weak var textFieldMessage: UITextField! @IBOutlet weak var textViewMessages: UITextView! override func viewDidLoad() { super.viewDidLoad() // Habilitar la persistència fora de línia Database.database().isPersistenceEnabled = true ref = Database.database().reference().child("missatges") ref.observe(.value, with: { snapshot in var messages = "" for child in snapshot.children { if let snapshot = child as? DataSnapshot, let message = snapshot.value as? String { messages += "\(message)\n" } } self.textViewMessages.text = messages }) } @IBAction func sendMessage(_ sender: UIButton) { if let message = textFieldMessage.text, !message.isEmpty { ref.childByAutoId().setValue(message) textFieldMessage.text = "" } } }
Resum
En aquest tema, hem après com habilitar i utilitzar les capacitats fora de línia de la base de dades en temps real de Firebase. Hem vist com les dades es poden emmagatzemar localment i sincronitzar-se automàticament quan es restableix la connexió a Internet. També hem implementat una aplicació simple per posar en pràctica aquests conceptes.
Curs de Firebase
Mòdul 1: Introducció a Firebase
Mòdul 2: Autenticació de Firebase
- Introducció a l'autenticació de Firebase
- Autenticació amb correu electrònic i contrasenya
- Autenticació amb xarxes socials
- Gestió d'usuaris
Mòdul 3: Base de dades en temps real de Firebase
- Introducció a la base de dades en temps real
- Lectura i escriptura de dades
- Estructura de dades i regles de seguretat
- Capacitats fora de línia
Mòdul 4: Cloud Firestore
- Introducció a Cloud Firestore
- Model de dades de Firestore
- Operacions CRUD
- Consultes avançades
- Regles de seguretat
Mòdul 5: Emmagatzematge de Firebase
- Introducció a l'emmagatzematge de Firebase
- Carregar fitxers
- Descarregar fitxers
- Metadades de fitxers i seguretat
Mòdul 6: Missatgeria en el núvol de Firebase
- Introducció a la missatgeria en el núvol
- Enviar notificacions
- Gestionar notificacions
- Funcions avançades de missatgeria
Mòdul 7: Analítica de Firebase
Mòdul 8: Funcions de Firebase
Mòdul 9: Monitoratge del rendiment de Firebase
- Introducció al monitoratge del rendiment
- Configuració del monitoratge del rendiment
- Analitzar dades de rendiment