Firebase : the badass MBaaS

Il y a quatre ans, j’ai entrepris la création d’une application mobile. Le genre d’application qui allait concurrencer Facebook, Tinder et Snapchat à la fois !

Sérieusement ?

Néophyte dans le milieu de l’informatique, je me suis alors mis en quête de réponses à mes questions. Comment faire une application mobile, seul, sans grandes connaissances, et en peu de temps ?

J’ai tout d’abord essayé d’en savoir plus auprès de mes enseignants en informatique de l’époque. C’est là que l’on a commencé à me parler de serveur, de stockage de données, de backup, de maintenance, de gestion de montée en charge, de sécurité, d’authentification ou encore de virtualisation. J’ai alors compris que concurrencer Facebook ou Snapchat n’allez pas être si simple !

De nature têtu je ne me suis néanmoins pas découragé. Après recherches et études, je pu développer ma première application mobile, puis une deuxième… Suite à la découverte d’un article de programmation mobile, je découvris les services de Cloud. À l’époque, le service Parse était le service de cloud orienté mobile le plus en vogue du moment. Une petite révolution pour tous les jeunes développeurs comme moi. Un tel service permet de s’affranchir des nombreuses contraintes et compétences qui me faisaient défaut jusque-là tout en restant focaliser sur l’application mobile.

Depuis 2013, de l’eau a coulé sous les ponts et Parse s’est fait racheté par Facebook pour la bagatelle de 85M de dollars….

pour fermer boutique quelques années plus tard. Un choc pour les développeurs, 500.000 applications s’appuyaient sur la plateforme !

Heureusement, Parse n’était pas la seule solution pour le cloud mobile. Parmi les autres solutions Firebase, fraichement mis à jour en début d’année 2016. C’est de ce dernier service que je souhaiterais vous parler aujourd’hui.

App success made simple
The tools and infrastructure you need to build better apps and grow successful businesses

C’est le slogan que l’on peut lire en se rendant sur le site officiel de Firebase. Alléchant, non ?

Avant de rentrer plus dans les détails, voici un petit rappel sur ce qu’est un service de Cloud.

Le Cloud, c’est quoi ?

Rien de mieux qu’une petite définition Wikipédia du Cloud pour une explication claire et concise (je n’aurais tout simplement pas fait mieux !).

Le cloud computing, ou l’informatique en nuage est l’exploitation de la puissance de calcul ou de stockage de serveurs informatiques distants par l’intermédiaire d’un réseau, généralement internet. Ces serveurs sont loués à la demande, le plus souvent par tranche d’utilisation selon des critères techniques (puissance, bande passante, etc.) mais également au forfait.

Il existe différents types de services de Cloud : IaaS, PaaS, SaaS ou encore BaaS. C’est à cette dernière catégorie qu’appartient Firebase. Ou pour être plus précis, on qualifiera ici Firebase de MBaaS : Mobile-Backend-as-a-Service.

Comme nous pouvons le voir ci dessus, le Cloud permet de déléguer un bon nombre de tâches à un service tiers. En passant du stockage à la base de données ou encore au monitoring, tout pourra être géré de façon simple et instantané. Dans le cas de Firebase, ces services sont construits de façon à être complètement orientés mobile. Les besoins d’un service web ne sont en effet pas tout à fait les mêmes que pour un service mobile (notification push, lien dynamique, etc.).

Business model

Les différents plans proposé par Firebase — Source

On observe qu’une importante quantité de fonctionnalités sont mises à disposition gratuitement. Parmi celles-ci les notifications push, l’analytique, le rapport de crashs ou encore les liens dynamiques. Je reviendrai sur certaines de ces fonctionnalités un peu plus loin.

Les services en rapport direct avec les ressources matérielles, stockage de données et hébergements, sont en revanche payant dès que les besoins deviennent plus importants.

Le premier plan gratuit “Spark” constitue une bonne base pour lancer une petite application ou un prototype de R&D en interne par exemple, suivi par le plan “Flame” puis le plan “Blaze” pour les besoins plus importants.

Dans le cas du plan “Blaze”, le service devient “élastique : vous payez ce que vous consommez (la facture devient donc elle aussi élastique !). De plus, ce dernier plan possède certains services intéressants comme les backups automatiques, des services de Google Cloud Plateforme ou de type IaaS.

Outils fournis

Résumé des différents services proposé par Firebase — Source

Comme nous le montre ce graphique ci-dessus, Firebase couvre quasiment tous les besoins nécessaires pour produire une application à succès.

Nous allons voir maintenant plus en détail une partie des principaux outils mis à disposition.

Développement

Base « en temps réel »

Première caractéristique et pilier de ce service : la base de données “en temps réel”. Le terme “en temps réel” est à prendre avec des pincettes dans le sens où cela ne sera jamais exactement du temps réel, mais seulement une synchronisation entre votre application et votre base de données hébergée chez Firebase.

La base de données permet de stocker des objets JSON de façon assez flexible. L’accès à la base de données peut s’effectuer de différentes manières :

  • Soit à travers les SDK fournis par Firebase (iOS, Android, Node, Unity, C++ ou encore Web).
  • Soit en REST à travers une URL unique caractérisant votre base de données.

D’après les informations dévoilées par le fondateur de Firebase, la base de données repose sur MongoDB et est exploité avec du NoSQL. En cas de montée en charge, les allocations de ressources sont gérées de façon automatique par Firebase si votre plan de paiement le permet.

Interface de gestion de la base de données

Une interface administrateur permet de visualiser et de gérer la base de données directement depuis votre navigateur. Depuis cette interface, il est également possible de gérer les permissions d’accès à la base de données, chose importante pour les aspects de sécurité.

Nous verrons plus tard dans la partie démonstration un exemple d’utilisation de cette base de données à l’aide du SDK Firebase pour iOS et Android.

Authentification

Firebase propose dans ses différents SDK plusieurs outils d’authentification auprès des plus grands réseaux sociaux à travers le protocole OAuth2. En quelques lignes, vous pouvez connecter vos utilisateurs sur Google, Github, Facebook ou encore Twitter.

Firebase permet ensuite de stocker les utilisateurs et de les gérer de façon intelligente depuis un dashboard (suppression, blocage, ajout, etc.).

Interface de gestion des utilisateurs après connexion à travers l’outils d’authentification Firebase

Stockage de fichier

Si vous avez besoin de stocker des fichiers, Firebase propose un moyen simple d’en importer et d’y accéder depuis n’importe quelle plateforme en REST ou avec les SDK associés.

Interface de stockage de fichier

Il est également possible comme pour les utilisateurs de gérer vos fichiers à travers une interface web.

Hébergement

Si vous avez besoin d’héberger un site internet statique, il est possible de le faire avec Firebase. Déployer vos sites en ligne devient alors réalisable en quelques minutes afin de les rendre accessibles depuis n’importe quelle endroits du monde.

Les applications hébergées seront alors répliquées sur différents CDN à travers le monde afin de garantir un accès rapide depuis n’importe ou ! En cas de forte affluence, Firebase s’occupe de la montée en charge et des allocations de ressources nécessaires (moyennant finance bien entendu…).

Une fois l’application/site web déployée, il est possible à travers l’interface de gestion Firebase d’observer les fluctuations de bande passante et de stockage de votre application.

Laboratoire de tests

Les applications mobiles tournent aujourd’hui sur plusieurs centaines de smartphones différents. Il devient difficile parfois de tester votre application sur tous les types de smartphones. Par exemple pour tester les diverses versions du système d’exploitation ou les tailles d’écrans, de nombreux problèmes peuvent apparaitre une fois votre application mise en production.

Pour répondre à cette problématique, Firebase propose de tester ses applications sur de vrais terminaux mobiles hébergés chez eux, le tout de façon automatique ou manuelle avec l’écriture de scripts.

Source

A l’issu des tests, on peut observer dans la console Firebase un rapport des tests effectués avec les logs, les screenshots et les bilans sur chacun des terminaux testés.

Pour des raisons techniques, cet outil de tests n’est malheureusement pas disponible sous iOS ou Windows Phone.

Rapport automatique de crash

Votre application est parfois susceptible de cesser de fonctionner inopinément. Mais qu’en est-il quand un crash arrive en production ? Pas toujours facile d’en trouver la cause !

Firebase propose d’inclure avec son SDK un rapport de crash automatique. Dès que votre application cessera de fonctionner (et que l’application sera relancée après !) , vous pourrez savoir quand et pourquoi l’application a cessé de fonctionner directement depuis votre interface de gestion Firebase.

Interface de rapport d’erreur

Comme nous pouvons le voir ci-dessus, le rapport est suffisamment précis pour connaitre la cause exacte de l’erreur. Cet outil est indispensable pour ne pas laisser les erreurs trainer en production !

(Firebase) Cloud Messaging

Les messages sous forme de notifications sont aujourd’hui au coeur des stratégies mobiles pour accroitre la rétention. Pour répondre à ce besoin, Firebase met à disposition gratuitement dans toutes ses formules de prix un système de notification performant.

Ces notifications peuvent être envoyées depuis l’interface de gestion des notifications avec différents critères d’envois ou encore à travers le protocole HTTP ou XMPP depuis un serveur par exemple.

Analytics

Au coeur des différents outils précédemment présentés se trouve l’analyse de l’utilisation de vos applications. Cette analyse est cruciale et nécessite en temps normal un long travail de développement.

Firebase met à disposition un outil performant d’analytique à l’aide d’un tableau de bord plutôt agréable. Voici quelques captures d’écran pour illustrer mes propos :

Courbes des utilisateurs actifs
Informations sur les versions et les types de terminaux

Cet outil n’est en réalité qu’une adaptation de Google Analytics. Quand il s’agit de collecte de données, Google n’est jamais bien loin !

Installation

L’installation de Firebase sur une plateforme est facilitée par la documentation qui décrit étape par étape comment procéder. Voici certains liens pour vous faire une rapide idée pour les deux principales plateformes mobiles :

L’installation de chacun des services prend généralement entre 5 minutes et 2 heures suivant votre niveau d’expertise.

Nous allons maintenant voir ce qu’il en est en pratique avec une démonstration d’installation et d’utilisation de la base de données…

Démonstration

Pour cette démonstration, j’ai choisi de montrer la mise en place de la base de données “en temps réel” sur la plateforme iOS et Android.

Le scénario consiste à changer des données dans la base de données et d’observer le changement s’effectuer de façon automatique grâce à la synchronisation que fournit le SDK Firebase.

Certains morceaux de codes relatif à la construction de l’interface utilisateur ne seront pas expliqués. Tout le code source est cependant disponible sur Github pour les plus curieux d’entre vous.

C’est parti !

La première étape consiste à créer un projet depuis la console Firebase (un compte Google est nécessaire afin d’y accéder) :

Ensuite laissez-vous guider en fonction de la plateforme de votre choix…Dans notre cas, il s’agira de la plateforme iOS.

iOS

L’installation sur iOS se fait de façon assez simple et rapide à l’aide du gestionnaire de dépendance cocoapods.

Voici les différentes étapes :

  • Création d’un projet iOS “Single View Application” avec Xcode.
  • Installation de cocoapods et initialisation du fichier de configuration :
  • Ajout des dépendances Firebase dans le fichier Podfile précédemment généré par la commande d’initialisation.
  • Téléchargement du SDK :
  • Téléchargement du fichier de configuration : il s’agit du fichier au format .plist qui vous est proposé lors de la création de votre application. Ce fichier doit être déplacé dans votre projet dans XCode. Il contiendra les informations nécessaires pour faire le lien entre votre application et votre projet Firebase précédemment créé.
  • Configuration de votre fichier AppDelegate (point d’entrée de l’application) de façon à configurer Firebase dès le lancement de votre application.
  • Création d’un UITableViewController qui affichera la liste des données dans la base de données Firebase.
  • Une fois le controller créé, il faut initialiser une référence vers la base de données, puis récupérer les données à l’aide du SDK iOS de Firebase. Voici le code associé :

La ligne 4 permet de récupérer une référence de votre base de données. Cette référence est ensuite exploitée à la ligne 10 afin de récupérer au format JSON la base de données hébergée chez Firebase.

Le code source du SDK n’étant pas disponible publiquement, il est difficile de savoir exactement ce qui est réalisé par ces quelques lignes de code.

La prochaine étape consiste à mettre en place ce qui nous intéresse le plus : la synchronisation de la base de données. Pour cela il est nécessaire d’ajouter des “observeurs” d’événements depuis notre controller.

  • Mise en place d’observeurs d’ajout, de modification et de suppression :
  • Ajouts et suppressions dans la base :

La ligne 6 permet de supprimer un utilisateur dans la base de données. Inutile de supprimer les données de votre controller, elles seront automatiquement supprimées à travers l’observeur que nous avons précédemment ajouté.

  • Affichage des “utilisateurs” :

Dans cet exemple la base de données contient de simple association clef/valeur (cf le fichier JSON de base disponible ici). Nous utiliserons donc uniquement un dictionnaire afin de stocker les données.

  • Configuration des accès

Par défaut la base de données Firebase est accessible uniquement après s’être authentifié. Pour les besoins de la démonstration nous allons autoriser l’accès à toutes les personnes. Pour cela rendez-vous dans l’onglet Database > Règles de votre console et saisissez ce bout de JSON :

Passons maintenant à Android.

Android

Sur Android l’implémentation se passe de façon identique à iOS, c’est pourquoi toutes les étapes ne seront pas expliquées. Le code source est disponible via ce lien.

Voici les principales étapes :

  • Création d’une seconde application depuis l’accueil de votre projet Firebase :
  • Mise en place des dépendances via Graddle.
  • Importation du fichier .json de configuration qui vous sera proposé pendant l’installation. Comme pour iOS, ce fichier contient différentes informations (clef, identifiant) qui permettront de faire le lien entre votre application et Firebase.
  • Création d’un objet User afin de stocker les “utilisateurs” de notre base de données :

De la même façon que pour iOS, on vient écouter (pattern observer) les différents changements dans la base de données pour les différents événements possibles (modifications, suppressions, ajouts, etc.).

Maintenant que tout est en place, voyons ce que cela donne en action !

Démonstration en vidéo

Plus parlante que des explications, voici une démonstration en vidéo de la base de données en temps réel de Firebase avec le code que nous avons précédemment vu :

https://vimeo.com/309135831

La vidéo présente les modifications sur la base de données à travers le dashboard Firebase, une application iOS native et une application Android native.

Comme vous pouvez le voir, c’est assez rapide !

Concurrence et alternative

Depuis quelques années les services de Cloud ne cessent de fleurir aux quatre coins du globe. Je vous invite donc à les comparer et en tester afin de vous faire votre propre opinion, et surtout de choisir celui qui répondra le mieux à vos besoins.

Si vous ne souhaitez pas mettre vos oeufs dans même panier ou confier vos données à Google, il existe également d’autres services ne réalisant qu’une seule fonction. Par exemple vous pouvez héberger votre base de données chez AWS, gérer vos notifications chez Batch et observer vos rapports d’erreurs avec Crashlytics.

Voici un lien listant de nombreuses alternatives à Firebase : https://github.com/relatedcode/ParseAlternatives.

Visibilité et documentation

Firebase constitue en 2016 l’un des plus sérieux MBaaS du moment. De nombreuses applications utilisent Firebase et profitent d’un support et d’une communauté assez importante.

Que cela soit sur Github, StackOverflow ou directement sur leur site via un ingénieur de chez Firebase, il est possible de trouver rapidement la réponse à vos questions en cas de problèmes.

Conclusion

En conclusion, je dirai que Firebase représente ce que les boosters sont à Ariane 5, un outil puissant qui permettra à votre application de se mettre en orbite rapidement.

Si votre application utilise abondamment les services de stockage, il est important de garder à l’esprit qu’une fois qu’Ariane 5 est propulsé à plus de 65 km d’altitude, ses boosters sont détachés. Il en va de même pour votre application, Firebase ne constitue à mon sens qu’un ”booster” qui doit être détaché afin de préparer son propre système de Cloud. L’environnement sera moins couteux et plus flexible une fois que votre application aura faite ses preuves. Gardez bien cela à l’esprit !

Pour conclure la petite histoire débutée en début de poste : quatre ans plus tard, je n’ai toujours pas fait d’application permettant de concurrencer les mastodontes des réseaux sociaux. Mais Firebase m’a tout de même permis de lancer de nombreuses applications, ou encore de mettre ma startup sur pied en quelques semaines seulement ! Bien d’autres projets sont également en route 🚀

Merci pour votre lecture

Florian GABACH