Få brukere til å installere appen din er bare halvparten av kampen. Å få dem til å bruke det regelmessig, er den andre halvdelen. Det er ganske mulig at brukerne dine helt glemmer appen din etter å ha brukt den en eller to ganger. Hva med alle de andre nye appene som konkurrerer om deres oppmerksomhet.
Ved å bruke push-varsler, kan du minne brukerne om appen din nå og da, og forbedre sjansene for at appen din blir installert på enhetene sine.
Google Cloud Messaging, GCM for short, er en gratis tjeneste du kan bruke til å sende push varsler til brukerne dine. I denne opplæringen lærer du hvordan du bruker den til å lage en Android-app som kan motta push-varsler, og et enkelt Python-script på tjenersiden som kan generere og sende dem.
For de fleste klient-serverkommunikasjon initierer klienten forespørsler om å motta data fra serveren. Med andre ord trekker klienten data fra serveren. I tilfelle av push-varsler er det imidlertid serveren som initierer dataoverføringen.
Dette oppnås vanligvis ved å opprettholde en vedvarende TCP / IP-tilkobling - en forbindelse som forblir åpen på ubestemt tid mellom serveren og klienten. Det høres kanskje bra ut, men hvis du har en populær app, kan du opprettholde tusenvis av vedvarende forbindelser mellom serveren din og enhetene til brukerne dine..
Google Cloud Messaging er en tjeneste som løser dette problemet ved å fungere som mellomledd mellom serveren og brukerens enhet. Med GCM, administrerer Googles Cloud Connection Server, ofte referert til som CCS, de vedvarende tilkoblingene for deg. Det sørger også for at push-varslene dine leveres sikkert og pålitelig.
Å følge med meg, du trenger:
Brann opp Android Studio og opprett et nytt prosjekt med en tom Aktivitet
. Hvis du brukte standardene, bør prosjektet inneholde en Java-klasse i MainActivity.java.
I dette prosjektet bruker vi gradvis plugin for Google Services for å konfigurere GCM. Inkluder det i prosjektet ved å legge til følgende linje i avhengig
del av prosjektets build.gradle:
groovy classpath 'com.google.gms: google-tjenester: 1.5.0'
Deretter bruker du pluginet i app
modulens build.gradle:
Groovy Application Plugin: 'com.google.gms.google-tjenester'
For å kunne bruke GCM API, legg til com.google.android.gms: play-tjenester
som en kompilere
avhengighet i samme fil:
groovy compile "com.google.android.gms: play-services: 8.3.0"
Hvis du klikker på Synkroniser nå knappen, bør du se følgende feil:
Klikk på Installer Repository og synkroniseringsprosjekt lenke for å fikse feilen.
Inne i prosjektets AndroidManifest.xml fil, opprett og bruk en egendefinert C2D_MESSAGE tillatelse basert på prosjektets pakkenavn. Pass på at protectionLevel
av tillatelsen er satt til signatur.
"xml
"
Meldingene mottas i form av sendinger. For å håndtere disse kringkastingene trenger vår app en BroadcastReceiver
. Vi trenger imidlertid ikke å opprette det manuelt. Vi kan i stedet bruke GcmReceiver
klasse som BroadcastReceiver
.
De BroadcastReceiver
må ha en intent-filteret
som reagerer på com.google.android.c2dm.intent.RECEIVE
handling og navnet på sin kategori
må samsvare med prosjektets pakkenavn. Legg til følgende kode i manifestet:
"xml
"
Mens vi kommuniserer med Cloud Connection Server, må vi identifisere oss ved hjelp av en API-nøkkel på serversiden og en avsender-ID på klientsiden. For å få API-nøkkelen og avsender-IDen, opprett et nytt prosjekt i utviklerkonsollen.
Start med å klikke på Velg en plattform knapp. Deretter klikker du på Aktiver tjenester for Android-appen min knapp. Når du gjør det, vil du bli bedt om å gi et navn og et Android-pakkenavn for appen din. Pass på at Android-pakkenavnet du oppgir, samsvarer med pakkenavnet du skrev inn da du opprettet Android Studio-prosjektet.
Deretter klikker du på Velg og konfigurere tjenester knappen nederst. Du kan nå velge Google-tjenestene du vil legge til i appen.
For nå, klikk på Cloud Messaging knappen og klikk deretter Aktiver Google Cloud Messaging. Etter noen sekunder vil du bli presentert med server-API-nøkkelen og avsender-ID. Legg merke til serverens API-nøkkel og trykk Lukk.
Google-plugin-modulen vi la til tidligere, trenger en konfigurasjonsfil for å fungere riktig. Generer filen ved å klikke på Generer konfigurasjonsfiler knapp.
Når filen er generert, last den ned og legg den inn i Android Studio-prosjektet ditt app katalog.
GCM identifiserer Android-enheter ved hjelp av registreringstegn. Derfor må appen vår kunne registrere seg fra alle Android-enheter som den er installert på.
Registreringen må gjøres på en bakgrunnstråd, fordi prosessen kan ta en stund, avhengig av nettverkstilkobling. Fordi registreringen ikke trenger noen innganger fra brukeren, an IntentService
er ideell for denne oppgaven.
Opprett en ny Java-klasse som heter RegistrationService.java, gjør det til en underklasse av IntentService
, og overstyr det onHandleIntent
metode.
"java public class RegistrationService utvider IntentService public RegistrationService () super (" RegistrationService ");
@Override protected void onHandleIntent (Intent Intent) "
Inne i onHandleIntent
metode, kan vi bruke API-en for instans-ID til å generere eller hente registreringstokenet. Først opprett en forekomst av InstanceID
klassen, bruker sin getInstance
metode.
java InstanceID myID = InstanceID.getInstance (dette);
Vi kan nå bruke getToken
metode av InstanceID
motsette seg at du får registreringstoken i form av a string
. getToken
Forventer avsender-ID som en av sine argumenter. Fordi vi har lagt til google-services.json fil til vårt prosjekt, kan vi sende avsender-ID til metoden ved hjelp av R.string.gcm_defaultSenderID
.
java String registrationToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Hvis du vil se innholdet i registreringstoken for feilsøkingsformål, kan du logge det som en feilsøkingsmelding ved hjelp av Log.d
metode.
java Log.d ("Registration Token", registreringToken);
På dette tidspunktet kan du sende registreringstoken til din webserver og lagre den i en database der. Du behøver imidlertid ikke å gjøre dette hvis du ikke har tenkt å adressere brukerne dine individuelt. Hvis du planlegger å sende samme melding til hver bruker, bør du følge publiseringsabonnementet.
Jeg skal nå vise deg hvordan du abonnerer på en emne
kalt my_little_topic. Det tar bare to linjer med kode. Først oppretter du en ny forekomst av GcmPubSub
klassen bruker sin getInstance
metode. Neste, ring det abonnere
metode og send registreringstoken til den, sammen med navnet på emnet.
java GcmPubSub abonnement = GcmPubSub.getInstance (dette); abonnement.subscribe (registrationToken, "/ topics / my_little_topic", null);
Vår app kan nå motta alle pressemeldinger publisert til my_little_topic.
Definer endelig tjenesten i AndroidManifest.xml.
"xml
"
Registreringstjenesten er fullført.
InstanceIDListenerService
Registreringsbrikker blir oppdatert med jevne mellomrom. Følgelig må hver Android-app som bruker GCM ha en InstanceIDListenerService
som kan håndtere disse oppdateringene. Opprett derfor en ny Java-fil som heter TokenRefreshListenerService.java og gjør det til en underklasse av InstanceIDListenerService
. Inne i onTokenRefresh
Metode for klassen, alt vi trenger å gjøre er å starte registreringsprosessen på nytt ved å starte registrerings tjenesten ved hjelp av en Intent
og startService
metode.
Legg til følgende kode til TokenRefreshListenerService.java:
java offentlig klasse TokenRefreshListenerService utvider InstanceIDListenerService @Override public void onTokenRefresh () Intent i = new Intent (dette, RegistrationService.class); startService (i);
Denne tjenesten må kunne svare på com.google.android.gms.iid.InstanceID
handling. Derfor, mens du definerer tjenesten i AndroidManifest.xml, legg til riktig intent-filteret
.
"xml
"
For å sikre at registreringsprosessen starter så snart appen starter, må vi starte RegistrationService
klasse inne i onCreate
Metode av Hoved aktivitet
. For å gjøre det, opprett en Intent
for det og bruk startService
metode.
java Intent i = ny Intent (dette, RegistrationService.class); startService (i);
GCM viser automatisk push notifications i varselskuffen så snart de mottas. Det gjør det imidlertid bare hvis den tilhørende appen inneholder en GCMListenerService
.
Opprett en ny Java-klasse som heter NotificationsListenerService og gjør det til en underklasse av GCMListenerService
. Med mindre du ønsker å håndtere de pressede dataene selv, trenger du ikke å skrive noen kode i denne klassen. Vi kan forlate denne klassen tom for nå.
"java public class NotificationsListenerService utvider GcmListenerService
"
Mens du definerer tjenesten i AndroidManifest.xml, sørg for at du legger til en intent-filteret
som tillater det å svare på com.google.android.c2dm.intent.RECEIVE
handling.
"xml
"
Hvert trykkvarsel må ha et ikon tilknyttet det. Hvis du ikke har en hendig, kan du få en fra Googles Material Design Icons Library.
Når du laster ned ikonet, legg det inn i res mappe av prosjektet ditt. Jeg skal bruke ic_cloud_white_48dp som ikonet.
Vår Android-app er nå fullført. Når du har kompilert det og kjører det på en Android-enhet, vil du kunne se registrerings token i logcat logger.
Trykk på tilbakeknappen på enheten for å avslutte appen. Dette er nødvendig fordi GCM kun vil vise push notifications automatisk hvis brukeren ikke bruker appen. Hvis du vil at meldingene skal vises selv når appen kjører, må du opprette varslene selv inni NotificationsListenerService
bruker Notification.Builder
klasse.
I den siste delen av denne opplæringen vil vi lage et enkelt Python-skript som kan generere og sende push-varsler til alle Android-enhetene som vår app er installert på..
Du kan kjøre dette skriptet fra din lokale datamaskin eller fra en ekstern webserver som du har SSH-tilgang til.
Opprett en ny fil som heter send.py og åpne den ved hjelp av din favoritt tekstredigerer.
Øverst på filen, importerer du urllib2
og urllib
moduler. Vi vil bruke disse modulene til å sende data til Googles Cloud Connection Server. Importer json
modul også fordi dataene vi sender må være gyldige JSON. Til slutt, for å få tilgang til kommandolinjeparamenter, importerer du sys
modul.
python fra urllib2 import * import urllib import json import sys
Deretter lager du en variabel som lagrer server-API-nøkkelen du noterte tidligere. Nøkkelen må være en del av hver HTTP-forespørsel vi gjør til CCS.
python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"
Hvert varsel må ha en tittel og en kropp. I stedet for å kode dem hardt i skriptet vårt, la oss akseptere tittelen og kroppen som kommandolinjearguenter ved hjelp av argv
matrise.
python messageTitle = sys.argv [1] messageBody = sys.argv [2]
Opprett et nytt Python-ordlisteobjekt for å representere dataene som skal sendes til CCS. For vår Android-app for å kunne motta varselet, må det bli publisert til et emne som heter my_little_topic. Legg derfor til en nøkkel som heter til til ordboken og sett verdien til / Emner / my_little_topic.
For å representere innholdet i varselet, legg til en tast som heter melding til ordboken og sett verdien til et annet ordlisteobjekt som inneholder tre nøkler:
Pass på at verdien av ikon
nøkkelen samsvarer med navnet på ikonet som kan trekkes i ditt Android-prosjekt.
python data = "to": "/ topics / my_little_topic", "notification": "body": messageBody, "title": messageTitle, "ikon": "ic_cloud_white_48dp"
Konverter ordboken til en JSON-streng ved hjelp av dumper
funksjon av json
modul:
python dataAsJSON = json.dumps (data)
Alt vi trenger å gjøre nå, er å sende JSON-strengen til https://gcm-http.googleapis.com/gcm/send. For å gjøre det, opprett en ny Be om
objekt og sett dataAsJSON
som sine data. Sett deretter inn Autorisasjon
header til MY_API_KEY
og Innholdstype
header til application / json.
python request = Request ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "Authorization": "key =" + MY_API_KEY, "Innholdstype": "application / json")
Endelig, for å utføre forespørselen og hente svaret, send forespørselsobjektet til urlopen
funksjon og ring det lese
metode.
python print urlopen (request) .read ()
Python-skriptet er nå ferdig og klar til bruk.
På dette tidspunktet er vi klare til å sende push notifikasjoner til alle enhetene som vår app er installert på. Åpne en terminal og skriv inn katalogen der du opprettet send.py.
Pass navnet på skriptet til python
kjørbar sammen med en streng for tittelen på varselet og en for varselens kropp. Her er et eksempel du kan bruke:
bash python send.py "Min første push notification" "GCM API er fantastisk!"
Hvis det ikke er noen feil, bør du få et svar som ser slik ut:
javascript "message_id": 12345676892321
Hvis du sjekker Android-enheten din, bør du se et nytt varsel i varslingsbrettet.
Du vet nå hvordan du sender push varsler til brukerne dine. I denne leksjonen lærte du hvordan du oppretter en Android-app som er i stand til å registrere seg, og motta varsler som publiseres til et bestemt emne. Du lærte også å lage et Python-skript som kan publisere varsler.
Selv om push-varslinger kan føles som en fin måte å kommunisere med brukerne, foreslår jeg at du bruker dem sparsomt og bare hvis du har noe nyttig å si, fordi det å sende for mange av dem for ofte er kanskje den raskeste måten å få appen din på avinstallert.
Hvis du vil vite mer om Google Cloud Messaging, kan du gå til Cloud Messaging Guide.