Comment créer un serveur pour envoyer des notifications push avec GCM à des appareils Android à l’aide de Python

introduction

Les notifications push permettent à votre application Android de notifier un événement à un utilisateur, même s’il ne l’utilise pas. L’objectif de ce tutoriel est d’envoyer une notification push simple à votre application. Nous utiliserons * Ubuntu 14.04 * et * Python 2.7 * sur le serveur, ainsi que * Google Cloud Messaging * en tant que service de notification push.

Nous utiliserons le terme server pour désigner l’instance créée avec DigitalOcean. Nous utiliserons GCM pour faire référence au serveur de Google, celui qui se trouve entre le périphérique Android et votre serveur.

Conditions préalables

Vous aurez besoin de ces choses avant de commencer le tutoriel:

  • Une * application Android *; voir developer.android.com

  • A * Ubuntu 14.04 * Droplet

  • Votre adresse IP de Droplet

À propos des notifications push

Les serveurs de connexion GCM fournis par Google prennent les messages d’un serveur d’applications tiers, tel que votre droplet, et les envoient à une application Android compatible avec GCM (l’application cliente) exécutée sur un périphérique. Actuellement, Google fournit des serveurs de connexion pour HTTP et XMPP.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/1.png [Les serveurs de connexion GCM envoient des données entre votre serveur tiers et les applications client.]

En d’autres termes, vous avez besoin de votre propre serveur pour communiquer avec le serveur de Google afin d’envoyer les notifications. Votre serveur envoie un message à un serveur de connexion GCM (Google Cloud Messaging), puis le serveur de connexion met en file d’attente et stocke le message, puis l’envoie au périphérique Android lorsque celui-ci est en ligne.

Première étape - Créer un projet Google API

Nous devons créer un projet Google API pour activer GCM pour notre application.

Consultez la page https://console.developers.google.com [Console de développeurs Google].

Si vous n’avez jamais créé de compte de développeur ici, vous devrez peut-être fournir quelques détails.

Cliquez sur * Créer un projet *.

Entrez un nom de projet, puis cliquez sur * Créer *.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/2.png [Nouveau projet Google API]

Attendez quelques secondes que le nouveau projet soit créé. Ensuite, affichez votre * ID de projet * et votre * Numéro de projet * en haut à gauche de la page du projet.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/3.png [ID et numéro du projet]

Notez le * numéro de projet *. Vous allez l’utiliser dans votre client d’application Android.

Deuxième étape - Activer le GCM pour votre projet

Assurez-vous que votre projet est toujours sélectionné dans la https://console.developers.google.com [console des développeurs Google].

Dans la barre latérale à gauche, sélectionnez * APIs & auth *.

Choisissez * API *.

Dans la liste des API affichée, réglez le commutateur sur * ON *. Acceptez les conditions d’utilisation.

  • Google Cloud Messaging pour Android * devrait maintenant figurer dans la liste des API activées pour ce projet.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/4.jpg [Activation de la messagerie Google Cloud pour Android]

Dans la barre latérale à gauche, sélectionnez * APIs & auth *.

Choisissez * Credentials *.

Sous * Accès à l’API publique *, cliquez sur * Créer une nouvelle clé *.

Choisissez * Clé du serveur *.

Entrez l’adresse IP de votre serveur.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/5.png [Adresse IP de la clé du serveur]

Cliquez sur * Créer *.

Copiez la * API KEY *. Vous devrez entrer ceci sur votre serveur plus tard.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/6.jpg [Clé API]

Troisième étape - Lien Android App

Pour tester les notifications, nous devons associer notre application Android au projet Google API que nous avons élaboré.

Si vous débutez dans le développement d’applications Android, vous voudrez peut-être suivre le guide officiel de Mise en œuvre du client GCM.

Vous pouvez obtenir le code source officiel à partir de la page gcm.

Notez que les sources ne sont pas des mises à jour, vous devrez donc modifier le fichier Gradle:

+ gcm-client / GcmClient / build.gradle +

Ancienne ligne:

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

Ligne mise à jour:

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

Dans l’activité principale, localisez cette ligne:

String SENDER_ID = "";

Remplacez-le par le * numéro de projet * de votre projet API Google.

Chaque fois qu’un appareil s’enregistre auprès de GCM, il reçoit un identifiant d’enregistrement. Nous aurons besoin de cet identifiant pour pouvoir tester le serveur. Pour l’obtenir facilement, il suffit de modifier ces lignes dans le fichier principal:

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

Après avoir exécuté l’application, consultez le logcat et copiez votre * regid * pour l’avoir pour plus tard. Il ressemblera à ceci:

=======================================
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/==========================﹕ =======================================

Quatrième étape - déployer un droplet

Déployez un nouveau serveur * Ubuntu 14.04 *. Nous avons besoin que ce soit notre serveur d’applications tiers.

Les serveurs de connexion GCM de Google prennent les messages d’un serveur d’applications tiers (notre Droplet) et les envoient aux applications sur les appareils Android. Alors que Google fournit des serveurs de connexion pour HTTP et CCS (XMPP), nous nous concentrons sur HTTP pour ce didacticiel. Le serveur HTTP est uniquement en aval: cloud-to-device. Cela signifie que vous ne pouvez envoyer que des messages du serveur aux appareils.

Rôles de notre serveur:

  • Communique avec votre client

  • Déclenche les requêtes correctement formatées vers le serveur GCM

  • Traite les demandes et les renvoie au besoin, en utilisant une suppression exponentielle

  • Stocke la clé API et les identifiants d’enregistrement du client. La clé API est incluse dans l’en-tête des demandes POST envoyant des messages.

  • Génère des ID de message pour identifier de manière unique chaque message envoyé. Les identifiants de message doivent être uniques par identifiant d’expéditeur

Le client communiquera avec votre serveur en envoyant l’ID d’enregistrement du périphérique afin que vous puissiez le stocker et l’utiliser lors de l’envoi de la notification. Ne vous inquiétez pas maintenant pour le gérer; C’est très simple et GCM vous fournit de l’aide en vous envoyant des messages d’erreur si un identifiant d’enregistrement est invalide.

Étape 5 - Configuration du serveur simple Python GCM

Connectez-vous à votre serveur avec un utilisateur sudo.

Mettez à jour vos listes de paquets:

sudo apt-get update

Installez les paquets Python:

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

Installez + python-gcm +. En savoir plus sur python-gcm here.

sudo pip install python-gcm

Créez un nouveau fichier Python quelque part sur le serveur. Disons:

sudo nano ~/test_push.py

Ajoutez les informations suivantes au fichier. Remplacez les variables marquées en. L’explication est ci-dessous.

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)

Explication:

  • + from gcm import * +: cela importe le client Python pour Google Cloud Messaging pour Android

  • + gcm +: ajoutez votre * API KEY * à partir du projet Google API; assurez-vous que l’adresse IP de votre serveur est dans les adresses IP autorisées

  • + reg_id +: ajoutez votre * regid * à partir de votre application Android

Sixième étape - Envoyer une notification push

Exécutez cette commande pour envoyer une notification de test à votre application:

sudo python ~/test_push.py

Attendez environ 10 secondes. Vous devriez recevoir une notification sur votre appareil Android.

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/7.png [Exemple de notification push]

Dépannage.

Si la notification n’apparaît pas sur votre appareil après environ 10 secondes, procédez comme suit:

  • Votre smartphone / tablette est-il connecté à Internet?

  • Avez-vous la clé de projet correcte?

  • Avez-vous le bon regid de l’application?

  • L’adresse IP de votre serveur est-elle ajoutée pour la clé de serveur API Google?

  • Le serveur est-il connecté à Internet?

Si vous ne recevez toujours pas la notification, c’est probablement l’application. Recherchez des erreurs dans le logcat.

Où aller en partant d’ici

Une fois ce test simple effectué, vous souhaiterez probablement envoyer les notifications à tous vos utilisateurs. Rappelez-vous que vous devez les envoyer par lots de 1000. De même, si le CGM répond par «ID non valide», vous devez le supprimer de votre base de données.

Vous pouvez adapter les exemples de ce didacticiel à votre propre application Android.