So erstellen Sie einen Server zum Senden von Push-Benachrichtigungen mit GCM an Android-Geräte mithilfe von Python

Einführung

Push-Benachrichtigungen ermöglichen es Ihrer Android-Anwendung, einen Benutzer über ein Ereignis zu benachrichtigen, auch wenn der Benutzer Ihre App nicht verwendet. Ziel dieses Tutorials ist es, eine einfache Push-Benachrichtigung an Ihre App zu senden. Wir werden * Ubuntu 14.04 * und * Python 2.7 * auf dem Server und * Google Cloud Messaging * als Push-Benachrichtigungsdienst verwenden.

Der Begriff "server" bezieht sich auf die mit DigitalOcean erstellte Instanz. Wir verwenden GCM, um auf den Server von Google zu verweisen, der sich zwischen dem Android-Gerät und Ihrem Server befindet.

Voraussetzungen

Sie benötigen diese Dinge, bevor Sie mit dem Tutorial beginnen:

  • Eine * Android-Anwendung *; siehe developer.android.com

  • A * Ubuntu 14.04 * Droplet

  • Die IP-Adresse Ihres Droplets

Über Push-Benachrichtigungen

Von Google bereitgestellte GCM-Verbindungsserver empfangen Nachrichten von einem Anwendungsserver eines Drittanbieters, z. B. Ihrem Droplet, und senden diese Nachrichten an eine GCM-fähige Android-Anwendung (die client app), die auf einem Gerät ausgeführt wird. Derzeit bietet Google Verbindungsserver für HTTP und XMPP an.

image: https://assets.digitalocean.com/articles/push_notifications_gcm/1.png [Die GCM-Verbindungsserver senden Daten zwischen Ihrem Drittanbieter-Server und den Client-Apps.]

Mit anderen Worten, Sie benötigen einen eigenen Server, um mit dem Server von Google zu kommunizieren und die Benachrichtigungen zu senden. Ihr Server sendet eine Nachricht an einen GCM-Verbindungsserver (Google Cloud Messaging). Anschließend wird die Nachricht vom Verbindungsserver in die Warteschlange gestellt und gespeichert. Anschließend wird sie an das Android-Gerät gesendet, wenn das Gerät online ist.

Erster Schritt - Erstellen Sie ein Google API-Projekt

Wir müssen ein Google API-Projekt erstellen, um GCM für unsere App zu aktivieren.

Besuchen Sie die https://console.developers.google.com [Google Developers Console].

Wenn Sie dort noch nie ein Entwicklerkonto erstellt haben, müssen Sie möglicherweise einige Details ausfüllen.

Klicken Sie auf * Projekt erstellen *.

Geben Sie einen Projektnamen ein und klicken Sie auf * Erstellen *.

Warten Sie einige Sekunden, bis das neue Projekt erstellt wurde. Zeigen Sie dann oben links auf der Projektseite Ihre * Projekt-ID * und * Projektnummer * an.

Notieren Sie sich die * Projektnummer *. Sie verwenden es in Ihrem Android-App-Client.

Zweiter Schritt - Aktivieren Sie GCM für Ihr Projekt

Stellen Sie sicher, dass Ihr Projekt in der https://console.developers.google.com [Google Developers Console] noch ausgewählt ist.

Wählen Sie in der linken Seitenleiste * APIs & auth * aus.

Wählen Sie * APIs *.

Schalten Sie in der angezeigten Liste der APIs den Schalter auf * ON *. Akzeptieren Sie die Nutzungsbedingungen.

  • Google Cloud Messaging für Android * sollte jetzt in der Liste der aktivierten APIs für dieses Projekt enthalten sein.

Bild: https://assets.digitalocean.com/articles/push_notifications_gcm/4.jpg [Google Cloud Messaging für Android aktiviert]

Wählen Sie in der linken Seitenleiste * APIs & auth * aus.

Wählen Sie * Credentials *.

Klicken Sie unter * Öffentlicher API-Zugriff * auf * Neuen Schlüssel erstellen *.

Wählen Sie * Serverschlüssel *.

Geben Sie die IP-Adresse Ihres Servers ein.

Klicken Sie auf * Erstellen *.

Kopieren Sie den * API KEY *. Sie müssen dies später auf Ihrem Server eingeben.

Um die Benachrichtigungen zu testen, müssen wir unsere Android-App mit dem von uns erstellten Google API-Projekt verknüpfen.

Wenn Sie mit der Entwicklung von Android-Apps noch nicht vertraut sind, lesen Sie möglicherweise das offizielle Handbuch für Implementing GCM Client.

Den offiziellen Quellcode finden Sie auf der gcm page.

Beachten Sie, dass es sich bei den Quellen nicht um Aktualisierungen handelt. Daher müssen Sie die Gradle-Datei ändern:

+ gcm-client / GcmClient / build.gradle +

Alte Linie:

compile "com.google.android.gms:play-services:4.0.+"

Aktualisierte Zeile:

compile "com.google.android.gms:play-services:5.0.89+"

Suchen Sie in der Hauptaktivität diese Zeile:

String SENDER_ID = "";

Ersetzen Sie dies durch die * Projektnummer * aus Ihrem Google API-Projekt.

Jedes Mal, wenn sich ein Gerät bei GCM registriert, erhält es eine Registrierungs-ID. Wir benötigen diese Registrierungs-ID, um den Server zu testen. Um es einfach zu bekommen, ändern Sie einfach diese Zeilen in der Hauptdatei:

           if (regid.isEmpty()) {
               registerInBackground();
           }else{
               Log.e("==========================","=========================");
               Log.e("regid",regid);
               Log.e("==========================","=========================");
           }

Nachdem Sie die App ausgeführt haben, schauen Sie im Logcat nach und kopieren Sie Ihre * regid *, damit Sie sie später haben. Es wird so aussehen:

=======================================
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================

Vierter Schritt - Bereitstellen eines Droplets

Stellen Sie einen neuen * Ubuntu 14.04 * -Server bereit. Wir benötigen dies, um unser Anwendungsserver eines Drittanbieters zu sein.

Die GCM-Verbindungsserver von Google nehmen Nachrichten von einem Anwendungsserver eines Drittanbieters (unserem Droplet) entgegen und senden sie an Anwendungen auf Android-Geräten. Während Google Verbindungsserver für HTTP und CCS (XMPP) bereitstellt, konzentrieren wir uns in diesem Lernprogramm auf HTTP. Der HTTP-Server ist nur Downstream: Cloud-to-Device. Dies bedeutet, dass Sie nur Nachrichten vom Server an die Geräte senden können.

Rollen unseres Servers:

  • Kommuniziert mit Ihrem Kunden

  • Löst ordnungsgemäß formatierte Anforderungen an den GCM-Server aus

  • Verarbeitet Anforderungen und sendet sie nach Bedarf mit exponentiellem Backoff erneut

  • Speichert den API-Schlüssel und die Client-Registrierungs-IDs. Der API-Schlüssel ist im Header der POST-Anforderungen enthalten, die Nachrichten senden

  • Generiert Nachrichten-IDs, um jede gesendete Nachricht eindeutig zu identifizieren. Nachrichten-IDs sollten pro Absender-ID eindeutig sein

Der Client kommuniziert mit Ihrem Server, indem er die Registrierungs-ID des Geräts sendet, damit Sie sie speichern und beim Senden der Benachrichtigung verwenden können. Kümmere dich jetzt nicht darum, es zu verwalten. Es ist sehr einfach und GCM bietet Ihnen Hilfe, indem es Ihnen Fehlermeldungen ausgibt, falls eine Registrierungs-ID ungültig ist.

Fünfter Schritt - Einrichten von Python GCM Simple Server

Melden Sie sich bei Ihrem Server mit einem Benutzer sudo an.

Aktualisieren Sie Ihre Paketlisten:

sudo apt-get update

Installieren Sie die Python-Pakete:

sudo apt-get install python-pip python-dev build-essential

Installieren Sie + python-gcm +. Weitere Informationen zu python-gcm finden Sie unter here.

sudo pip install python-gcm

Erstellen Sie eine neue Python-Datei irgendwo auf dem Server. Sagen wir:

sudo nano ~/test_push.py

Fügen Sie der Datei die folgenden Informationen hinzu. Ersetzen Sie die in markierten Variablen. Die Erklärung ist unten.

from gcm import *

gcm = GCM("")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}

reg_id = ''

gcm.plaintext_request(registration_id=reg_id, data=data)

Erläuterung:

  • + from gcm import * +: Importiert den Python-Client für Google Cloud Messaging für Android

  • + gcm +: Fügen Sie Ihren * API KEY * aus dem Google API-Projekt hinzu. Stellen Sie sicher, dass sich die IP-Adresse Ihres Servers in den zulässigen IP-Adressen befindet

  • + reg_id +: Fügen Sie Ihre * regid * aus Ihrer Android-Anwendung hinzu

Schritt Sechs - Senden Sie eine Push-Benachrichtigung

Führen Sie diesen Befehl aus, um eine Testbenachrichtigung an Ihre App zu senden:

sudo python ~/test_push.py

Warten Sie ca. 10 Sekunden. Sie sollten eine Benachrichtigung auf Ihrem Android-Gerät erhalten.

image: https://assets.digitalocean.com/articles/push_notifications_gcm/7.png [Beispiel für Push-Benachrichtigung]

Fehlerbehebung.

Wenn die Benachrichtigung nach etwa 10 Sekunden nicht auf Ihrem Gerät angezeigt wird, gehen Sie folgendermaßen vor:

  • Ist Ihr Smartphone / Tablet mit dem Internet verbunden?

  • Haben Sie den richtigen Projektschlüssel?

  • Hast du die richtige regid aus der App?

  • Wird die IP-Adresse Ihres Servers für den Google API-Serverschlüssel hinzugefügt?

  • Ist der Server mit dem Internet verbunden?

Wenn Sie die Benachrichtigung immer noch nicht erhalten, handelt es sich wahrscheinlich um die App. Überprüfen Sie den Logcat auf Fehler.

Wohin soll es von hier aus gehen?

Nachdem Sie diesen einfachen Test durchgeführt haben, möchten Sie die Benachrichtigungen wahrscheinlich an alle Benutzer senden. Denken Sie daran, dass Sie sie in Sätzen von 1000 senden müssen. Wenn der CGM mit einer ungültigen ID antwortet, müssen Sie diese aus Ihrer Datenbank entfernen.

Sie können die Beispiele in diesem Tutorial anpassen, um mit Ihrer eigenen Android-Anwendung zu arbeiten.