Slik kommer du i gang med push notifikasjoner på Android

Introduksjon

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.

Hvorfor bruke Google Cloud Messaging?

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.

Forutsetninger

Å følge med meg, du trenger:

  • den nyeste versjonen av Android Studio
  • Python 2.7.6 eller høyere
  • En enhet som kjører Android 4.4 eller høyere med Google Play Services installert

1. Sette opp Android Studio Project

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.

Trinn 1: Legg til avhengighetene

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.

Trinn 2: Oppdater manifestet

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

"

2. Få en server-API-nøkkel og en avsender-ID

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.

3. Registrering av klienten

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å.

Trinn 1: Opprett en registreringstjeneste

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.

Trinn 2: Opprett en 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

"

Trinn 3: Starte registreringstjenesten

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);

4. Vise Push Notifications

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

"

5. Legge til Push Notification Icons

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.

6. Kjører Android App

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.

7. Sending Push Notifications

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.

Trinn 1: Opprette skriptet

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:

  • kropp
  • tittel
  • ikon

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.

Trinn 2: Kjører skriptet

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.

Konklusjon

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.