Firebase

LeChatNoirLeChatNoir Membre, Modérateur
juillet 2016 modifié dans Dev. iOS, watchOS, tvOS #1

Salut,


 


Je vais ajouté un aspect communautaire à  mon appli avec des comptes utilisateurs qui vont permettre d'ajouter des services. J'ai commencé à  analyser ce qui se faisait et en ajoutant AdMob à  mon appli (pour ceux qui suivent), j'ai dû ajouter Firebase car AdMob en dépend.


 


Firebase, c'est quoi ? C'est une sorte de grosse boite à  outils de Google qui met à  disposition des services bien sympas tels que :


=> l'authentification : une base de users hébergées directement par Firebase avec tout ce qui va bien autour (gestion des modifs mot de passe, login FB, Google, Twitter..., tokens, back office)


=> un back office pour gérer les notifs


=> une DB temps réel


=> un analytics par défaut


=> et bien d'autres choses encore...


 


Et pour tous ces services, un SDK pour IOS, Android  et Web (JS).


 


Voilà , c'était juste pour info.


J'ai commencé par l'authentification. Il y a un projet open Firebase Auth-UI qui offre une UI par défaut pour l'authent (avec gestion des FB & Co) et qui masque pas mal de problématique (en gros, l'intégration est rapide et la plupart des problématiques, masquées).


 


Je vous tiendrai informé des différents services que j'explorerai (j'ai prévu d'utiliser DB temps réel et notifs en plus de l'authent pour l'instant).


 


:)


Réponses

  • Merci pour ces intéressants retours, LeChatNoir !


  • LeChatNoirLeChatNoir Membre, Modérateur

    Petit retour sur la partie authentification.


    C'est bien foutu, y a pas à  dire.


     


    Firebase-UI s'intègre facilement avec cocoapod et moyennant quelques paramétrages, vous avez une interface permettant une authentification par mail/pwd, FB ou G+. Le user se créer directement sur le serveur Firebase et basta. Firebase UI s'occupe du reste (stockage de la session, reauthent, events sur le user).


    Pas de mots de passe à  gérer. Pas de token. Tout est transparent.


     


    Si le user oubli son mot de passe, il a qu'à  demandé une réinit. Pareil, tout est géré. Seul hic, le mail est en anglais. C'est le seul truc qui n'est pas "traduisible" .


     


    Voilà . Je passe à  la DB realtime.


    ++

  • LeChatNoirLeChatNoir Membre, Modérateur

    Quelques retours sur la DB NoSql temps réel.


     


    Ici aussi, c'est bien fait. Il faut se familiariser avec le noSql qui est en fait une sorte de gros JSON mais les APIs mettent à  dispo des fonctions assez pratiques qui permettent rapidement d'insérer des données, de les updater, de les supprimer.


     


    J'ai pas encore tout explorer mais je me suis heurté à  2 difficultés que je détaille ici au cas où :


     


    Tout d'abord, quand on veut écrire des données, on utilise une référence à  la DB qui est un objet FIRDatabaseReference.


    On se place au niveau du noeud NoSql souhaité et on fait un simple setValue:


     


    Or, Xcode auto complète avec un setValue:ForKey: et on a tendance à  l'utiliser et au runtime, ça plante violemment.


    Erreur de débutant :)


     


    Exemple : j'écrivais ça



    [self.ref setValue:localFav forKey:@favorites];

    Plantage violent (sans explications) ; parce qu'il faut en fait écrire ça 



    [[self.ref child:@favorites] setValue:localFav];

    La deuxième difficulté rencontrée, c'était pour écrire un NSDictionary.


    Je transformai un tableau en dictionnaire (demandez pas pourquoi, c'est mon besoin) et en écrivant dans la DB, plantage violent.


     


    Explication : je définissait mes clés de dictionnaire à  partie de NSNumber. Ce qui ne pose aucun pb à  iOS. Par contre, lors de l'écriture dans Firebase, plantage.


     


    Donc ça, pas bon :



    for (NSNumber * idSite in [localeDB sharedFavorites]) {
    [localFav setObject:@1 forKey:idSite];
    }

    Ca, bon : 



    for (NSNumber * idSite in [localeDB sharedFavorites]) {
    [localFav setObject:@1 forKey:idSite.stringValue];
    }

    Dernière info, il y a un mode debug quand on utilise l'API de la DB Firebase, pour le mettre en verbeux  :



    [FIRDatabase setLoggingEnabled:YES];

    A priori, ca fonctionne en ligne ou hors ligne, l'API gérant une copie locale de la DB. Mais ça, je dois encore le tester :)


     


    ++

  • LeChatNoirLeChatNoir Membre, Modérateur

    Donc Firebase realtime DB, checked :) Ca fonctionne bien et ça gère le mode offline/online. Du bonheur.


     


    Maintenant, j'ai une nouvelle problématique. J'allais d'ailleurs poster cette problématique sur le forum et vous demander comment vous feriez.


     


    Comme d'habitude, avant de poster, j'ai fait quelques recherches et je suis tombé sur... Firebase :D


     


    Je cherche à  gérer un mode d'invitation à  utiliser mon appli avec un système de codes promos genre "Invites 10 potes à  installer l'appli et débloque la version illimitée".


     


    En cherchant comment faire, il se trouve que Firebase à  un module appelé Firebase Invite qui fait exactement ça !


    Je ne l'ai pas vu de suite car sur la version francisée de leur site, ça n'apparait pas. Mais sur la version US, oui :


     


    https://firebase.google.com/docs/invites/


     


    Enjoy !


  • LeChatNoirLeChatNoir Membre, Modérateur

    Petit bémol : il faut que l'utilisateur ait ait un créer un compte au travers de "Google Sign In"...


     


     


    1. Implement Google Sign-In in your app. Users must be signed in with their Google Accounts to send invitations.
Connectez-vous ou Inscrivez-vous pour répondre.