Comment démarrer avec les notifications push sur Android

introduction

Amener les utilisateurs à installer votre application n'est que la moitié de la bataille. Les amener à l'utiliser régulièrement est l'autre moitié. Il est tout à fait possible que vos utilisateurs oublient complètement votre application après ne l'avoir utilisée qu'une ou deux fois. Quoi avec toutes les autres nouvelles applications en compétition pour leur attention.

En utilisant les notifications push, vous pouvez rappeler aux utilisateurs votre application de temps en temps, ce qui augmente les chances que votre application reste installée sur leurs appareils..

Google Cloud Messaging, GCM, est un service gratuit que vous pouvez utiliser pour envoyer des notifications push à vos utilisateurs. Dans ce didacticiel, vous apprendrez à utiliser cette application pour créer une application Android pouvant recevoir des notifications push et un simple script Python côté serveur pouvant les générer et les envoyer..

Pourquoi utiliser Google Cloud Messaging??

Pour la plupart des communications client-serveur, le client lance des demandes pour recevoir des données du serveur. En d'autres termes, le client extrait les données du serveur. Dans le cas des notifications push, toutefois, c’est le serveur qui lance le transfert des données..

Pour ce faire, vous devez généralement conserver une connexion TCP / IP persistante (connexion qui reste ouverte indéfiniment) entre le serveur et le client. Cela peut sembler intéressant, mais si vous utilisez une application populaire, la maintenance de milliers de connexions persistantes entre votre serveur et les appareils de vos utilisateurs peut s'avérer très coûteuse..

Google Cloud Messaging est un service qui résout ce problème en jouant le rôle d'intermédiaire entre votre serveur et le périphérique de votre utilisateur. Avec GCM, le Cloud Connection Server de Google, souvent appelé CCS, gère les connexions persistantes pour vous. Cela garantit également que vos notifications push sont envoyées de manière sécurisée et fiable..

Conditions préalables

Pour suivre avec moi, il vous faut:

  • la dernière version d'Android Studio
  • Python 2.7.6 ou supérieur
  • un appareil fonctionnant sous Android 4.4 ou version ultérieure avec les services Google Play installés

1. Configuration du projet Android Studio

Lancez Android Studio et créez un nouveau projet avec un Activité. Si vous avez utilisé les valeurs par défaut, le projet doit inclure une classe Java dans MainActivity.java.

Étape 1: Ajouter les dépendances

Dans ce projet, nous utiliserons le plugin Gradle de Google Services pour configurer GCM. Incluez-le dans le projet en ajoutant la ligne suivante dans le champ les dépendances section du projet build.gradle:

chemin de classe groovy 'com.google.gms: google-services: 1.5.0'

Ensuite, appliquez le plugin dans le app modules build.gradle:

plugin groovy apply: 'com.google.gms.google-services'

Pour pouvoir utiliser l'API GCM, ajoutez com.google.android.gms: play-services comme un compiler dépendance dans le même fichier:

groovy compile "com.google.android.gms: play-services: 8.3.0"

Si vous cliquez sur le Synchroniser maintenant bouton, vous devriez voir l'erreur suivante:

Clique le Installer le référentiel et synchroniser le projet lien pour corriger l'erreur.

Étape 2: mettre à jour le manifeste

À l'intérieur du projet AndroidManifest.xml déposer, créer et utiliser un fichier personnalisé C2D_MESSAGE permission basée sur le nom du paquet de votre projet. Assurez-vous que le Niveau de protection de l'autorisation est défini sur Signature.

"xml

"

Les notifications sont reçues sous forme d'émissions. Pour gérer ces émissions, notre application a besoin d'une BroadcastReceiver. Cependant, nous n'avons pas à le créer manuellement. Nous pouvons plutôt utiliser le GcmReceiver classe comme BroadcastReceiver.

le BroadcastReceiver doit avoir un filtre d'intention qui répond à la com.google.android.c2dm.intent.RECEIVE action et le nom de son Catégorie doit correspondre au nom du package de votre projet. Ajoutez le code suivant au manifeste:

"xml

"

2. Obtenir une clé API de serveur et un identifiant d'expéditeur

Lors de la communication avec le serveur Cloud Connection Server, nous devons nous identifier à l'aide d'une clé API côté serveur et d'un ID d'expéditeur côté client. Pour obtenir la clé API et l'ID de l'expéditeur, créez un nouveau projet dans la console des développeurs..

Commencez par cliquer sur le Choisissez une plate-forme bouton. Ensuite, cliquez sur le Activer les services pour mon application Android bouton. Lorsque vous le ferez, il vous sera demandé de fournir un nom et un nom de package Android pour votre application. Assurez-vous que le nom du package Android que vous indiquez correspond au nom du package que vous avez entré lors de la création du projet Android Studio..

Ensuite, cliquez sur le Choisissez et configurez les services bouton en bas. Vous pouvez maintenant sélectionner les services Google que vous souhaitez ajouter à l'application..

Pour l'instant, cliquez sur le Messagerie Cloud bouton puis cliquez sur Activer la messagerie Google Cloud. Après quelques secondes, votre clé API de serveur et votre identifiant d'expéditeur vous seront présentés. Notez la clé API du serveur et appuyez sur Fermer.

Le plug-in Google Services que nous avons ajouté précédemment nécessite un fichier de configuration pour fonctionner correctement. Générez le fichier en cliquant sur le bouton Générer des fichiers de configuration bouton.

Une fois le fichier généré, téléchargez-le et placez-le dans le projet de votre projet Android Studio. app annuaire.

3. Enregistrement du client

GCM identifie les appareils Android à l'aide de jetons d'enregistrement. Par conséquent, notre application doit pouvoir s'enregistrer à partir de chaque appareil Android sur lequel elle est installée..

Étape 1: Créer un service d'inscription

L'enregistrement doit être effectué sur un thread en arrière-plan, car le processus peut prendre un certain temps en fonction de la connectivité réseau. Comme l’enregistrement n’a besoin d’aucune entrée de la part de l’utilisateur, un IntentService est idéal pour cette tâche.

Créez une nouvelle classe Java appelée RegistrationService.java, en faire une sous-classe de IntentService, et remplacer sa onHandleIntent méthode.

"java public class RegistrationService étend IntentService public RegistrationService () super (“ RegistrationService ”);

@Override protected void onHandleIntent (Intention)  "

À l'intérieur de onHandleIntent méthode, nous pouvons utiliser l’API ID d’instance pour générer ou récupérer le jeton d’enregistrement. Tout d’abord, créez une instance du InstanceID classe, en utilisant ses getInstance méthode.

java InstanceID monID ​​= InstanceID.getInstance (this);

Nous pouvons maintenant utiliser le getToken méthode du InstanceID objet pour obtenir le jeton d'inscription sous la forme d'un Chaîne. getToken attend l'ID de l'expéditeur parmi ses arguments. Parce que nous avons ajouté le google-services.json fichier à notre projet, nous pouvons transmettre l’ID de l’expéditeur à la méthode à l’aide de R.string.gcm_defaultSenderID.

java String registrationToken = myID.getToken (getString (R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Si vous souhaitez voir le contenu du jeton d'enregistrement à des fins de débogage, vous pouvez le consigner en tant que message de débogage à l'aide de la commande Log.d méthode.

java Log.d ("Jeton d'inscription", registrationToken);

À ce stade, vous pouvez envoyer le jeton d'enregistrement sur votre serveur Web et le stocker dans une base de données. Cependant, vous n'avez pas à le faire si vous ne prévoyez pas d'adresser vos utilisateurs individuellement. Si vous envisagez d’envoyer le même message à tous les utilisateurs, vous devez suivre l’approche publication-abonnement..

Je vais maintenant vous montrer comment vous abonner à un sujet appelé my_little_topic. Il ne faut que deux lignes de code. Tout d’abord, créez une nouvelle instance du GcmPubSub classe utilisant ses getInstance méthode. Ensuite, appelez son souscrire méthode et passez le jeton d’inscription, ainsi que le nom du sujet.

java Abonnement GcmPubSub = GcmPubSub.getInstance (this); subscription.subscribe (registrationToken, "/ topics / my_little_topic", null);

Notre application peut désormais recevoir chaque notification push publiée sur my_little_topic.

Enfin, définissez le service dans AndroidManifest.xml.

"xml

"

Le service d'inscription est complet.

Étape 2: créer un InstanceIDListenerService

Les jetons d'inscription sont actualisés périodiquement. Par conséquent, chaque application Android utilisant GCM doit avoir un InstanceIDListenerService qui peut gérer ces rafraîchissements. Par conséquent, créez un nouveau fichier Java appelé TokenRefreshListenerService.java et en faire une sous-classe de InstanceIDListenerService. À l'intérieur de onTokenRefresh méthode de la classe, tout ce que nous avons à faire est simplement de recommencer le processus d’enregistrement en démarrant le service d’enregistrement en utilisant un Intention et le startService méthode.

Ajoutez le code suivant à TokenRefreshListenerService.java:

java public class TokenRefreshListenerService étend InstanceIDListenerService @Override public void onTokenRefresh () Intent i = nouvel Intent (this, RegistrationService.class); startService (i);

Ce service doit pouvoir répondre aux com.google.android.gms.iid.InstanceID action. Par conséquent, lors de la définition du service dans AndroidManifest.xml, ajouter le approprié filtre d'intention.

"xml

"

Étape 3: Démarrer le service d'inscription

Pour vous assurer que le processus d'inscription commence dès que l'application démarre, nous devons démarrer le RegistrationService classe à l'intérieur du onCreate méthode de Activité principale. Pour ce faire, créez un Intention pour cela et utiliser le startService méthode.

java Intention i = nouvelle Intention (this, RegistrationService.class); startService (i);

4. Affichage des notifications push

GCM affiche automatiquement les notifications push dans la barre de notification dès leur réception. Cependant, il ne le fait que si l'application associée contient une GCMListenerService.

Créez une nouvelle classe Java appelée NotificationsListenerService et en faire une sous-classe de GCMListenerService. Sauf si vous souhaitez gérer vous-même les données envoyées, vous n'avez pas à écrire de code dans cette classe. Nous pouvons laisser cette classe vide pour l'instant.

"java public class NotificationsListenerService étend GcmListenerService

"

En définissant le service dans AndroidManifest.xml, assurez-vous que vous ajoutez un filtre d'intention qui lui permet de répondre à la com.google.android.c2dm.intent.RECEIVE action.

"xml

"

5. Ajouter des icônes de notification push

Chaque notification push doit être associée à une icône. Si vous n'en avez pas, vous pouvez en obtenir un dans la bibliothèque d'icônes de conception de matériaux de Google..

Une fois l’icône téléchargée, placez-la à l’intérieur du res dossier de votre projet. Je vais utiliser ic_cloud_white_48dp comme icône.

6. Exécution de l'application Android

Notre application Android est maintenant complète. Une fois que vous l'avez compilé et exécuté sur un appareil Android, vous pourrez voir le jeton d'enregistrement dans le dossier. logcat les journaux.

Appuyez sur le bouton Retour de votre appareil pour quitter l'application. Cela est nécessaire car GCM affichera automatiquement les notifications push uniquement si l'utilisateur n'utilise pas l'application. Si vous souhaitez que les notifications soient affichées même lorsque l'application est en cours d'exécution, vous devez les créer vous-même à l'intérieur. NotificationsListenerService en utilisant le Notification.Builder classe.

7. Envoi de notifications push

Dans la dernière partie de ce didacticiel, nous allons créer un script Python simple pouvant générer et envoyer des notifications push à tous les appareils Android sur lesquels notre application est installée..

Vous pouvez exécuter ce script à partir de votre ordinateur local ou d'un serveur Web distant auquel vous avez accès SSH..

Étape 1: Création du script

Créez un nouveau fichier appelé send.py et ouvrez-le en utilisant votre éditeur de texte préféré.

En haut du fichier, importez le urllib2 et urllib modules. Nous utiliserons ces modules pour envoyer des données au serveur Cloud Connection de Google. Importer le JSON module également parce que les données que nous envoyons doivent être JSON valide. Enfin, pour accéder aux arguments de ligne de commande, importez le sys module.

python depuis urllib2 import * import urllib import json import sys

Ensuite, créez une variable qui stocke la clé API du serveur que vous avez notée précédemment. La clé doit faire partie de chaque requête HTTP que nous adressons au CCS..

python MY_API_KEY = "ABCDEF123456789ABCDE - 12A"

Chaque notification doit avoir un titre et un corps. Au lieu de les coder en dur dans notre script, acceptons le titre et le corps comme arguments de ligne de commande à l'aide de la commande argv tableau.

python messageTitle = sys.argv [1] messageBody = sys.argv [2]

Créez un nouvel objet dictionnaire Python pour représenter les données à envoyer au CCS. Pour que notre application Android puisse recevoir la notification, elle doit être publiée dans un sujet appelé my_little_topic. Par conséquent, ajoutez une clé appelée à au dictionnaire et définir sa valeur à / topics / my_little_topic.

Pour représenter le contenu de la notification, ajoutez une clé appelée notification au dictionnaire et définissez sa valeur sur un autre objet du dictionnaire contenant trois clés:

  • corps
  • Titre
  • icône

Assurez-vous que la valeur de la icône la touche correspond au nom de l'icône pouvant être dessinée dans votre projet Android.

python data = "to": "/ topics / my_little_topic", "notification": "body": messageCorps, "titre": messageTitle, "icône": "ic_cloud_white_48dp"

Convertissez le dictionnaire en chaîne JSON à l'aide de la commande décharges fonction de la JSON module:

python dataAsJSON = json.dumps (données)

Il ne reste plus qu'à envoyer la chaîne JSON à l'adresse https://gcm-http.googleapis.com/gcm/send. Pour ce faire, créez un nouveau Demande objet et set dataAsJSON comme ses données. Ensuite, réglez le Autorisation en-tête de MY_API_KEY et le Type de contenu en-tête de application / json.

demande python = demande ("https://gcm-http.googleapis.com/gcm/send", dataAsJSON, "autorisation": "key =" + MY_API_KEY, "type de contenu": "application / json")

Enfin, pour exécuter la demande et extraire la réponse, transmettez l’objet de la demande à la urlopen fonction et appeler son lis méthode.

python print urlopen (demande) .read ()

Le script Python est maintenant complet et prêt à être utilisé.

Étape 2: exécution du script

À ce stade, nous sommes prêts à envoyer des notifications push à tous les appareils sur lesquels notre application est installée. Ouvrez un terminal et entrez le répertoire dans lequel vous avez créé send.py.

Transmettez le nom du script au python exécutable avec une chaîne pour le titre de la notification et une pour le corps de la notification. Voici un exemple que vous pouvez utiliser:

bash python send.py "Ma première notification push" "L'API GCM est magnifique!"

S'il n'y a pas d'erreur, vous devriez obtenir une réponse qui ressemble à ceci:

javascript "message_id": 12345676892321

Si vous vérifiez votre appareil Android, vous devriez voir une nouvelle notification dans la barre de notification.

Conclusion

Vous savez maintenant comment envoyer des notifications push à vos utilisateurs. Dans cette leçon, vous avez appris à créer une application Android capable de s'enregistrer et de recevoir des notifications publiées sur un sujet spécifique. Vous avez également appris à créer un script Python pouvant publier des notifications..

Même si les notifications push peuvent sembler être un excellent moyen de communiquer avec vos utilisateurs, je suggère que vous les utilisiez avec parcimonie et uniquement si vous avez quelque chose d'utile à dire, car l'envoi d'un nombre trop important d'entre elles est peut-être le moyen le plus rapide d'obtenir votre application. désinstallé.

Pour en savoir plus sur Google Cloud Messaging, consultez le Guide de la messagerie en nuage..