5. Firebase
5. Firebase
Tijdens deze oefeningenreeks leer je Firebase gebruiken. Je begint met de configuratie van je project en vervolgens maak je gebruik van Firestore om extra features te voorzien in de chat app.
Deze oefening vertrekt vanuit het lesvoorbeeld.
Startbestanden
Oefening 0: Configureer je project
Download het lesvoorbeeld en begin met het aanmaken van een keystore om je Android project te ondertekenen. Maak vervolgens een Firebase project aan en configureer dan een web en Android app. Zoek de SHA-hashes van de keystore en voeg deze toe aan Firebase.
Voeg vervolgens Google en phone authentication toe aan je Firebase project. Als alles correct geconfigureerd zou je het voorbeeldproject moeten kunnen opstarten en zou het inloggen moeten lukken. Je zou ook boodschappen moeten kunnen versturen in het "General" kanaal.
Test, voor je verder gaat, dat zowel de Android versie als de webversie correct werken.
Oefening 1: Extra kanalen
Ga naar de Firestore configuratie van je Firebase project en maak daar een nieuwe collectie "Channels" aan. Voeg in deze collectie het kanaal "General" toe en twee nieuwe kanalen, "Frontend frameworks" en "Backend frameworks", als deze kanalen zijn publiek. In het uitgewerkte lesvoorbeeld vind je een model voor de kanalen.
Schrijf in de DatabaseService een nieuwe methode retrievePublicChannelList die alle publieke kanalen teruggeeft. Gebruik deze methode vervolgens om in het side-menu een lijst te tonen van alle kanalen. Natuurlijk moet je na een klik op een kanaal naar de juiste pagina gebracht worden.

Oefening 2: Kanalen aanmaken
Voeg een extra optie toe aan het menu waarmee een nieuw kanaal aangemaakt kan worden. De ingelogde gebruiker wordt de eigenaar van dit nieuwe kanaal. Gebruik een array voor het users attribuut, in deze array zit voorlopig enkel de eigenaar. Nadat het kanaal aangemaakt is wordt de gebruiker naar het nieuwe kanaal gestuurd en moet het kanaal in het side-menu verschijnen.
Oefening 3: Kanalen filteren
Schrijf een nieuwe methode retrieveMyChannelList die de kanalen ophaalt waar de ingelogde gebruiker in de users array zit. Het is niet mogelijk om de publieke kanalen en de kanalen waarin de gebruiker ingeschreven is, in één keer op te halen. Firebase ondersteunt geen or.
Gebruik deze methode om een extra sectie aan het menu toe te voegen, deze sectie toont de kanalen waarin de gebruiker ingeschreven is. Aangezien je twee groepen met kanalen hebt, bouw je een extra component die zo'n groep implementeert. Het is niet erg als een kanaal in beide lijsten staat.

Oefening 4: Gebruikers
Firebase authenticatie is gemakkelijk, maar er is één groot nadeel. Het is niet mogelijk om door de gebruikers te zoeken. Omwille van beveiligingsredenen is het ook geen goed idee om zo'n functie te voorzien. Maar aangezien we met de gratis versie van Firebase werken en geen server hebben waarop we de Admin SDK kunnen gebruiken, moeten we een alternatief zoeken. We kunnen elke gebruiker bewaren in een nieuwe collectie in de database.
Zorgt dat na het inloggen gecontroleerd wordt of een gebruiker voor de eerste keer inlogt. Als dit zo is moet de gebruiker weggeschreven worden naar een collectie profiles in de database. Een profiel bestaat uit een id, een naam, een email-adres en profile photo. Dezelfde gegevens dus, als een Firebase profiel.
Oefening 5: Privé kanalen
Tijdens het aanmaken van een nieuw kanaal heeft de gebruiker de mogelijkheid om één of meerdere gebruikers toe te voegen aan een nieuw (privé) kanaal. Via een zoekbalk, die op basis van de profielnaam werkt, kunnen gebruikers opgezocht worden.
Zorg er voor dat de eigenaar, tijdens het aanmaken van een nieuw kanaal, de mogelijkheid heeft om een gebruiker toe te voegen aan een nieuw (privé) kanaal. Gebruikers kunnen toegevoegd worden door middel van een zoekbalk, die op basis van de profielnaam werkt. Voor meer info over hoe je dit doet, verwijzen we je door naar de StackOverflow. Let op, Firestore ondersteunt geen case insensitive filters.
In onderstaande video zijn twee gebruikers ingelogd met een verschillende Google Account. Als je geen twee Googleaccounts hebt, kan je ook gebruik maken van de smartphone versie en zo inloggen via een GSM nummer.