Website-Suche

Wie man einen Server erstellt, um Push-Benachrichtigungen mit GCM an Android-Geräte unter Verwendung von Python zu senden


Einführung

Push-Benachrichtigungen ermöglichen es Ihrer Android-Anwendung, einen Benutzer über ein Ereignis zu informieren, selbst 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 sowie Google Cloud Messaging als Push-Benachrichtigungsdienst verwenden.

Wir werden den Begriff Server verwenden, um die Instanz zu beschreiben, die mit DigitalOcean erstellt wurde. Wir werden GCM verwenden, um den Server von Google zu bezeichnen, der zwischen dem Android-Gerät und Ihrem Server steht.

Voraussetzungen

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

  • Eine Android-Anwendung; siehe developer.android.com
  • Ein Ubuntu 14.04 Droplet
  • Die IP-Adresse Ihres Droplets

Über Push-Benachrichtigungen

Von Google bereitgestellte GCM-Verbindungsserver nehmen Nachrichten von einem Drittanbieter-Anwendungsserver, wie Ihrem Droplet, entgegen und senden diese Nachrichten an eine GCM-fähige Android-Anwendung (die Client-App), die auf einem Gerät läuft. Derzeit stellt Google Verbindungsserver für HTTP und XMPP zur Verfügung.

Mit anderen Worten, Sie benötigen Ihren eigenen Server, um mit dem Server von Google zu kommunizieren, um die Benachrichtigungen zu senden. Ihr Server sendet eine Nachricht an einen GCM (Google Cloud Messaging) Verbindungsserver, dieser verbindet die Nachricht und speichert sie, und sendet sie dann an das Android-Gerät, wenn das Gerät online ist.

Schritt Eins — 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 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 dann auf Erstellen.

Warten Sie ein paar Sekunden, bis das neue Projekt erstellt wurde. Dann sehen Sie Ihre Projekt-ID und Projektnummer in der oberen linken Ecke der Projektseite.

Notieren Sie sich die Projektnummer. Sie werden sie in Ihrem Android-App-Client verwenden.

Schritt Zwei - Aktivieren Sie GCM für Ihr Projekt

Stellen Sie sicher, dass Ihr Projekt weiterhin in der Google Developers Console ausgewählt ist.

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

Wählen Sie APIs.

In der angezeigten Liste der APIs schalten Sie den Schalter Google Cloud Messaging für Android auf AN. Akzeptieren Sie die Nutzungsbedingungen.

Google Cloud Messaging für Android sollte jetzt in der Liste der aktivierten APIs für dieses Projekt stehen.

Wählen Sie in der linken Seitenleiste APIs & Authentifizierung.

Wählen Sie Qualifikationen.

Unter Öffentlichen API-Zugang klicken Sie auf Neuen Schlüssel erstellen.

Wählen Sie Server-Schlüssel.

Geben Sie die IP-Adresse Ihres Servers ein.

Klicken Sie auf Erstellen.

Kopieren Sie den API-SCHLÜSSEL. Sie müssen dies später auf Ihrem Server eingeben.

Schritt Drei — Android-App verknüpfen

Um die Benachrichtigungen zu testen, müssen wir unsere Android-App mit dem Google-API-Projekt verknüpfen, das wir erstellt haben.

Wenn Sie neu in der Android-App-Entwicklung sind, möchten Sie möglicherweise die offizielle Anleitung zur Implementierung des GCM-Clients befolgen.

Sie können den offiziellen Quellcode von der GCM-Seite abrufen.

Beachten Sie, dass die Quellen keine Updates sind, 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+"

In der Hauptaktivität, finden Sie diese Zeile:

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

Ersetzen Sie dies durch die Projektnummer Ihres Google API-Projekts.

Jedes Mal, wenn ein Gerät sich bei GCM registriert, erhält es eine Registrierungs-ID. Wir benötigen diese Registrierungs-ID, um den Server zu testen. Um sie einfach zu erhalten, ä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 in das Logcat und kopieren Sie Ihre regid, damit Sie sie später haben. Sie 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/==========================﹕ =======================================

Schritt Vier — Einen Droplet bereitstellen

Setzen Sie einen neuen Ubuntu 14.04 Server auf. Wir benötigen dies als unseren Drittanbieter-Anwendungsserver.

Die GCM-Verbindungsserver von Google nehmen Nachrichten von einem Drittanbieter-Anwendungsserver (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 Tutorial auf HTTP. Der HTTP-Server ist nur downstream: von der Cloud zum Gerät. Das bedeutet, dass Sie nur Nachrichten vom Server an die Geräte senden können.

Rollen unseres Servers:

  • Kommuniziert mit Ihrem Kunden
  • Sendet ordnungsgemäß formatierte Anfragen an den GCM-Server.
  • Bearbeitet Anfragen und sendet sie bei Bedarf mit exponentiellem Backoff erneut.
  • Speichert den API-Schlüssel und die Client-Registrierungs-IDs. Der API-Schlüssel ist im Header von POST-Anfragen enthalten, die Nachrichten senden.
  • Generiert Nachrichten-IDs, um jede gesendete Nachricht eindeutig zu identifizieren. Nachrichten-IDs sollten pro Sender-ID eindeutig sein.

Der Kunde wird mit Ihrem Server kommunizieren, indem er die Registrierungs-ID des Geräts sendet, damit Sie sie speichern und verwenden können, wenn Sie die Benachrichtigung senden. Machen Sie sich jetzt keine Sorgen um die Verwaltung; es ist sehr einfach und GCM bietet Ihnen Unterstützung, indem es Ihnen Fehlermeldungen gibt, falls eine Registrierungs-ID ungültig ist.

Schritt Fünf - Richten Sie den Python GCM Simple Server ein

Melden Sie sich mit einem Sudo-Benutzer auf Ihrem Server 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. Erfahren Sie hier mehr über python-gcm.

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 die folgenden Informationen zur Datei hinzu. Ersetzen Sie die mit rot gekennzeichneten Variablen. Die Erklärung steht unten.

from gcm import *

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

reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'

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

Erklärung:

  • from gcm import *: dies importiert den Python-Client für Google Cloud Messaging für Android
  • Fügen Sie Ihren API-SCHLÜSSEL aus dem Google API-Projekt hinzu; stellen Sie sicher, dass die IP-Adresse Ihres Servers in den erlaubten IPs ist.
  • reg_id: Fügen Sie Ihre regid aus Ihrer Android-Anwendung hinzu

Schritt sechs — Eine Push-Benachrichtigung senden

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

sudo python ~/test_push.py

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

Fehlerbehebung.

Wenn die Benachrichtigung nach etwa 10 Sekunden nicht auf Ihrem Gerät erscheint, befolgen Sie diese Schritte:

  • Ist Ihr Smartphone/Tablet mit dem Internet verbunden?
  • Hast du den richtigen Projektschlüssel?
  • Hast du die korrekte RegID aus der App?
  • Ist die IP-Adresse Ihres Servers für den Google API-Server-Schlüssel hinzugefügt?
  • Ist der Server mit dem Internet verbunden?

Wenn Sie die Benachrichtigung immer noch nicht erhalten, liegt es wahrscheinlich an der App. Überprüfen Sie das Logcat auf einige Fehler.

Wohin von hier aus?

Sobald Sie diesen einfachen Test durchgeführt haben, möchten Sie wahrscheinlich die Benachrichtigungen an alle Ihre Benutzer senden. Denken Sie daran, dass Sie sie in Gruppen von 1000 senden müssen. Wenn die CGM außerdem mit "ungültige ID" antwortet, müssen Sie sie aus Ihrer Datenbank entfernen.

Sie können die Beispiele in diesem Tutorial an Ihre eigene Android-Anwendung anpassen.