Så här börjar du med push-meddelanden på Android

Introduktion

Att få användare att installera din app är bara hälften av slaget. Att få dem att använda det regelbundet är den andra hälften. Det är ganska möjligt att dina användare helt glömmer din app efter att ha använt den en eller två gånger. Vad med alla andra nya appar som tävlar för deras uppmärksamhet.

Genom att använda push-meddelanden kan du påminna användarna om din app då och då, vilket förbättrar chansen att din app blir installerad på sina enheter.

Google Cloud Messaging, GCM för kort, är en gratis tjänst som du kan använda för att skicka push-meddelanden till dina användare. I den här handledningen lär du dig hur du använder den för att skapa en Android-app som kan ta emot push-meddelanden och ett enkelt Python-script på servern som kan generera och skicka dem.

Varför använda Google Cloud Messaging?

För de flesta klient-serverkommunikationer initierar klienten förfrågningar om att ta emot data från servern. Med andra ord drar kunden data från servern. När det gäller push-meddelanden är det dock servern som initierar dataöverföringen.

Detta uppnås vanligtvis genom att upprätthålla en beständig TCP / IP-anslutning - en anslutning som stannar obestämd mellan servern och klienten. Det kan låta bra, men om du har en populär app kan du hålla mycket tusentals långvariga kopplingar mellan din server och dina användares enheter..

Google Cloud Messaging är en tjänst som löser detta problem genom att fungera som mellanhand mellan din server och din användares enhet. Med GCM hanterar Googles Cloud Connection Server, som ofta kallas CCS, de vidhållande anslutningarna för dig. Det säkerställer också att dina push-meddelanden levereras säkert och pålitligt.

förutsättningar

För att följa med mig behöver du:

  • den senaste versionen av Android Studio
  • Python 2,7,6 eller högre
  • En enhet som kör Android 4.4 eller senare med Google Play Services installerad

1. Ställa in Android Studio Project

Avfyra Android Studio och skapa ett nytt projekt med en tom Aktivitet. Om du använde standardvärdena ska projektet innehålla en Java-klass i MainActivity.java.

Steg 1: Lägg till beroenden

I det här projektet använder vi Google-gradvis plugin för att konfigurera GCM. Inkludera det i projektet genom att lägga till följande rad i beroenden del av projektets build.gradle:

groovy classpath "com.google.gms: google-tjänster: 1.5.0"

Använd sedan pluginprogrammet i app modulens build.gradle:

groovy tillämpa plugin: "com.google.gms.google-services"

För att kunna använda GCM API, lägg till com.google.android.gms: play-tjänster som en sammanställa beroende i samma fil:

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

Om du klickar på Synkronisera nu knappen ska du se följande fel:

Klicka på Installera Repository och Sync Project länk för att åtgärda felet.

Steg 2: Uppdatera manifestet

Inuti projektets AndroidManifest.xml fil, skapa och använd en anpassad C2D_MESSAGE tillstånd baserat på ditt projekt namn på paketet. Se till att protectionLevel av tillståndet är inställt på signatur.

"xml

"

Meddelandena mottas i form av sändningar. För att hantera dessa sändningar behöver vår app en BroadcastReceiver. Vi behöver dock inte skapa det manuellt. Vi kan istället använda GcmReceiver klass som BroadcastReceiver.

De BroadcastReceiver måste ha en intent-filter som svarar på com.google.android.c2dm.intent.RECEIVE åtgärd och namnet på dess kategori måste matcha ditt projekts paketnamn. Lägg till följande kod i manifestet:

"xml

"

2. Hämta en serverns API-nyckel och ett avsändar-ID

Samtidigt som vi kommunicerar med Cloud Connection Server måste vi identifiera oss med hjälp av en API-nyckel på serverns sida och ett avsender-ID på klientsidan. För att få API-nyckeln och avsändar-ID, skapa ett nytt projekt i utvecklarkonsolen.

Börja med att klicka på Välj en plattform knapp. Klicka sedan på Aktivera tjänster för min Android-app knapp. När du gör det kommer du att bli ombedd att ge ett namn och ett Android-paketnamn för din app. Se till att det namn på Android-paketet du tillhandahåller matchar det paketnamn du angav när du skapade Android Studio-projektet.

Klicka sedan på Välj och konfigurera tjänster knappen längst ner. Du kan nu välja de Google-tjänster du vill lägga till i appen.

För nu klickar du på Molnmeddelanden knappen och klicka sedan på Aktivera Google Cloud Messaging. Efter några sekunder kommer du att presenteras med din serverns API-nyckel och avsändar-ID. Notera serverns API-nyckel och tryck på Stänga.

Plugin till Google Services som vi lagt till tidigare behöver en konfigurationsfil för att fungera korrekt. Generera filen genom att klicka på Generera konfigurationsfiler knapp.

När filen har skapats ladda ner den och placera den i ditt Android Studio-projekt app katalog.

3. Registrering av kunden

GCM identifierar Android-enheter med registreringstecken. Därför måste vår app kunna registrera sig från alla Android-enheter där den är installerad.

Steg 1: Skapa en registreringstjänst

Registreringen måste göras på en bakgrundsgänga eftersom processen kan ta en stund beroende på nätverksanslutning. Eftersom registreringen inte behöver några ingångar från användaren, en IntentService är idealisk för denna uppgift.

Skapa en ny Java-klass som heter RegistrationService.java, gör det till en underklass av IntentService, och åsidosätta dess onHandleIntent metod.

"java public class RegistrationService utökar IntentService public RegistrationService () super (" RegistrationService ");

@Override protected void onHandleIntent (Intent Intent)  "

Inuti onHandleIntent metod kan vi använda API-instansen för att generera eller hämta registreringstoken. Först skapa en instans av InstanceID klass, använder sin getInstance metod.

java InstanceID myID = InstanceID.getInstance (this);

Vi kan nu använda getToken metod för InstanceID motsätta sig att få registreringstoken i form av a Sträng. getToken förväntar sig avsändar-ID som en av dess argument. Eftersom vi har lagt till google-services.json fil till vårt projekt, kan vi skicka avsändarens ID till metoden med R.string.gcm_defaultSenderID.

java String registrationToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Om du vill se innehållet i registreringstoken för felsökningsändamål kan du logga in som ett felsökningsmeddelande med Log.d metod.

java Log.d ("Registration Token", registreringToken);

Vid denna tidpunkt kan du skicka registreringstoken till din webbserver och lagra den i en databas där. Du behöver dock inte göra detta om du inte planerar att rikta dina användare individuellt. Om du planerar att skicka samma meddelande till varje användare, bör du följa publiceringsabonnenten.

Jag ska nu visa dig hur du prenumererar på en ämne kallad my_little_topic. Det tar bara två rader av kod. Skapa först en ny instans av GcmPubSub klass med dess getInstance metod. Nästa, ring dess prenumerera metod och skicka registreringstoken till den, tillsammans med ämnesnamnet.

java GcmPubSub prenumeration = GcmPubSub.getInstance (this); prenumeration.subscribe (registrationToken, "/ topics / my_little_topic", null);

Vår app kan nu få varje pressmeddelande publicerad till my_little_topic.

Definiera slutligen tjänsten i AndroidManifest.xml.

"xml

"

Registreringstjänsten är klar.

Steg 2: Skapa en InstanceIDListenerService

Registreringstoken uppdateras periodiskt. Följaktligen måste varje Android-app som använder GCM ha en InstanceIDListenerService som kan hantera dessa uppdateringar. Skapa därför en ny Java-fil som heter TokenRefreshListenerService.java och gör det till en underklass av InstanceIDListenerService. Inuti onTokenRefresh klassens metod, allt vi behöver göra är att helt enkelt starta registreringsprocessen igen genom att starta registreringstjänsten med hjälp av en Avsikt och den starta service metod.

Lägg till följande kod till TokenRefreshListenerService.java:

java public class TokenRefreshListenerService utökar InstanceIDListenerService @Override public void onTokenRefresh () Intent i = new Intent (detta, RegistrationService.class); startService (i);

Denna tjänst måste kunna svara på com.google.android.gms.iid.InstanceID verkan. Därför definieras tjänsten i AndroidManifest.xml, lägg till det lämpliga intent-filter.

"xml

"

Steg 3: Starta registreringstjänsten

För att säkerställa att registreringsprocessen börjar så fort appen startar måste vi starta RegistrationService klass inne i onCreate metod av Huvudaktivitet. För att göra det, skapa en Avsikt för det och använd starta service metod.

java Intent i = ny Intent (detta, RegistrationService.class); startService (i);

4. Visa Push Notifications

GCM visar automatiskt push-meddelanden i meddelandefältet så fort de tas emot. Det gör dock bara om den bifogade appen innehåller en GCMListenerService.

Skapa en ny Java-klass som heter NotificationsListenerService och gör det till en underklass av GCMListenerService. Om du inte vill hantera de tryckta uppgifterna själv behöver du inte skriva någon kod i den här klassen. Vi kan lämna denna klass tom för nu.

"java public class NotificationsListenerService utökar GcmListenerService

"

Medan du definierar tjänsten i AndroidManifest.xml, se till att du lägger till en intent-filter som tillåter det att svara på com.google.android.c2dm.intent.RECEIVE verkan.

"xml

"

5. Lägga till Push Notification Icons

Varje push-meddelande måste ha en ikon som är associerad med den. Om du inte har en handy kan du få en från Googles Material Design Icon Library.

När du laddar ner ikonen placerar du den inuti res mapp på ditt projekt. Jag ska använda ic_cloud_white_48dp som ikonen.

6. Kör Android App

Vår Android-app är nu klar. När du kompilerar det och kör det på en Android-enhet kan du se registreringstoken i logcat loggar.

Tryck på bakåtknappen på enheten för att lämna appen. Detta är nödvändigt eftersom GCM automatiskt kommer att visa push-meddelanden om användaren inte använder appen. Om du vill att meddelandena ska visas även när appen körs måste du skapa meddelandena själv inuti NotificationsListenerService använda Notification.Builder klass.

7. Skicka meddelanden

I den sista delen av denna handledning skapar vi ett enkelt Python-skript som kan generera och skicka push-meddelanden till alla Android-enheter där vår app är installerad.

Du kan köra detta skript från din lokala dator eller från en fjärrwebbserver som du har SSH-åtkomst till.

Steg 1: Skapa skriptet

Skapa en ny fil som heter send.py och öppna den med din favorit textredigerare.

Överst i filen, importera urllib2 och urllib moduler. Vi använder dessa moduler för att skicka data till Googles Cloud Connection Server. Importera json modulen eftersom de data vi skickar måste vara giltiga JSON. Slutligen, för att komma åt kommandoradsargument, importera sys modul.

Python från Urllib2 Import * Import Urllib Import Json Import Sys

Skapa sedan en variabel som lagrar serverns API-nyckel som du noterade tidigare. Nyckeln måste vara en del av varje HTTP-förfrågan vi gör till CCS.

python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"

Varje anmälan måste ha en titel och en kropp. I stället för att koda dem i vårt skript, låt oss acceptera titeln och kroppen som kommandoradsargument med argv array.

python messageTitle = sys.argv [1] messageBody = sys.argv [2]

Skapa ett nytt Python-ordlistorobjekt för att representera de data som ska skickas till CCS. För att vår Android-app ska kunna ta emot meddelandet måste den publiceras till ett ämne som heter my_little_topic. Lägg därför till en nyckel som heter till till ordlistan och ange dess värde till / Ämnen / my_little_topic.

För att representera innehållet i meddelandet, lägg till en nyckel som heter underrättelse till ordlistan och ange dess värde till ett annat ordlighetsobjekt som innehåller tre nycklar:

  • kropp
  • titel
  • ikon

Se till att värdet på ikon nyckeln matchar namnet på ikonen som kan dragas i ditt Android-projekt.

python data = "to": "/ topics / my_little_topic", "notification": "body": messageBody, "title": messageTitle, "ikon": "ic_cloud_white_48dp"

Konvertera ordlistan till en JSON-sträng med hjälp av soptippar funktion av json modul:

python dataAsJSON = json.dumps (data)

Allt vi behöver göra nu är att skicka JSON-strängen till https://gcm-http.googleapis.com/gcm/send. För att göra det, skapa en ny Begäran objekt och set dataAsJSON som dess data. Ställ sedan in Tillstånd rubrik till MY_API_KEY och den Innehållstyp rubrik till application / json.

python request = Request ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "Authorization": "key =" + MY_API_KEY, "Innehållstyp": "application / json")

Slutligen, för att utföra begäran och hämta svaret, skicka förfrågningsobjektet till urlopen funktion och ring dess läsa metod.

python print urlopen (request) .read ()

Python-skriptet är nu komplett och redo att användas.

Steg 2: Köra skriptet

Vid denna tidpunkt är vi redo att skicka push-meddelanden till alla enheter som vår app är installerad på. Öppna en terminal och skriv in katalogen där du skapade send.py.

Passera skriptets namn till pytonorm körbar tillsammans med en sträng för titeln på anmälan och en för anmälarens kropp. Här är ett exempel du kan använda:

bash python send.py "Min första push notification" "GCM API är underbart!"

Om det inte finns några fel ska du få ett svar som ser ut så här:

javascript "message_id": 12345676892321

Om du kontrollerar din Android-enhet bör du se en ny anmälan i meddelandefältet.

Slutsats

Du vet nu hur du skickar push-meddelanden till dina användare. I den här lektionen lärde du dig att skapa en Android-app som kan registrera sig och ta emot meddelanden som publiceras till ett visst ämne. Du lärde dig också att skapa ett Python-skript som kan publicera meddelanden.

Även om push-meddelanden kan känna sig som ett bra sätt att kommunicera med dina användare, föreslår jag att du använder dem sparsamt och bara om du har något användbart att säga, för att skicka för många av dem för ofta är kanske det snabbaste sättet att få din app avinstalle.

Om du vill lära dig mer om Google Cloud Messaging, läser du molnmeddelandeguide.