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.
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.
Pentru a urmări împreună cu mine, aveți nevoie de:
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.
Î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.
Î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
"
Î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.
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.
Î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.
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
"
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);
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
"
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ă.
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ă.
Î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.
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:
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.
Î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.
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.