Genesis-blog

firebase

Premiers pas avec Firebase

Les 21 et 22 novembre, L’équipe mobilité a lancé ses travaux d’innovation. C’est l’occasion de se retrouver, d’échanger ses connaissances mais surtout de travailler ensemble sur des sujets innovants. Pour cette première, notre attention s’est porté sur Firebase, un outil disponible à la fois sur iOS et Android.

Firebase est créé en 2011 à San Francisco. Le produit initial s’occupe de la persistance de données et de leur synchronisation en temps réel avec les différents clients. L’entreprise est ensuite achetée par Google en octobre 2014. Le produit est intéressant et Google travaille son offre et regroupe un ensemble de fonctionnalités sous le nom de Firebase qu’il présente lors de la Google I/O en mai 2016. La présentation et les différents services sont prometteurs.

Firebase était un sujet que beaucoup de développeur souhaitaient découvrir. Nous profitions donc de ces deux jours afin d’explorer l’API et développer un jeu du pendu multi-joueur sur Android et iOS.

Firebase services

Firebase dispose de nombreux services. Nous vous invitons à consulter le site de Firebase (https://firebase.google.com/features/) afin de les découvrir.

Pour citer les principaux, voici ceux que nous avons retenu :

Une base de données en temps réel
https://firebase.google.com/docs/database/

Ceci est probablement la fonctionnalité la plus spectaculaire de Firebase. Lorsqu’une base de données est mise à jour, tous les utilisateurs connectés reçoivent les nouvelles données en temps réels. Cela signifie que l’application peut rester à jour sans l’interaction de l’utilisateur. Fini les « pull to refresh » pour mettre à jour une tableView !

Si un client change une donnée, tous les autres utilisateurs reçoivent le changement quasi instantanément. Et si un utilisateur perd la connexion, l’application va synchroniser et fusionner les nouvelles données dès que la connexion sera rétablie.

Voici les 5 étapes à suivre pour intégrer Firebase Database dans votre projet :

L’authentification des utilisateurs
https://firebase.google.com/docs/auth/

Firebase offre une suite complète de méthodes d’authentification (par email, Twitter, Facebook…). Elle permet d’avoir un contrôle total sur l’authentification des utilisateurs sans se soucier des règles de sécurité. Avec Firebase, l’authentification est rendue simple et rapide à implémenter.

La stack fournit une suite complète de méthodes d’authentification, permettant aux développeurs d’avoir un contrôle total sur l’authentification des utilisateurs. La mise en place de règles de sécurité est rendue simple et flexible par une approche déclarative très intéressante.

Push notifications

Un service de notifications est disponible afin d’envoyer des notifications aux utilisateurs ciblés

Firebase Analytics
https://firebase.google.com/docs/analytics/

Firebase intègre les outils d’Analytics afin d’obtenir des informations et statistiques sur les utilisateurs de notre application. L’utilisation est très simple via le SDK de Firebase. Nous pouvons par exemple enregistrer l’ensemble des pages qui sont ouvertes dans l’application afin de connaitre le comportement de nos utilisateurs et les fonctionnalités les plus utilisées.

L’hébergement
https://firebase.google.com/docs/storage/

Firebase permet aussi de stocker des médias (documents textes, musiques, images) de manières sécurisé.
La force du SDK Firebase : vous pouvez utiliser ces services pour créer des applications mobiles sans écrire une seule ligne de code serveur !

Un autre point intéressant est de pouvoir consulter en ligne le tableau de bord de notre application dans une interface agréable. Celui-ci regroupe l’ensemble des informations (Analytics, Authentication, Database…). Ci-dessous quelques screenshots effectués sur notre application FirePendu :

 

 

Nœud en base de données pour une partie créée par Vincent où il faut trouver le mot épitaphe.
Nœud en base de données pour une partie créée par Vincent où il faut trouver le mot épitaphe.
Ensemble des utilisateurs utilisant l’application
Ensemble des utilisateurs utilisant l’application

Application FirePendu

Afin de découvrir les fonctionnalités Firebase, nous avons développé un jeu du pendu, jouable à plusieurs sur des mobiles différents (iOS ou Android). Notre objectif principal est de découvrir le fonctionnement de la base de données temps réel dans un système de jeu tour par tour où chaque joueur propose une lettre jusqu’à ce qu’il trouve le mot à deviner.

Les différentes fonctionnalités de l’application sont les suivantes :

  • Création d’un compte
  • Authentification des utilisateurs par email ou via un compte Google
  • Création d’une partie
  • Voir les parties créés (mise à jour en temps réel)
  • Rejoindre une partie crée
  • Jouer une partie (enregistrement des données et synchronisation des données en temps réel)

Contrairement à une base de données traditionnelle, Firebase propose une solution différente concernant le stockage des données : celles-ci sont stockées à l’intérieur d’un fichier JSON. C’est le même cas que dans la plupart des systèmes de base de données NoSQL tels que MongoDB, Cassandra, CouchDB etc.

Les données sont stockées sous forme de grands objets qui peuvent contenir des paires key/value où la valeur peut être une chaîne, un nombre ou un autre objet. Cela implique donc qu’il ne faut pas structurer nos données comme dans une base de données traditionnelle :
https://firebase.google.com/docs/database/web/structure-data

En effet, il faut éviter de faire des propriétés imbriquées dans les objets Firebase : lors de la récupération d’un nœud, tous les nœuds enfants sont aussi récupérés.

Il faut donc essayer de mettre toutes les propriétés au même niveau et récupérer celles qui nous intéressent par clé : https://www.airpair.com/firebase/posts/structuring-your-firebase-data

Sur iOS, tous les objets à persister sont conforme au protocole FirebaseObjectProtocol

protocol FirebaseObjectProtocol {
var snapshot: FIRDataSnapshot? { get set }
var key: String? { get }
var ref: FIRDatabaseReference? { get }
var value: [String : Any] { get }

init?(snapshot: FIRDataSnapshot)
static func get(id pathString: String, with block: @escaping (Self) -> Void)
func create()
func update()
func remove()
}

extension FirebaseObjectProtocol {
var ref: FIRDatabaseReference? { return snapshot?.ref }
}

Ainsi, chaque objet dispose de l’ensemble des méthodes pour se persister en base de données, se mettre à jour et se supprimer. Nous n’entrerons pas dans le détail de l’implémentation pour persister des données et je vous redirige vers la documentation Firebase pour cela : https://firebase.google.com/docs/

Il suffit ensuite d’observer dans nos viewController les changements en base de données. Par exemple dans notre viewController indiquant la liste des parties créées, nous observons un ajout en base de données. Puis, dans le completionHandler, nous mettons à jour la tableView afin d’afficher la nouvelle partie :

private func observeGames() {
gameManager.gamesListObserver { (refresh) in
if refresh == true { self.tvGames.reloadData() }
}
}

func gamesListObserver( completionHandler: @escaping (_ refresh: Bool) -> Void) {
FirebaseManager().gamesRef.observe(.childAdded, with: {[unowned self] (snapshot) -> Void in
if let game = Game(snapshot: snapshot),
self.gameIsDisplayed(game: game) {
self.games.append(game)
completionHandler(true)
}
})
}

Conclusion

Les outils Firebase sont puissants et plutôt simples à appréhender. Ces deux jours nous ont permis de découvrir l’authentification et la base de données temps réel. L’avantage de Firebase est d’avoir une suite d’outils à portée de main dans lequel le développeur peut piocher selon ses besoins.

L’authentification, le caractère temps réel de la base de données, les analytics et le service de notifications pushs sont un véritable plus et facilite l’implémentation sans se soucier des problèmes de sécurité et surtout sans avoir à écrire une seule ligne de code côté serveur.

Si vous êtes aussi curieux de découvrir Firebase, consultez leur page de documentation https://firebase.google.com/docs/ ainsi que les différents exemples fournis https://firebase.google.com/docs/samples/

Voici des liens qui vous permettrons rapidement de comprendre la logique de Firebase :

Comprendre comment utiliser l’authentification et l’enregistrement des données dans Firebase :
https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2

Cas pratique : Une application iOS de tchat en temps réel
https://www.raywenderlich.com/140836/firebase-tutorial-real-time-chat-2

Autre information montrant la volonté d’appuyer Firebase et d’enrichir son offre, L’outil Fabric a été acquise par Google le 18 janvier 2017 https://fabric.io/blog/fabric-joins-google/ et sera intégré dans Firebase. Firebase s’impose désormais comme une solution complète pour construire et maintenir des application web, iOS et Android.

11
11

 Developer

 Developer : Swift and Objective-C

http://www.anthonyroani.com

Laissez un commentaire