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
