google-cloud-messagingErste Schritte mit Google-Cloud-Messaging


Bemerkungen

Google Cloud Messaging: Überblick

Google Cloud Messaging (GCM) ist ein kostenloser Dienst, mit dem Entwickler Nachrichten zwischen Servern und Client-Apps senden können. Dies umfasst Downstream-Nachrichten von Servern an Client-Apps und Upstream-Nachrichten von Client-Apps an Server.

Beispielsweise könnte eine nachgelagerte Downstream-Nachricht eine Client-App darüber informieren, dass neue Daten vom Server abgerufen werden müssen, wie im Fall einer Benachrichtigung über eine "neue E-Mail". Für Anwendungsfälle wie Instant Messaging kann eine GCM-Nachricht bis zu 4 kb Nutzlast an die Client-App übertragen. Der GCM-Dienst behandelt alle Aspekte der Warteschlange für Nachrichten und die Übermittlung an und von der Ziel-Client-App.


Architektonische Übersicht

Eine GCM-Implementierung umfasst einen Google-Verbindungsserver, einen App-Server in Ihrer Umgebung, der mit dem Verbindungsserver über das HTTP- oder XMPP-Protokoll kommuniziert, und eine Client-App.

Architektonische Übersicht

So interagieren diese Komponenten:

  • Google GCM-Verbindungsserver akzeptieren nachgelagerte Nachrichten von Ihrem App-Server und senden sie an eine Client-App. Der XMPP- Verbindungsserver kann auch Nachrichten akzeptieren, die von der Client-App stromaufwärts gesendet werden, und leitet sie an Ihren App-Server weiter. Weitere Informationen finden Sie unter Informationen zum GCM-Verbindungsserver .
  • Auf Ihrem App Server implementieren Sie das HTTP- und / oder XMPP- Protokoll, um mit den GCM-Verbindungsservern zu kommunizieren. App-Server senden Downstream-Nachrichten an einen GCM-Verbindungsserver. Der Verbindungsserver stellt die Nachricht in eine Warteschlange, speichert sie und sendet sie an die Client-App. Wenn Sie XMPP implementieren, kann Ihr App-Server Nachrichten empfangen, die von der Client-App gesendet werden.
  • Die Client-App ist eine GCM-fähige Client-App. Um GCM-Nachrichten empfangen und senden zu können, muss sich diese App bei GCM registrieren und eine eindeutige Kennung erhalten, die als Registrierungstoken bezeichnet wird. Weitere Informationen zum Implementieren der Client-App finden Sie in der Dokumentation zu Ihrer Plattform.

Schlüssel Konzepte

Im Folgenden werden die wichtigsten Begriffe und Konzepte von GCM zusammengefasst. Es ist in diese Kategorien unterteilt:

  • Komponenten - Die Entitäten, die in GCM eine primäre Rolle spielen.
  • Berechtigungsnachweise - Die IDs und Token, die in GCM verwendet werden, um sicherzustellen, dass alle Parteien authentifiziert wurden und die Nachricht an den richtigen Ort gesendet wird.

GCM-Komponenten und -Berechtigungsnachweise.

Komponenten

  • GCM-Verbindungsserver - Google-Server, die am Versenden von Nachrichten zwischen dem App-Server und der Client-App beteiligt sind.
  • Client-App - Eine GCM-fähige Client-App, die mit Ihrem App-Server kommuniziert.
  • App Server - Ein App Server, den Sie im Rahmen der Implementierung von GCM schreiben. Der App-Server sendet Daten über den GCM-Verbindungsserver an eine Client-App. Wenn Ihr App-Server das XMPP-Protokoll implementiert, kann er auch Nachrichten empfangen, die von Client-Apps gesendet werden.

Referenzen

  • Absenderidentität
    Ein eindeutiger numerischer Wert, der beim Konfigurieren Ihres API-Projekts erstellt wird. Die Absender-ID wird im Registrierungsprozess verwendet , um einen App-Server zu identifizieren, der Nachrichten an die Client-App senden darf.

  • Server-Schlüssel
    Ein auf dem App-Server gespeicherter Schlüssel, über den der App-Server autorisierten Zugriff auf Google-Dienste erhält. In HTTP ist der Serverschlüssel im Header der POST-Anforderungen enthalten, die Nachrichten senden. In XMPP wird der Serverschlüssel in der SASL PLAIN-Authentifizierungsanforderung als Kennwort für die Authentifizierung der Verbindung verwendet. Fügen Sie den Serverschlüssel an keiner Stelle in Ihren Clientcode ein. Sie erhalten den Serverschlüssel, wenn Sie Ihr API-Projekt erstellen.

  • Anwendungs-ID
    Die Client-App, die sich für den Empfang von Nachrichten registriert. Wie dies implementiert wird, ist plattformabhängig:

    • Android : Verwenden Sie den Paketnamen aus dem App-Manifest.
    • iOS : Verwenden Sie die Bundle-ID der App.
    • Chrome : Verwenden Sie den Chrome-Erweiterungsnamen.
  • Registrierungs-Token
    Eine von den GCM-Verbindungsservern für die Client-App ausgegebene ID, mit der sie Nachrichten empfangen kann. Beachten Sie, dass die Registrierungstoken geheim gehalten werden müssen.


Lebenszyklusfluss

  • Registrieren Sie sich, um GCM zu aktivieren . Eine Instanz einer Client-App registriert sich für den Empfang von Nachrichten. Weitere Informationen finden Sie unter Registrieren von Client-Apps .
  • Downstream-Nachrichten senden und empfangen .
    • Eine Nachricht schicken. Der App-Server sendet Nachrichten an die Client-App:
      1. Der App-Server sendet eine Nachricht an GCM-Verbindungsserver.
      2. Der GCM-Verbindungsserver stellt die Nachricht in eine Warteschlange und speichert sie, wenn das Gerät offline ist.
      3. Wenn das Gerät online ist, sendet der GCM-Verbindungsserver die Nachricht an das Gerät.
      4. Auf dem Gerät empfängt die Client-App die Nachricht gemäß der plattformspezifischen Implementierung. Einzelheiten finden Sie in Ihrer plattformspezifischen Dokumentation.
    • Nachricht erhalten Eine Client-App empfängt eine Nachricht von einem GCM-Verbindungsserver. In Ihrer plattformspezifischen Dokumentation finden Sie Details dazu, wie eine Client-App in dieser Umgebung die empfangenen Nachrichten verarbeitet.
  • Senden und Empfangen von Upstream-Nachrichten Diese Funktion ist nur verfügbar, wenn Sie den XMPP-Verbindungsserver verwenden .
    • Eine Nachricht schicken. Eine Client-App sendet Nachrichten an den App-Server:
      1. Auf dem Gerät sendet die Client-App Nachrichten an den XMPP-Verbindungsserver. In Ihrer plattformspezifischen Dokumentation finden Sie Details dazu, wie eine Client-App eine Nachricht über XMPP senden kann.
      2. Der XMPP-Verbindungsserver stellt die Nachricht in eine Warteschlange und speichert sie, wenn der Server getrennt wird.
      3. Wenn der App-Server erneut verbunden wird, sendet der XMPP-Verbindungsserver die Nachricht an den App-Server.
    • Nachricht erhalten Ein App-Server empfängt eine Nachricht vom XMPP-Verbindungsserver und führt folgende Schritte aus:
      1. Analysiert den Nachrichtenkopf, um die Client-App-Absenderinformationen zu überprüfen.
      2. Sendet "ack" an den XMPP-Verbindungsserver, um den Empfang der Nachricht zu bestätigen.
      3. Analysiert optional die Nachrichtennutzlast, wie von der Client-App definiert.

Offizielle Dokumentationsreferenz finden Sie hier .

Umgang mit Downstream-Nachrichten in Android

Implementieren Sie onMessageReceived , das die vom GCM-Server gesendete Benachrichtigung onMessageReceived .

  @Override
  public void onMessageReceived(String from, Bundle data) {
     String message = data.getString("message");
     Log.d(TAG, "From: " + from);
     Log.d(TAG, "Message: " + message);
     // Handle received message here.
  }
 

Umgang mit Downstream-Nachrichten in iOS

Um die Benachrichtigung zu erhalten, implementieren Sie application:didReceiveRemoteNotification:fetchCompletionHandler: (oder application:didReceiveRemoteNotification: für iOS <8.0) und rufen Sie GCMService:appDidReceiveMessage:message an, um den Empfang der Nachricht an GCM zu bestätigen.

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // ...
}

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
  // ...
}
 

Senden Sie nachgelagerte Nachrichten aus der Cloud

Senden Sie eine Nachricht mit dem GCM-HTTP-Verbindungsserverprotokoll:

  https://gcm-http.googleapis.com/gcm/send
  Content-Type:application/json
  Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
  {
    "to": "/topics/foo-bar",
    "data": {
      "message": "This is a GCM Topic Message!",
     }
  }
 

Dazu müssen Sie in Postman einfach Folgendes einstellen ( einige Details sind wie oben erwähnt ):

  1. Stellen Sie den Anfragetyp auf POST
  2. Legen Sie in den Kopfzeilen Folgendes fest:
    • Content-Type = Anwendung / Json
    • Autorisierung = <Ihr GCM-Server-Schlüssel>
  3. Stellen Sie die Payload-Parameter im Body ein ( in diesem Beispiel haben wir die Option raw verwendet , siehe Screenshot (2) ).
  4. Senden Sie die Anfrage an https://gcm-http.googleapis.com/gcm/send

Screenshots:

(1) Geben Sie hier die Bildbeschreibung ein

(2) Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass die Anforderung mit der message_id in der Antwort erfolgreich war.

PS: Ich halte den Beispielserverschlüssel sichtbar, damit andere ihn auch dann ausprobieren können, wenn sie noch kein Projekt erstellt haben. ABER beachten Sie, dass der Serverschlüssel immer geheim gehalten werden muss.