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..
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..
Pour suivre avec moi, il vous faut:
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.
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.
À 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
"
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.
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..
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.
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
"
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);
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
"
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.
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.
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..
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:
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é.
À 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.
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..