Firebase Cloud Messaging
Fiind la capitolul networking, vom încerca o funcționalitate de networking întâlnită foarte des în Android: push notifications.
Firebase Cloud Messaging (FCM) este un serviciu de mesagerie bazat pe cloud, oferit de Google, care permite trimiterea de mesaje și notificări către dispozitive Android, iOS și aplicații web. FCM oferă o infrastructură scalabilă pentru livrarea de notificări push și mesaje personalizate în timp real, fie că aplicația este activă, în fundal sau închisă.
Arhitectura sa se bazează pe un canal bidirecțional între serverele Firebase și dispozitivele utilizatorilor. FCM suportă două tipuri principale de mesaje:
- Mesaje de notificare – Utilizate pentru afișarea de mesaje vizibile utilizatorilor, gestionate de FCM
- Mesaje de date – Mesaje personalizate care declanșează logica aplicației fără afișarea implicită a notificărilor
Fluxul mesajelor
- Înregistrarea dispozitivelor: Fiecare dispozitiv obține un registration token unic generat de FCM, care este asociat cu aplicația instalată.
- Trimiterea mesajelor: Mesajele sunt trimise de serverul aplicației către FCM sau direct din Firebase Console, specificând token-ul dispozitivului sau un grup de utilizatori (topic-uri sau grupuri).
- Livrarea mesajelor: FCM prioritizează livrarea mesajelor și oferă mecanisme de retry pentru dispozitive offline.
Tipuri de mesaje
- Mesaje de notificare: Conțin un payload specific de notificare (titlu, body, imagine).
- Mesaje de date: Conțin un payload personalizat definit de dezvoltator. Necesită procesare manuală în aplicație, indiferent de starea acesteia si nu au o interfata vizuala pentru utilizator.
- Mesaje mixte: Combinație între notificări și date.
Pentru a ne asigura ca mesajele trimise prin intermediul FCM ajung la destinatar, putem seta un nivel de prioritate:
- High Priority: Livrare imediată, utilizată pentru notificări critice
- Normal Priority: Optimizată pentru economisirea bateriei (e.g., mesaje non-critice)
Note: Indiferent de prioritatea sau tipul de mesaje trimis prin intermediul FCM, livrarea acestora la destinatar poate fi influentata de limitele impuse de sistemul de operare(e.g., mecanisme de optimizare a duratei de viata a bateriei).
Mesajele pot avea ca destinatar/target:
- un topic - un "canal" de notificari utilizat pentru a emite mesaje care fac parte dintr-o anumita categorie (e.g., "noutati", "promotii")
- un token: vizeaza dispozitivul care are asociat token-ul specificat
- un grup de tokeni sau un grup asociat unei aplicatii
Note: Pentru a putea primi mesaje trimise pe un anumit topic, este nevoie ca utilizatorul sa faca
subscribe
la topicul respectiv. De asemenea, exista si operatia complementara deunsubscribe
care opreste primirea mesajelor trimise pe un anumit topic.
Folosirea serviciului FCM in cadrul unei aplicatii este conditionata de:
- Crearea unui proiect în Firebase Console
- crearea unui proiect cu acelasi package name/ID ca si aplicatia pentru care ne dorim implementarea serviciului
- adaugarea, in proiect, a servicului de Cloud Messaging
- Configurarea aplicației mobile Android
- Descărcarea fișierului google-services.json, care trebuie plasat în directorul app/ din proiectul Android
- adaugarea SDK-ul Firebase pentru a putea utiliza FCM. Acest lucru implică adăugarea dependențelor necesare în fișierul build.gradle
- Permisiunea de a primi notificari in aplicatie
Note: Incepand cu Android 13, permisiunea de a primi notificari in cadrul aplicatiei trebuie ceruta in mod explicit utilizatorului.