Applications sans serveur avec fonctions cloud Firebase

L'objectif de Firebase est d'aider les développeurs à créer de meilleures applications et à les développer pour devenir des entreprises prospères. En prenant soin de l’arrière-plan ou de l’infrastructure de votre application, Firebase vous permet de vous concentrer sur la résolution des problèmes de vos utilisateurs. L'une des nouvelles fonctionnalités intéressantes annoncées lors de la conférence Google Cloud Next 17 au mois de mars pour Firebase était les fonctions de cloud. Dans ce tutoriel, vous apprendrez cette nouvelle fonctionnalité en construisant une application Android simple avec celle-ci.. 

Que sont les fonctions de nuage pour Firebase??

Les fonctions cloud de Firebase s'exécutent dans un environnement Node.js hébergé, privé et évolutif, dans lequel vous pouvez exécuter du code JavaScript. Vous créez simplement des fonctions réactives qui se déclenchent chaque fois qu'un événement se produit. Les fonctions cloud sont disponibles à la fois pour Google Cloud Platform et Firebase (elles ont été construites sur les fonctions Google Cloud).. 

Pour le moment, Cloud Functions prend en charge les déclencheurs suivants que vous pouvez écouter et auxquels vous pouvez répondre:

  • Déclencheurs de base de données en temps réel: déclenche une fonction lorsqu'un événement d'écriture se produit sur un chemin d'accès dans une base de données.
  • Déclencheurs d'authentification: déclencher une fonction lorsqu'un nouvel utilisateur est créé ou lorsqu'un utilisateur est supprimé.
  • Déclencheurs d'analyse: déclenche une fonction lorsqu'un nouvel événement de conversion est enregistré.
  • Déclencheurs Cloud Storage: une fonction peut être activée en cas de modification d'un compartiment, telle qu'un téléchargement, une mise à jour ou une suppression de fichier ou de dossier.
  • Déclencheurs Cloud Pub / Sub: déclenche une fonction lorsqu'un nouveau message est reçu dans un sujet Google Cloud Pub / Sub.
  • Déclencheurs HTTPS: se déclenchent lorsqu'une demande est faite à un noeud final.

Alors, pourquoi utiliser les fonctions du nuage?

Alors maintenant, vous avez vu la gamme de fonctionnalités offertes par les fonctions de cloud. Mais pourquoi les utiliser? 

L'exécution et la configuration d'un serveur principal et de serveurs peuvent être une véritable gêne. Vous devez gérer des problèmes tels que l'évolutivité et l'écriture de code dans des langages côté serveur. Toutefois, avec les fonctions de cloud, cette complexité est réduite. En outre, des tâches de calcul intensives peuvent être effectuées dans le cloud plutôt que sur le périphérique client (telles que le redimensionnement d'image pour le téléchargement ou l'écriture sur plusieurs chemins de votre base de données). Votre code sera également plus sécurisé dans le cloud que sur la machine cliente. Vous pourrez donc stocker en toute sécurité des données telles que des clés secrètes sur votre serveur.. 

Dans ce didacticiel, vous apprendrez à utiliser les déclencheurs de base de données en temps réel qui se déclencheront lorsqu'un événement d'écriture de base de données se produit. Ensuite, nous verrons comment utiliser le service Firebase Cloud Messaging pour envoyer une notification aux périphériques abonnés à une rubrique. Nous allons créer une application simple appelée Alertes Tutsplus, qui enverra une notification aux abonnés du sujet "android" à chaque fois qu'un nouvel article est disponible.

Conditions préalables 

Pour suivre ce tutoriel, vous devez être familiarisé avec:

  • Base de données en temps réel Firebase
  • Firebase Cloud Messaging
  • Mise en place d'un projet Firebase

Et vous devriez avoir Node.js installé sur votre ordinateur.

Consultez les didacticiels suivants ici sur Envato Tuts + si vous avez besoin d'aide pour démarrer avec Firebase:

1. Créer une fonction Cloud Firebase

Installer la CLI Firebase 

Maintenant que les conditions préalables sont configurées, téléchargez Cloud Functions.

Pour commencer à utiliser les fonctions de nuage, nous avons besoin de l’interface de ligne de commande Firebase CLI installée à partir de npm. Si vous avez déjà configuré le nœud sur votre machine, vous pouvez installer Cloud Functions avec:

npm install -g firebase-tools

Cette commande installera la CLI Firebase globalement avec toutes les dépendances nécessaires Node.js.

Initialiser le projet

Pour initialiser votre projet:

  1. Courir connexion firebase pour vous connecter à Firebase via le navigateur et authentifier l'outil CLI.
  2. Créez un nouveau répertoire de projet avec le nom tutsplus-alertes.
  3. Enfin, lancez fonctions init de firebase à partir de ce nouveau répertoire. Cet outil vous offre la possibilité d’installer des dépendances avec NPM. Il est prudent de refuser si vous souhaitez gérer les dépendances d'une autre manière..

Une fois ces commandes exécutées avec succès, la structure de votre projet ressemble à ceci:

  • .firebaserc: un fichier caché qui vous permet de basculer rapidement entre les projets avec utilisation de la base de feu.
  • firebase.json: décrit les propriétés de votre projet.
  • les fonctions/: ce dossier contient tout le code de vos fonctions.
  • functions / package.json: un fichier de package NPM décrivant vos fonctions de cloud.
  • fonctions / index.js: la source principale de votre code Cloud Functions.
  • fonctions / node_modules /: le dossier où toutes vos dépendances NPM sont installées.

Importer les modules nécessaires et initialiser l'application 

Pour développer notre application simple Tutsplus Alerts, nous avons besoin de deux modules de nœud: les modules Cloud Functions et Admin SDK (ces modules sont déjà installés pour nous). Alors allez au index.js et requièrent ces modules, puis initialise une instance d'application admin.

var functions = require ('firebase-functions'); var admin = require ('firebase-admin'); admin.initializeApp (functions.config (). firebase);

Coder la fonction cloud

Maintenant que les modules nécessaires à notre projet ont été importés et initialisés, codons notre fonction cloud dans le index.js fichier. Comme indiqué précédemment, nous allons écrire une fonction qui sera déclenchée lorsqu’un onWrite () L'événement se produit dans notre base de données en temps réel Firebase puis, en réponse, envoie une notification (un message en aval) aux abonnés du périphérique..

//… exports.sendNotification = functions.database.ref ('/ articles / articleId') .onWrite (event => // Saisissez la valeur actuelle de ce qui a été écrit dans la base de données Realtime. Var eventSnapshot = event.data ; var str1 = "Author is"; var str = str1.concat (eventSnapshot.child ("author"). val ()); console.log (str); var topic = "android"; var payload = data: title: eventSnapshot.child ("title"). val (), auteur: eventSnapshot.child ("author"). val (); // Envoie un message aux appareils abonnés au sujet fourni. return admin.messaging () .sendToTopic (topic, payload) .then (function (response) // Voir la documentation de référence MessagingTopicResponse pour le // contenu de la réponse. console.log ("Message envoyé avec succès:", réponse);) .catch (fonction (erreur) console.log ("Erreur lors de l'envoi du message:", erreur);););

Dans le code ci-dessus, nous écoutons le chemin de la base de données / articles / articleId, où articleId représente l'identifiant de l'article qui a été écrit avec succès. Maintenant, ce qui nous préoccupe vraiment, ce sont les données qui ont été écrites. Pour cela, nous utilisons event.data, qui est une interface statique DeltaSnapshot. 

Ensuite, ajoutez les données de cet instantané à une charge utile de messages et envoyez-les à la rubrique "Android". Le code asynchrone est simplifié avec les promesses JavaScript. 

Notez que dans le code ci-dessus, nous avons écrit sur la console en utilisant console.log (), ce qui nous aidera dans le débogage et la surveillance. Nous pouvons afficher ce journal dans notre tableau de bord Firebase ou via la ligne de commande avec: 

fonctions firebase: log

Sachez que, puisque cela fonctionne sur Node.js, vous pouvez installer d'autres modules disponibles à partir de NPM. Vous pouvez également coder en JavaScript ES6 ou TypeScript au lieu de JavaScript vanille. 

Déployer la fonction cloud

Déployons notre fonction cloud. Exécutez cette commande pour le déploiement:

$ firebase deploy --only fonctions

Maintenant, nous pouvons coder l'application Android qui s'abonne à la rubrique, écrire dans la base de données en temps réel et recevoir une notification lorsque des données sont écrites dans notre base de données en temps réel. C'est à ce moment que notre fonction cloud sera exécutée.! 

2. Créez l'application TutsplusAlerts

Créer un projet Android Studio

Tout d’abord, lancez Android Studio et créez un nouveau projet "TutsplusAlerts"avec une activité vide appelée Activité principale.

Pour suivre, assurez-vous d’avoir intégré Firebase à votre application.. 

Ajouter la dépendance à la base de données temps réel

Ajoutez la dépendance suivante à votre build.gradle fichier:

compiler 'com.google.firebase: firebase-database: 10.2.1' 

Assurez-vous de synchroniser votre projet après l'avoir ajouté.

Créer le modèle

Modélisons une entité d'article à conserver dans notre base de données temps réel..

public class Article public String title; public String author; public Article () // Constructeur par défaut requis pour les appels à DataSnapshot.getValue (Article.class) public Article (Titre de chaîne, Auteur de chaîne) this.title = titre; this.author = auteur; 

Créer la mise en page XML 

Notre mise en page XML pour l'activité principale n'aura que deux EditTexts et juste un bouton qui soumettra le nouvel article.

    

Écrire dans la base de données en temps réel

Nous allons maintenant écrire dans le chemin de la base de données Realtime /des articles/.

//… @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); final base de données FirebaseDatabase = FirebaseDatabase.getInstance (); final EditText titleEditText = (EditText) findViewById (R.id.et_title); final EditText authorEditText = (EditText) findViewById (R.id.et_author); Bouton submitButton = (Bouton) findViewById (R.id.btn_submit); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vue view) DatabaseReference myRef = database.getReference ("articles"). push (); article article = nouvel article (titleEditText.getText (). toString (), authorEditText.getText (). toString ()); myRef.setValue (article););  //… 

Votre application aura besoin d'un accès en écriture à la base de données. À des fins de démonstration uniquement, vous pouvez définir vos règles de sécurité pour autoriser toutes les lectures et écritures. Dans une application réelle, vous ne voudrez jamais utiliser de tels paramètres de sécurité non sécurisés.

"règles": ".read": "true", ".write": "true"

Vous pouvez en apprendre plus sur les règles de sécurité Firebase dans mon post ici sur Envato Tuts+.

Lancer l'application

À ce stade, nous pouvons tester l'application et voir si notre fonction cloud a été exécutée avec succès. Entrez un titre et un auteur, puis cliquez sur le bouton d'envoi. Après cela, visitez le Les fonctions tableau de bord et afficher les journaux. Notre journal personnalisé devrait apparaître.

D'après les journaux ci-dessus, nous voyons que nous avons exécuté avec succès notre fonction Cloud et envoyé un message contenant une charge utile aux périphériques abonnés au service '.Android'topic, mais aucun périphérique n'est encore abonné à ce sujet. Dans la section suivante, nous allons utiliser Firebase Cloud Messaging pour permettre aux périphériques de s'abonner à une rubrique, puis de traiter le message entrant du serveur pour afficher une notification.. 

3. Ajout de la prise en charge de Firebase Cloud Messaging

Inclure la dépendance 

Inclure la dépendance Firebase Messaging à votre build.gradle archivez et synchronisez votre projet par la suite:

compiler 'com.google.firebase: firebase-messaging: 10.2.1'

Traitement des messages

Nous devons créer un service qui étend FirebaseMessagingService et remplace le onMessageReceived rappels. 

paquet com.chikeandroid.tutsplusalerts; import com.google.firebase.messaging.FirebaseMessagingService; importer com.google.firebase.messaging.RemoteMessage; importer android.app.NotificationManager; importer android.app.PendingIntent; importer android.content.Context; importer android.content.Intent; importer android.media.RingtoneManager; importer android.net.Uri; importer android.support.v4.app.NotificationCompat; Classe publique MyFirebaseMessagingService étend FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Vérifie si le message contient une charge utile de données. if (remoteMessage.getData (). size ()> 0) showNotification (remoteMessage.getData (). get ("titre"), remoteMessage.getData (). get ("auteur"));  // Vérifie si le message contient une charge de notification. if (remoteMessage.getNotification ()! = null)  private void showNotification (Titre de la chaîne, Auteur de la chaîne) Intention de l'intention = nouvelle Intention (ceci, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent waitingIntent = PendingIntent.getActivity (this, 0 / * Code de demande * /, intention, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder (this) .setContentTitle ("Nouvel article:" + titre) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("Par" + auteur) .setAutoCancel (true) .setSound (.) ) .setContentIntent (waitingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID de la notification * /, notificationBuilder.build ()); 

Dans le code ci-dessus, nous obtenons également les données utiles et les affichons dans une notification, que l'application soit à l'avant-plan ou à l'arrière-plan..  

Mettre à jour le fichier manifeste

Mettez à jour le fichier manifeste, y compris le service créé précédemment dans la étiquette.

//…      //… 

S'abonner à un sujet

Enfin, nous devons nous abonner au sujet 'Android'afin que l'appareil puisse recevoir et traiter les messages envoyés à ce sujet. 

/… @Override protected void onCreate (Bundle savedInstanceState) //… FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); //… //… 

Lancer l'application 

Exécutez l'application pour la deuxième fois et entrez un titre et un auteur, puis cliquez sur le bouton d'envoi. Cette fois-ci, une notification apparaît chaque fois qu'un nouvel article est publié dans la base de données par un utilisateur d'application..

Avant cela, vous auriez eu besoin d’un serveur HTTP ou XMPP, ce qui impliquerait plus de code à écrire, ainsi que d’un serveur pour la configuration et la prise en charge..

Conclusion

Dans ce didacticiel, vous avez appris à propos de Cloud Functions pour Firebase: ce qu’ils sont, pourquoi vous pourriez en avoir besoin et comment commencer à utiliser Cloud Functions pour votre application. Sachez que Cloud Functions for Firebase est toujours en version bêta publique au moment de la rédaction de cet article.. 

Pour en savoir plus sur Cloud Functions for Firebase, reportez-vous à la documentation officielle. Et en attendant, découvrez certains de nos autres cours et tutoriels sur le développement d'applications Android.!