Offline
(C) Als gebruiker wil ik ook gebruik kunnen maken van de spellen als ik geen internetverbinding heb
Last updated
Was this helpful?
(C) Als gebruiker wil ik ook gebruik kunnen maken van de spellen als ik geen internetverbinding heb
Last updated
Was this helpful?
Uit de debriefing van de opdrachtgever kwam naar voren dat er niet altijd een internetverbinding die goed is. Hierdoor is het belangrijk dat de applicatie ook offline werkt en dat spellen offline beschikbaar zijn.
Belangrijk is dat de gebruiker snapt dat er offline mogelijkheden zijn. Daarom hebben we in de eerste een download button gemaakt bij elke spel.
Als een gebruiker hierop klikt, wordt het spel opgeslagen en veranderd de button
Er zijn daarna meerdere feedback momenten voor de gebruiker waarin wordt aangegeven dat het spel offline beschikbaar is. Zoals bijvoorbeeld onder de titel van het spel.
Als de gebruiker nu offline zou zijn. Krijgt deze het volgende te zien
Mocht de gebruiker geen opgeslagen spellen hebben, dan wordt het volgende getoond:
Technisch gezien is de gebruiker nu in staat, om zonder internet verbinding de website te gebruiken. Er zijn echter een aantal problemen voor de gebruikerservaring. Deze kwamen naar vooren tijdens de ontwikkeling, maar ook tijdens de design review
Veel technische termen:
Worden als offline, gedownload, opgeslagen, kunnen allemaal niet begrepen worden, het zijn technische termen die weinig kunnen zeggen bij iemand zonder technische kennis.
Geen onboarding
Het is voor de gebruiker niet duidelijk wat de mogelijkheden zijn. (ook icm het gebruik van de technische termen)
De gebruiker wordt niet uitgelegd hoe een spel offline beschikbaar wordt.
Het is niet de gebruikers fout.
Overal staat dat de gebruiker offline is, maar de app werkt gewoon. Dat kan lijken alsof de gebruiker iets fout doet en de gebruikservaring verminderen. Ook teksten als 'Oeps, je bent offline helpen hier niet bij'
Deze vragen hebben wij meegenomen in de volgende iteratie, waarin offline veel meer vanuit de gebruiker wordt bekeken. Deze iteratie heeft Mijn Gymles opgeleverd. Op de pagina van Mijn Gymles wordt dit uitgelegd
Om (onder andere) offline mogelijk te maken, wordt de website een Progressive Web App. Een PWA is een website die installeerbaar, betrouwbaar en meer mogelijkheden heeft dan een website. Het is soort mix tussen een website en een app.
Alles begint bij de service worker, deze maakt het mogelijk voor een website om een PWA te worden. Een service-worker werkt op de achtergrond en kan een request/fetch
opvangen. Hierdoor kan je de fetch aanpassen of iets anders terug sturen op basis van verschillende condities. Daarnaast kan een PWA toegang krijgen tot CacheStorage
hierin kun je requests opslaan, die terug gestuurd kunnen worden bij bijvoorbeeld een fetch
.
Een service-worker moet door middel van een aantal regels javascript geinstalleerd worden. Hierna is deze in de browser beschikbaar, ook als deze offline is. Hierdoor kunnen nog steeds fetch
events opgevangen worden.
De combinatie van de service-worker
, het opvangen van fetch
en CacheStorage
maakt het mogelijk om de website offline beschikbaar te maken.
Op het moment dat de service-worker
geinstalleerd wordt, voegen we een aantal pagina's toe aan de CacheStorage
. Als er een fetch request komt, kunnen we uit de CacheStorage
een response teruggeven. Dit kan zelfs offline, waardoor een website offline kan zijn.
Voor onze applicatie gebruiken we Svelte/Sveltekit. SvelteKit is heel erg gebaseeerd op het principe van Progressive Enhancement en heeft dus ook nagedacht over PWA.
Echter tijdens de ontwikkeling kwamen een aantal problemen voor vanwege de nieuwheid van SvelteKit.
Sveltekit, gebruikt Svelte, wat een Single Page Application is. Dit betekent dat er 1 pagina wordt geladen en dat er met JavaScript andere views worden geladen.
Omdat Svelte (in tegenstelling tot andere SPA frameworks) een build step heeft die alles naar JS compiled, weten we niet welke bestanden offline bescikbaar moeten zijn.
Gelukkig heeft SvelteKit hierover nagedacht. Door een service-worker.js (of.ts) bestand te maken in de src
zorgt Svelte ervoor dat deze mee gaat in de build en dat deze automatisch geinstalleerd wordt.
SvelteKit maakt hierdoor ook een aantal belangrijke verwijzingen mogelijk binnen de service-worker. Door module $service-worker
te importeren, krijg je toegang tot build
, files
en timestamps
.
build
is een array
met alle files die gebuild worden. Deze direct doorgegeven worden aan CacheStorage
waardoor alle .js en .css bestanden worden gedownload in de CacheStorage
. files
doet hetzelfde maar dan voor alle assets
(afbeeldingen, fonts, icons etc.)
De applicatie zelf is nu beschikbaar offline, maar de data van de spellen niet.
Omdat we niet alle spellen tegelijk op de telefoon willen downloaden moeten we de data die komt uit de [game].json endpoints selectief gaan cachen. Dus, op het moment dat iemand op de download knop klikt, moet aan de CacheStorage
de data uit het endpoint worden toegevoegd.