La una din precedentele conferintele Google IO, gigantul Google a anuntat lansarea Google Cloud Messaging, sau GCM, ca si inlocuitor al protocolului Cloud to Device Messaging (C2DM).
Google Cloud Messaging for Android (GCM) este un serviciu ce permite trimiterea de date de la propriul server catre useri ce folosesc dispozitive ce ruleaza sisteme de operare Android.
De aici deriva si termenul de Push notification, prin intermediul caruia userul este anuntat de anumite modificari. GCM elimina cererile repetate la server si astfel salveaza bateria telefonului si consumul de date. Un alt avantaj e reprezentat de faptul ca desi telefonul nu a avut o perioada lunga de timp conexiune la internet, imediat ce acesta este conectat la wifi sau 3g notificarile trimise anterior vor fi primite.
Aici sunt caracteristicile principale ale Google Cloud Messaging (GCM):
- Acesta permite serverelor de aplicatii terte trimiterea mesajelor catre propriile aplicatii Android.
- Pentru a putea primi mesaje nu este necesara rulare unei aplicatii Android ce se afla pe un dispozitiv cu SO Android. Atunci cand mesajul ajunge, sistemul apeleaza aplicatia Android prin Intent broadcast, atat timp cat aplicatia este setata cu permisiunile si broadcastul potrivit.
- Nu ofera nici o interfata gata construita sau alt mod de manevrare al mesajelor. GCM pur si simplu transmite mesaje brute, ele fiind primite direct in aplicatia Android, exercitand un control deosebit asupra lor. De exemplu aplicatia poate posta notificari, afisa o interfata de utilizator personalizata sau sincroniza date.
- Necesita dispozitive care sa ruleze Android 2.2 or higher ce deasemenea au si Google Play Store instalat, sau un emulator ce ruleaza Android 2.2 cu API-uri Google.
- Foloseste o conexiune existenta pentru servicii Google. Pentru dispozitive pre 3.0, necesita din partea userilor setarea contului lor Google pe propriul dispozitiv mobil. Un cont Google nu este o necesitate pe dispozitivele ce ruleaza Android 4.0.4 sau mai mult.
Prezentare Generala
- Componente – Entitatile fizice ce joaca un rol important in GCM
- Prerogative – ID-urile si tokenurile ce sunt folosite in diferite etape a GCM pentru a asigura autentificarea si trimiterea corecta a mesajelor.
Componente | |
Dispozitive Mobile | Dispozitivul ce ruleaza o aplicatie Android care foloseste GCM. Acesta trebuie sa fie un dispozitiv Android 2.2 ce are Google Play Store instalat si trebuie sa aiba cel putin un logg in contul Google daca dispozitivul ruleaza o versiune mai veche decat 4.0.4. Pentru test se poate folosi un emulator ce ruleaza Android 2.2 cu API-uri Google. |
Aplicatii Server Terte | O aplicatie server pe care programatorii seteaza ca parte a implementarii GCM in propria aplicatie. Aplicatia server terta trimite datale catre o aplicatie Android via serverul GCM. |
Serverele GCM | Serverele Google implicate in preluarea mesajelor de la serverul aplicatiei terte si trimiterea lor catre dispozitiv. |
Prerogative | |
Sender ID | Numar proiect preluat de la consola API astfel descris ca in modulul Getting Started. ID-ul sender este folosit in procesul de inregistrare pentru a identifica o aplicatie Android ce trimite mesaje catre respectivul dispozitiv. |
ID Aplicatie | Aplicatia Android ce este inregistreaza pentru a primi mesaje. Aplicatia Android este identificata prin numele pachetului din manifest. Acest lucru asigura ca mesajele sunt directionate catre aplicatia Android corecta. |
Registration ID | Un ID emis de serverele GCM catre aplicatia Android, care-i permite primirea de mesaje. O data ce aplicatia Android are ID-ul de inregistrare, il trimite la serverul de aplicatii terte, care il foloseste la identificarea fiecarui dispozitiv care s-a inregistrat pentru a primi mesaje pentru o anumita aplicatie Android. Cu alte cuvinte, un ID de inregistrare este legat de o anumita aplicatie Android care ruleaza pe un anumit dispozitiv. |
Cont de utilizator Google | Pentru ca GCM sa lucreze, dispozitivul mobil trebuie sa includa cel putin un cont Google daca dispozitivul foloseste o versiune mai veche de Android 4.0.4. |
Sender Auth Token | O cheie API, care este stocata pe serverul de aplicatii terte ce ofera serverului accesul autorizat la serviciile Google. Cheia API este inclusa in antetul de cereri POST ce trimite mesajele. |
Procesul de lucru
Mai jos gasiti procesele principale implicate in mesageria de tip cloud-to-device
- Activarea GCM. O aplicatie Android ce ruleaza pe un dispozitiv mobil se inregistreaza pentru a primi mesaje.
- Trimiterea unui mesaj. Un server de aplicatii terte trimite mesaje la dispozitivul respectiv.
- Primirea unui mesaj. O aplicatie Android primeste un mesaj de la un server GCM.
Consola Google API
- Click Create project
- Activati Serviciul GCM
- Obtinerea unui API Key
Implementare
- Copiati fisierul gcm.jar in aplicatia classpath.
- Completati clasa my_app_package.GCMIntentService
- Scrie activitate principala a aplicatiei
GCM inlocuieste C2DM
Android Cloud to Device Messaging (C2DM) este depasita. Dezvoltatorii trebuie sa utilizeze GCM pentru noile dezvoltari. Migrarea aplicatiei presupune unele mici modificari.
Modificari client
Modificari server
Sending messages to GCM devices requires a few changes:
- The request should be sent to a new endpoint: https://android.googleapis.com/gcm/send.
- The Authorization header of the request should contain the API key generated during sign up. This key replaces the deprecated ClientLogin Auth token.
Utilizarea GCM in aplicatiile din Portofoliu Roweb – HEY YOU
GCM este folosit in unul din proiectele noastre – Hey You
Hey You este o aplicatie sociala bazate pe locatie, care va permite sa cautati oameni care se potrivesc listei dvs de interese. Aceasta aplicatie gaseste cele mai bune potriviri si va ajuta sa socializati si sa cunoasteti oameni noi si prieteni. Datorita sistemului de sugestie de utilizare inteligenta a Hey You, utilizatorul poate ajunge cu usurinta la profilurile de utilizator cele mai potrivite.
Principalele caracteristici ale acestei aplicatii sunt:
- CREEAZA CONT – utilizatorul are posibilitatea de a crea un cont si a unei listei de interese.
- HARTA – locatia userului este afisata pe harta dar si pozitia celorlalti utilizatori
- SETARI DE CONFIDENTIALITATE – utilizatorul poate sau nu sa partajeze datele de si, de asemenea, sa fie sau nu vizibil pentru alti utilizatori.
- SELECTARE STARE SPIRIT – conform cu sentimentele si conditiile utilizatorul poate selecta starea de spirit care va fi afisata pe harta.
- PROFIL DINAMIC – criteriul de potrivire al userului poate fi schimbat si cautarea va fi facuta conform cu interesele noii liste.
- CHAT LIVE – utilizatorul trimite si primeste mesaje. Camera de conversare poate fi publica sau privata.
- TRIMITERE NOTIFICARI – la fiecare actiune (mesaj nou, o noua invitatie la chat) utilizatorul este notificat in timp real.
Deasemenea folosim mai multe tehnologii pentru a obtine excelente app similare:
- JSON structura tip continut
- Google Cloud Messaging
- Google Maps Versiunea 2
- Baza de date locale SQLite utilizand GreenDAO ORM
- layer prezentare: XML
- Android 2.2 +
Utilizatorul are posibilitatea sa converseze utilizand GCM. Partea interesanta la Google Cloud Messaging este primirea mesajelor trimise din cloud.
Utilizatorul poate crea din aplicatie una sau mai multe camere de chat, astfel mesajele fiind trimise in timp real. Chiar daca userul nu este online, mesajele vor fi salvate in Cloud iar in momentul in care dispozitivul este din nou conectat la internet toate mesajele cachuite vor fi afisate.
Lectii invatate
In acest post ati vazut cum fluxul de mesaje s-a schimbat folosind Google Cloud Messaging. Cu modelul precedent era necesara contactarea serverului direct de la dispozitiv, acum doar spuneti Serviciilor Google ce sa faca cu noul model de mesaj upstream. Serviciile Google au grija de trimiterea fizica a mesajelor catre server.
Deasemenea am invatat cum sa configuram proiectul in consola de developer a Google si pentru folosirea noilor functionalitati.
In final am observat cat de simplu este codul Android si care sunt beneficiile mesajelor upstream.
Principalul lucru care trebuie totusi retinut este Gasirea unui intrument pentru un anumit scop, nu un scop pentru un anumit instrument! Daca ai nevoie de el, el exista.
Resurse:
http://developer.android.com/
https://developers.google.com/events/io/