google-cloud-messagingAan de slag met google-cloud-berichten


Opmerkingen

Google Cloud Messaging: Overzicht

Google Cloud Messaging (GCM) is een gratis service waarmee ontwikkelaars berichten kunnen verzenden tussen servers en client-apps. Dit omvat downstream-berichten van servers naar client-apps en upstream-berichten van client-apps naar servers.

Een lichtgewicht downstream-bericht kan een client-app bijvoorbeeld informeren dat er nieuwe gegevens moeten worden opgehaald van de server, zoals in het geval van een melding 'nieuwe e-mail'. Voor gebruikssituaties zoals instant messaging, kan een GCM-bericht tot 4 kB payload overbrengen naar de client-app. De GCM-service verwerkt alle aspecten van wachtrijen van berichten en bezorging van en naar de doelclient-app.


Architectonisch overzicht

Een GCM-implementatie omvat een Google-verbindingsserver, een app-server in uw omgeving die via HTTP of XMPP-protocol met de verbindingsserver communiceert en een client-app.

Architectonisch overzicht

Zo werken deze componenten samen:

  • Google GCM-verbindingsservers accepteren downstream-berichten van uw app-server en sturen deze naar een client-app. De XMPP- verbindingsserver kan ook berichten accepteren die stroomopwaarts van de client-app zijn verzonden en deze doorsturen naar uw app-server. Zie Over GCM-verbindingsserver voor meer informatie.
  • Op uw app-server implementeert u het HTTP- en / of XMPP- protocol om te communiceren met de GCM-verbindingsserver (s). App-servers verzenden downstream-berichten naar een GCM-verbindingsserver; de verbindingsserver haalt het bericht op en slaat het op en verzendt het vervolgens naar de client-app. Als u XMPP implementeert, kan uw app-server berichten ontvangen die zijn verzonden vanuit de client-app.
  • De Client-app is een GCM-compatibele client-app. Om GCM-berichten te ontvangen en te verzenden, moet deze app zich registreren bij GCM en een unieke ID krijgen, een registratietoken. Raadpleeg de documentatie voor uw platform voor meer informatie over het implementeren van de client-app.

Sleutelconcepten

Hieronder worden de belangrijkste termen en concepten van GCM samengevat. Het is onderverdeeld in deze categorieën:

  • Componenten - De entiteiten die een primaire rol spelen in GCM.
  • Referenties - De ID's en tokens die in GCM worden gebruikt om ervoor te zorgen dat alle partijen zijn geverifieerd en dat het bericht naar de juiste plaats gaat.

GCM-componenten en inloggegevens.

Components

  • GCM-verbindingsservers - Google-servers die betrokken zijn bij het verzenden van berichten tussen de app-server en de client-app.
  • Client-app - Een GCM-compatibele client-app die communiceert met uw app-server.
  • App-server - Een app-server die u schrijft als onderdeel van de implementatie van GCM. De app-server verzendt gegevens naar een client-app via de GCM-verbindingsserver. Als uw app-server het XMPP-protocol implementeert, kan deze ook berichten ontvangen die stroomopwaarts van client-apps worden verzonden.

Inloggegevens

  • zender ID
    Een unieke numerieke waarde die wordt gemaakt wanneer u uw API-project configureert. De afzender-ID wordt gebruikt in het registratieproces om een app-server te identificeren die berichten naar de client-app mag verzenden.

  • Server sleutel
    Een sleutel opgeslagen op de app-server die de app-server geautoriseerde toegang geeft tot Google-services. In HTTP wordt de serversleutel opgenomen in de koptekst van POST-aanvragen die berichten verzenden. In XMPP wordt de servercode gebruikt in het SASL PLAIN-verificatieverzoek als een wachtwoord om de verbinding te verifiëren. Neem de serversleutel nergens op in uw clientcode. U verkrijgt de serversleutel wanneer u uw API-project maakt.

  • Applicatie ID
    De client-app die zich registreert om berichten te ontvangen. Hoe dit wordt geïmplementeerd is platformafhankelijk:

    • Android : gebruik de pakketnaam uit het app-manifest.
    • iOS : gebruik de bundel-ID van de app.
    • Chrome : gebruik de Chrome-extensienaam.
  • Registratie token
    Een ID uitgegeven door de GCM-verbindingsservers aan de client-app waarmee berichten kunnen worden ontvangen. Merk op dat registratietokens geheim moeten worden gehouden.


Levenscyclusstroom

  • Registreer om GCM in te schakelen . Een exemplaar van een client-app registreert om berichten te ontvangen. Zie Client-apps registreren voor meer discussie.
  • Verzend en ontvang downstream-berichten .
    • Stuur een bericht. De app-server verzendt berichten naar de client-app:
      1. De app-server verzendt een bericht naar GCM-verbindingsservers.
      2. De GCM-verbindingsserver maakt wachtrijen op en slaat het bericht op als het apparaat offline is.
      3. Wanneer het apparaat online is, verzendt de GCM-verbindingsserver het bericht naar het apparaat.
      4. Op het apparaat ontvangt de client-app het bericht volgens de platformspecifieke implementatie. Raadpleeg uw platformspecifieke documentatie voor meer informatie.
    • Ontvang een bericht Een client-app ontvangt een bericht van een GCM-verbindingsserver. Raadpleeg uw platformspecifieke documentatie voor details over hoe een client-app in die omgeving de ontvangen berichten verwerkt.
  • Verzend en ontvang upstream-berichten . Deze functie is alleen beschikbaar als u de XMPP-verbindingsserver gebruikt .
    • Stuur een bericht. Een client-app verzendt berichten naar de app-server:
      1. Op het apparaat verzendt de client-app berichten naar de XMPP-verbindingsserver. Raadpleeg uw platformspecifieke documentatie voor meer informatie over hoe een client-app een bericht kan verzenden via XMPP.
      2. De XMPP-verbindingsserver maakt wachtrijen op en slaat het bericht op als de verbinding met de server wordt verbroken.
      3. Wanneer de app-server opnieuw wordt verbonden, verzendt de XMPP-verbindingsserver het bericht naar de app-server.
    • Ontvang een bericht Een app-server ontvangt een bericht van de XMPP-verbindingsserver en doet vervolgens het volgende:
      1. Parseert de berichtkop om de afzenderinformatie van de client-app te verifiëren.
      2. Stuurt "ack" naar de XMPP-verbindingsserver om te bevestigen dat het bericht is ontvangen.
      3. Optioneel ontleedt de berichtbelasting, zoals gedefinieerd door de client-app.

Officiële documentatie Referentie kunt u hier vinden .

Downstream-berichten verwerken in Android

Implementeer onMessageReceived dat de melding van de GCM-server zal vangen.

  @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.
  }
 

Downstream-berichten verwerken in iOS

Om de melding te ontvangen, implementeert u application:didReceiveRemoteNotification:fetchCompletionHandler: (of application:didReceiveRemoteNotification: voor iOS <8.0), en roept u GCMService:appDidReceiveMessage:message op om de ontvangst van het bericht naar GCM te bevestigen.

- (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
  // ...
}
 

Verzend downstream-berichten vanuit de cloud

Stuur een bericht met behulp van het GCM HTTP-verbindingsserverprotocol:

  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!",
     }
  }
 

Om dit in Postman te doen, moet u eenvoudig het volgende instellen ( sommige details zijn zoals hierboven vermeld ):

  1. Stel het verzoektype in op POST
  2. Stel in de kopteksten het volgende in:
    • Content-Type = applicatie / json
    • Autorisatie = <Uw GCM-servercode>
  3. Stel de payload-parameters in het hoofdgedeelte in ( in dit voorbeeld hebben we de onbewerkte optie gebruikt, zie screenshot (2) )
  4. Stuur het verzoek naar https://gcm-http.googleapis.com/gcm/send

screenshots:

(1) voer hier de afbeeldingsbeschrijving in

(2) voer hier de afbeeldingsbeschrijving in

Merk op dat het verzoek een succes was met de message_id in het antwoord.

PS: ik houd de voorbeeldservercode zichtbaar zodat anderen deze nog steeds kunnen uitproberen, zelfs als ze nog geen project hebben gemaakt. MAAR merk op dat de Server Key altijd geheim moet worden gehouden.