Cum să începeți cu notificări push pe Android

Introducere

Obținerea de utilizatori pentru a instala aplicația dvs. este doar jumătate din bătălie. Adu-le să-l folosească în mod regulat este cealaltă jumătate. Este foarte posibil ca utilizatorii dvs. să uite complet de aplicația dvs. după ce ați folosit-o o singură dată sau de două ori. Cu toate celelalte aplicații noi care concurează pentru atenția lor.

Prin utilizarea notificărilor push, puteți reaminti utilizatorilor despre aplicația dvs. din când în când, îmbunătățind șansele aplicației dvs. de a rămâne instalată pe dispozitivele dvs..

Google Cloud Messaging, GCM pe scurt, este un serviciu gratuit pe care îl puteți utiliza pentru a trimite notificări push utilizatorilor dvs. În acest tutorial, învățați cum să îl utilizați pentru a crea o aplicație Android care poate primi notificări push și un script Python simplu de pe server, care îi poate genera și trimite.

De ce să utilizați serviciul Google Cloud Messaging?

Pentru majoritatea comunicărilor client-server, clientul inițiază cereri de primire a datelor de la server. Cu alte cuvinte, clientul trage date de pe server. În cazul notificărilor push, cu toate acestea, serverul inițiază transferul de date.

Acest lucru este de obicei realizat prin menținerea unei conexiuni persistente TCP / IP - o conexiune care rămâne deschisă pe termen nelimitat - între server și client. S-ar putea suna foarte bine, dar dacă aveți o aplicație populară, menținerea a mii de conexiuni persistente între serverul dvs. și dispozitivele utilizatorilor dvs. poate fi foarte costisitoare.

Google Cloud Messaging este un serviciu care rezolvă această problemă, acționând ca intermediar între serverul dvs. și dispozitivul utilizatorului. Cu GCM, serverul Google Cloud Connection, denumit adesea CCS, gestionează conexiunile persistente pentru dvs. De asemenea, vă asigură că notificările dvs. push sunt livrate în siguranță și în mod fiabil.

Cerințe preliminare

Pentru a urmări împreună cu mine, aveți nevoie de:

  • cea mai recentă versiune de Android Studio
  • Python 2.7.6 sau mai mare
  • un dispozitiv care rulează Android 4.4 sau o versiune ulterioară cu serviciile Google Play instalate

1. Configurarea Proiectului Android Studio

Activați aplicația Android Studio și creați un nou proiect cu un spațiu gol Activitate. Dacă ați utilizat valorile implicite, proiectul ar trebui să includă o clasă Java în MainActivity.java.

Pasul 1: Adăugați dependențele

În acest proiect, vom utiliza pluginul pentru grajduri Google Services pentru a configura GCM. Includeți-l în proiect adăugând următoarea linie în dependențe secțiune a proiectului build.gradle:

groovy classpath 'com.google.gms: google-services: 1.5.0'

Apoi, aplicați pluginul în aplicaţia ale modulului build.gradle:

groovy apply plugin: 'com.google.gms.google-services'

Pentru a putea utiliza API-ul GCM, adăugați com.google.android.gms: play-servicii ca compila dependență în același fișier:

groovy compile "com.google.android.gms: play-services: 8.3.0"

Dacă faceți clic pe Sincronizați acum buton, ar trebui să vedeți următoarea eroare:

Apasă pe Instalați Depozit și sincronizați proiectul link pentru a remedia eroarea.

Pasul 2: Actualizați Manifestul

În interiorul proiectului AndroidManifest.xml fișier, creați și utilizați un personalizat C2D_MESSAGE permisiune bazată pe numele pachetului proiectului. Asigurați-vă că protectionLevel din permisiune este setat la semnătură.

„xml

"

Notificările sunt primite sub formă de emisiuni. Pentru a trata aceste emisiuni, aplicația noastră are nevoie de o BroadcastReceiver. Cu toate acestea, nu trebuie să îl creăm manual. Putem folosi în schimb GcmReceiver clasa ca BroadcastReceiver.

BroadcastReceiver trebuie să aibă un intenție-filtru care răspunde la com.google.android.c2dm.intent.RECEIVE acțiune și numele acesteia categorie trebuie să se potrivească cu numele pachetului proiectului. Adăugați în manifeste următorul cod:

„xml

"

2. Obțineți o cheie API pentru server și un ID de expeditor

În timp ce comunicăm cu serverul Cloud Connection, trebuie să ne identificăm folosind o cheie API pe partea de server și un ID de expeditor pe partea clientului. Pentru a obține cheia API și ID-ul expeditorului, creați un nou proiect în consola dezvoltatorilor.

Începeți făcând clic pe Alegeți o platformă buton. Apoi, faceți clic pe Activați serviciile pentru aplicația Android buton. Când faceți acest lucru, vi se va cere să furnizați un nume și un nume de pachet Android pentru aplicația dvs. Asigurați-vă că numele pachetului Android pe care îl furnizați corespunde cu numele pachetului pe care l-ați introdus când creați proiectul Android Studio.

Apoi, faceți clic pe Alegeți și configurați servicii butonul din partea de jos. Acum puteți selecta serviciile Google pe care doriți să le adăugați în aplicație.

Pentru moment, faceți clic pe Cloud Messaging apoi faceți clic pe Activați Google Cloud Messaging. După câteva secunde, veți primi cheia API pentru server și ID-ul expeditorului. Notați cheia API pentru server și apăsați Închide.

Pluginul Serviciilor Google pe care l-am adăugat mai devreme are nevoie de un fișier de configurare pentru a funcționa corect. Generați fișierul făcând clic pe Generați fișiere de configurare buton.

Odată ce fișierul a fost generat, descărcați-l și plasați-l în interiorul proiectului dvs. Android Studio aplicaţia director.

3. Înregistrarea Clientului

GCM identifică dispozitive Android care folosesc token-urile de înregistrare. Prin urmare, aplicația noastră trebuie să se poată înregistra de la fiecare dispozitiv Android pe care este instalat.

Pasul 1: Creați un serviciu de înregistrare

Înregistrarea trebuie făcută pe un fir de fundal, deoarece procesul ar putea dura ceva timp, în funcție de conectivitatea rețelei. Deoarece înregistrarea nu are nevoie de intrări de la utilizator, o IntentService este ideal pentru această sarcină.

Creați o nouă clasă Java numită RegistrationService.java, faceți o subclasă de IntentService, și suprascrie-i onHandleIntent metodă.

"clasa publica java RegistrationService extinde IntentService public RegistrationService () super (" RegistrationService ");

@Override protejat void onHandleIntent (Intent intention)  "

În interiorul onHandleIntent , putem utiliza API-ul ID-ului de instanță pentru a genera sau a prelua tokenul de înregistrare. Mai întâi, creați o instanță a InstanceID clasa, folosind getInstance metodă.

java InstanceID myID = ID InstanceID.getInstance (aceasta);

Acum putem folosi getToken metodă a InstanceID obiect pentru a obține jetonul de înregistrare sub formă de a Şir. getToken se așteaptă ca ID-ul expeditorului ca unul dintre argumentele sale. Pentru că am adăugat google-services.json dosar la proiectul nostru, putem transmite ID-ul expeditorului folosind metoda R.string.gcm_defaultSenderID.

java Înregistrarea șiruluiToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Dacă doriți să vedeți conținutul tokenului de înregistrare pentru depanare, îl puteți înregistra ca mesaj de depanare folosind Log.d metodă.

java Log.d ("Token de înregistrare", registrationToken);

În acest moment, puteți trimite jetonul de înregistrare pe serverul dvs. web și îl puteți stoca într-o bază de date acolo. Cu toate acestea, nu trebuie să faceți acest lucru dacă nu intenționați să vă adresați utilizatorilor în mod individual. Dacă intenționați să trimiteți același mesaj fiecărui utilizator, urmați metoda de publicare-abonare.

Acum vă voi arăta cum să vă abonați la a subiect denumit my_little_topic. Este nevoie de doar două rânduri de cod. Mai întâi, creați o nouă instanță a GcmPubSub clasa folosind getInstance metodă. Apoi, sunați-i Abonati-va și trimiteți tokenul de înregistrare, împreună cu numele subiectului.

java abonament GcmPubSub = GcmPubSub.getInstance (aceasta); subscription.subscribe (înregistrareaToken, "/ topics / my_little_topic", null);

Aplicația noastră poate primi acum toate notificările de împingere publicate către my_little_topic.

În cele din urmă, definiți serviciul în AndroidManifest.xml.

„xml

"

Serviciul de înregistrare este complet.

Pasul 2: Creați un InstanceIDListenerService

Înregistrarea jetoanelor este actualizată periodic. În consecință, fiecare aplicație Android care utilizează GCM trebuie să aibă un InstanceIDListenerService care se pot ocupa de aceste reîmprospătare. Prin urmare, creați un nou fișier Java numit TokenRefreshListenerService.java și să o facă o subclasă de InstanceIDListenerService. În interiorul onTokenRefresh metoda de clasă, tot ce trebuie să facem este pur și simplu să începem procesul de înregistrare din nou pornind de la serviciul de înregistrare folosind un scop si startService metodă.

Adăugați următorul cod la TokenRefreshListenerService.java:

Clasa publică java TokenRefreshListenerService extinde InstanceIDListenerService @Override public void onTokenRefresh () Intent i = Intenție nouă (acest lucru, RegistrationService.class); startService (i);

Acest serviciu trebuie să fie capabil să răspundă la com.google.android.gms.iid.InstanceID acțiune. Prin urmare, în timp ce definim serviciul în AndroidManifest.xml, adăugați corespunzător intenție-filtru.

„xml

"

Pasul 3: Începutul serviciului de înregistrare

Pentru a vă asigura că procesul de înregistrare începe imediat ce începe aplicația, trebuie să porniți RegistrationService clasa în interiorul onCreate Metodă de Activitate principala. Pentru a face acest lucru, creați un scop pentru el și de a folosi startService metodă.

java intenție i = intenție nouă (aceasta, RegistrationService.class); startService (i);

4. Afișarea notificărilor push

GCM afișează automat notificările push în tava de notificare de îndată ce acestea sunt primite. Totuși, acest lucru se întâmplă numai dacă aplicația asociată conține o GCMListenerService.

Creați o nouă clasă Java numită NotificationsListenerService și să o facă o subclasă de GCMListenerService. Cu excepția cazului în care doriți să vă ocupați de datele împinse de dvs., nu trebuie să scrieți niciun cod în interiorul acestei clase. Putem lăsa acum această clasă goală.

"java public class NotificationsListenerService extinde GcmListenerService

În timp ce definim serviciul în AndroidManifest.xml, asigurați-vă că adăugați un intenție-filtru care îi permite să răspundă la com.google.android.c2dm.intent.RECEIVE acțiune.

„xml

"

5. Adăugarea de pictograme de notificare Push

Fiecare notificare push trebuie să aibă o pictogramă asociată cu aceasta. Dacă nu aveți unul la îndemână, puteți obține unul de la Biblioteca de materiale de proiectare Google.

După ce descărcați pictograma, plasați-o înăuntru res dosarul proiectului. Voi folosi ic_cloud_white_48dp ca pictogramă.

6. Rularea aplicației Android

Aplicația noastră Android este acum completă. După ce îl compilați și îl rulați pe un dispozitiv Android, veți putea vedea jetonul de înregistrare în logcat busteni.

Apăsați butonul din spate de pe dispozitiv pentru a ieși din aplicație. Acest lucru este necesar deoarece GCM va afișa automat notificări push numai dacă utilizatorul nu utilizează aplicația. Dacă doriți ca notificările să fie afișate chiar și când aplicația este difuzată, va trebui să creați notificările în interiorul dvs. NotificationsListenerService folosind Notification.Builder clasă.

7. Trimiterea notificărilor Push

În partea finală a acestui tutorial, vom crea un simplu script Python care poate genera și trimite notificări push către toate dispozitivele Android pe care este instalată aplicația noastră.

Puteți rula acest script de pe computerul dvs. local sau de la un server web la distanță la care aveți acces SSH.

Pasul 1: Crearea scriptului

Creați un fișier nou numit send.py și deschideți-l utilizând editorul de text preferat.

În partea de sus a fișierului, importați urllib2 și urllib module. Vom folosi aceste module pentru a trimite date către serverul Google Cloud Connection Server. Importați JSON modul, deoarece datele pe care le trimitem trebuie să fie valabile JSON. În cele din urmă, pentru a accesa argumentele liniei de comandă, importați sys modul.

de la urllib2 import * import urllib import json import sys

Apoi, creați o variabilă care stochează cheia API pentru server pe care ați luat-o la cunoștință mai devreme. Cheia trebuie să facă parte din fiecare cerere HTTP pe care o facem pentru CCS.

python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"

Fiecare notificare trebuie să aibă un titlu și un organism. În loc să le codificăm greu în scenariul nostru, să acceptăm titlul și corpul ca argumente de linie de comandă folosind argv mulțime.

mesajul pythonTitle = sys.argv [1] messageBody = sys.argv [2]

Creați un nou obiect al dicționarului Python pentru a reprezenta datele care ar trebui trimise la CCS. Pentru ca aplicația noastră Android să poată primi notificarea, aceasta trebuie publicată pe un subiect numit my_little_topic. Prin urmare, adăugați o cheie numită la la dicționar și setați valoarea acestuia / Subiecte / my_little_topic.

Pentru a reprezenta conținutul notificării, adăugați o cheie numită notificare la dicționar și setați valoarea acestuia într-un alt obiect dicționar care conține trei chei:

  • corp
  • titlu
  • icoană

Asigurați-vă că valoarea lui icoană cheie se potrivește cu numele icoanei trasabil în proiectul dvs. Android.

date python = "to": "/ topics / my_little_topic", "notificare": "body": messageBody, "title": messageTitle, "icon": "ic_cloud_white_48dp"

Conversia dicționarului într - un șir JSON utilizând splin funcția JSON modul:

python dataAsJSON = json.dumps (date)

Tot ce trebuie să facem acum este trimiterea șirului JSON la adresa https://gcm-http.googleapis.com/gcm/send. Pentru a face acest lucru, creați un nou Cerere obiect și set dataAsJSON ca și datele sale. Apoi, setați Autorizare header la MY_API_KEY si Tipul de conținut header la application / json.

solicitarea python = Solicitare ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "Authorization": "key =" + MY_API_KEY, "Content-type": "application / json"

În cele din urmă, pentru a executa cererea și a prelua răspunsul, trimiteți obiectul cererii la urlopen funcția și apelați-o citit metodă.

python print urlopen (cerere) .read ()

Scriptul Python este acum complet și gata de utilizare.

Pasul 2: Rularea scriptului

În acest moment, suntem gata să trimitem notificări push către toate dispozitivele pe care este instalată aplicația noastră. Deschideți un terminal și introduceți directorul în care ați creat send.py.

Treceți numele scriptului la piton executabil, împreună cu un șir pentru titlul notificării și unul pentru organismul notificării. Iată un exemplu pe care îl puteți utiliza:

bash python send.py "Notificarea mea de prim push" "API-ul GCM este minunat!"

Dacă nu există erori, ar trebui să primiți un răspuns care arată astfel:

javascript "message_id": 12345676892321

Dacă verificați dispozitivul Android, ar trebui să vedeți o notificare nouă în tava de notificare.

Concluzie

Acum știți cum să trimiteți notificări push utilizatorilor dvs. În această lecție, ați învățat cum să creați o aplicație Android capabilă să se înregistreze și să primească notificări publicate pe un anumit subiect. De asemenea, ați învățat cum să creați un script Python care poate publica notificări.

Chiar dacă notificările push se pot simți ca o modalitate foarte bună de a comunica cu utilizatorii dvs., vă sugerăm să le folosiți cu ușurință și numai dacă aveți ceva util de spus, deoarece trimiterea prea multor dintre ele prea adesea este probabil cel mai rapid mod de a obține aplicația dezinstalat.

Pentru a afla mai multe despre Google Cloud Messaging, consultați Ghidul pentru mesaje cloud.

Cod