80 procent van de Nederlanders van achttien tot tachtig jaar bezit een smartphone. 61 procent van de huishoudens bezit een tablet en zelfs één op de vijf huishoudens bezit er meerdere. Gemiddeld gebruiken smartphone-eigenaren maandelijks 27 apps. Dit blijkt onder andere uit cijfers van Telecompaper en Nielsen.
Cijfers die er niet om liegen. Mobiele apparaten spelen dus een steeds grotere rol in ons leven en de vraag naar mobiele applicaties groeit. Dit brengt hele nieuwe uitdagingen op het gebied van softwareontwikkeling met zich mee. In deze bijdrage bespreek ik er zeven.
1. Online & offline scenario’s
Gebruikers van een mobiele device hebben niet altijd de beschikking over een netwerk of verbinding met internet. Wanneer je een applicatie bouwt, doe je er goed aan te kijken hoe de applicatie zich gedraagt wanneer er geen internetverbinding is, wanneer er wel een verbinding is en wanneer het apparaat verbonden is met het gsm-netwerk. In een ideaal geval zal een app zelf ook detecteren of het toestel verbinding heeft met een gsm- of een Wi-Fi-netwerk, zodat de gebruiker bijvoorbeeld gewezen wordt op mogelijk extra kosten. Je zou dan een mogelijkheid kunnen bieden om data niet op te halen als een apparaat bijvoorbeeld verbonden is met een gsm-netwerk of onbeveiligd Wi-Fi-netwerk.
2. Local storage
Wanneer je een applicatie ontwikkelt, moet je je afvragen welke informatie je lokaal opslaat en welke op de server. Waarschijnlijk wil je voor offline support en een betere performance van een app de informatie het liefst lokaal opslaan. Maar wanneer de data gevoelige informatie bevat, bewaar je de gegevens het liefst op de server. Als je informatie namelijk op de client hebt staan, en die stuur je naar de server, kan het zijn dat een client de informatie heeft aangepast. De data is dan niet meer eigendom van de server en dat maakt beveiliging moeilijk. De gevoeligheid van data is dus zeker iets waar je rekening mee moet houden als het gaat om de locatie waar je data opslaat. Daarnaast moet je goed kijken naar hoe je de cache opbouwt. Gaat het om actualiteit, en haal je informatie dus liever meteen van de server. Of gaat het om performance, en wordt de beschikbaarheid van informatie eerst gecontroleerd in cache, alvorens de server wordt geraadpleegd. Voor verschillende soorten data heb je wellicht verschillende caching-strategieën nodig.
3. Publicatie
Denk bij het ontwikkelen van een applicatie goed na over voor wie de applicatie is bedoeld en hoe je de app bij de eindgebruiker aanbiedt. Is het betaald of is het gratis? Bouw je een applicatie voor bedrijven, dan moet je je afvragen of je de app in de algemene appstore wilt aanbieden of in bijvoorbeeld de beheerde enterprise store van een bedrijf en welke eisen deze stores stellen. En als je van het concept native afstapt, kun je de uitrol van applicaties via html of manifest files binden aan een intranetomgeving of aan een website. Je moet dus keuzes maken over hoe de gebruiker de applicatie vindt, hoe openbaar of publiekelijk je de applicatie wilt aanbieden en wat de consequenties zijn van die keuzes.
4. Beveiliging
Beveiliging is bij softwareontwikkeling natuurlijk altijd een belangrijk aspect. Bij mobiele apps communiceert de software vaak met software die zich op de server bevindt. Meestal verloopt de communicatie via internet. Zorg ervoor dat, wanneer je data ophaalt en wegschrijft, dit via veilige protocollen verloopt, bijvoorbeeld met https. Wanneer je hiermee werkt, moet het certificaat op de serveromgeving wel als vertrouwd certificaat op je client worden behandeld. De client en de server communiceren dan over een beveiligde https-verbinding. Uiteraard zijn er meer beveiligingsaspecten waar je rekening mee moet houden. Maar de communicatie met de server zorgt wat mij betreft voor één van de grootste uitdagingen.
5. Energiebesparing
Een mobiel apparaat werkt met een accu. Op verschillende platformen heb je de mogelijkheid om een applicatie op de achtergrond te laten draaien, maar dit kost veel energie. Als je een goede mobiele app ontwikkelt, zorg je er voor dat je efficiënt en optimaal omgaat met het geheugenbeheer, tekenroutines, de opbouw van het scherm en het opslaan en terughalen van data. Ook laat je de applicatie netjes op de achtergrond verdwijnen wanneer deze niet wordt gebruikt. Het is verstandig om een applicatie, voor de distributie, te meten op performance en resource-gebruik. Een applicatie die continu de batterij van het device leeg trekt, zal door de gebruiker namelijk direct weer worden verwijderd.
6. Backend software
Een andere belangrijke uitdaging is het centraal ontsluiten van je gegevens. Het gaat om een applicatie die in een landschap met meerdere applicaties samenwerkt. Je hebt vaak een verbinding met een backend nodig waar de data wordt opgeslagen en waar je mee praat. Maar die backend is er niet altijd en moet dan worden gebouwd. Je kunt dan gebruik maken van een database, het zelf bouwen of je gebruikt een bestaand platform. In het geval van Android, iOS en Windows moet je je afvragen hoe de backend omgaat met push notifcations. De cloudomgevingen Parse.com en Microsoft’s Azure hebben bijvoorbeeld functionaliteit om cross platform push notifications te versturen. Een applicatie bouwen is eigenlijk nog maar de helft van de klus. De andere helft betreft het programmeren van de backend.
7. Schermgrootte
De devices waarop een applicatie draait, hebben vaak heel verschillende afmetingen. Dit varieert van 1,5 inch (smartwatch) tot 12 inch (A3-formaat tablet). Wanneer je een app ontwikkelt, moet je weten welk apparaat en welke schermgrootte je wilt ondersteunen en hoe je omgaat met verschillen daarin. Daarnaast heb je te maken met apparaten die kunnen worden gekanteld en dient het scherm mee te bewegen. In een extreem geval kan het zijn dat je compleet verschillende interfaces schrijft voor verschillende schermen. Om dit op te lossen, heeft Android Fragments geïntroduceerd. iOS kent hiervoor Storyboard, waarmee je met verschillende form factors verschillende storyboards voor verschillende devices kunt maken.
Niet compleet
Deze lijst met uitdagingen is natuurlijk niet compleet en belicht slechts beknopt een aantal uitdagingen. Er zijn nog veel meer zaken waar je bij de ontwikkeling van mobiele applicaties rekening mee moet houden. In mijn volgende blogs zal ik verder inzoomen op de hierboven genoemde uitdagingen.
Leuk artikel, en ik kijk uit naar de volgende.
Mijn ervaring is overigens dat de back-end bouwen echt veel eenvoudiger is dan de app zelf. Aangezien een back-end steeds vaker een JSON REST API is, is HTTPS geen probleem. Mijn beleving is dan ook dat het bouwen van apps voor diverse platformen veel uitdagender is dan het bouwen van een back-end.
Het grootste veiligheidsgevaar zie ik dan ook vooral in de lokale opslag op het toestel. En wat je ook aangeeft de synchronisatie tussen offline data en online back-end is niet triviaal.