Er was een tijd dat je als (Android)-gebruiker niet zoveel keuze had als je een app wilde gebruiken die om verregaande machtigingen vraagt. Dat is vooral vreemd (en verdacht) als deze app die toegang eigenlijk niet nodig zou moeten hebben (denk aan een zaklamp-app of print-app).

Tegenwoordig heb je als gebruiker wel meer controle en kan je zelf bepalen welke machtigingen een app heeft of niet. Helaas zijn er veel apps die niet of nauwelijks (willen) werken als je dat doet en daarom is de mogelijkheid machtigingen te beheren vaak een wassen neus.

Vaak is het niet duidelijk waarom zulke apps toch om dit soort machtigingen vragen en appbouwers doen ook weinig moeite om dat uit te leggen (uitzonderingen daargelaten).

Na voor de zoveelste keer met een kluitje het riet in te zijn gestuurd over dit vraagstuk besloten we zelf maar uit te zoeken waarom ontwikkelaars zo graag toegang willen tot je locatie. Willen ze weten waar gebruikers zich bevinden? Is het informatie die zij verzamelen om door te verkopen aan adverteerders? Heeft het te maken met telemetrie en ondersteuning? Soms wel, maar meestal is er iets anders aan de hand.

Bug of feature

Het blijkt namelijk niet altijd opzet te zijn dat er om deze permissie wordt gevraagd. Er zijn een hoop ontwikkelaars die daar op developersfora over klagen (omdat zij daar weer klachten over krijgen van gebruikers die zich, net als wij, hardop afvragen waarom een app moet weten waar je je bevindt).

Het blijkt te maken te hebben met een wijziging in de Google Android API sinds Android 6 (Marshmallow) met betrekking tot de Bluetooth Low Energy specificatie. Als je app op wat voor manier dan ook gebruik maakt van deze specificatie, dan is de locatiemachtiging vereist. Aangezien deze specificatie ook gekoppeld is aan de Wifi-functionaliteit, kan het simpelweg gebruiken van een draadloze verbinding ervoor zorgen dat de app om een locatiemachtiging moet vragen.

In eerste instantie werd dit probleem aangemerkt als bug. Zeker omdat in de technische specificaties werd vermeld dat het alleen gaat om de machtiging en niet om het daadwerkelijk opvragen van een GPS fix als er gezocht wordt naar Bluetooth- of Wifi-apparaten.

"Om gebruikers een betere gegevensbescherming te bieden, verwijdert Android vanaf deze versie de programmatische toegang tot de lokale hardware-identificatie van het apparaat voor apps die gebruik maken van de Wi-Fi- en Bluetooth-API's, om gebruikers een betere bescherming van hun gegevens te bieden. De WifiInfo.getMacAddress() en de BluetoothAdapter.getAddress() methoden geven nu een constante waarde van 02:00:00:00:00:00:00:00 terug.

Om toegang te krijgen tot de hardware-ID's van externe apparaten in de buurt via Bluetooth- en Wi-Fi-scans, moet de app nu zijn voorzien van de ACCESS_FINE_LOCATION of ACCESS_COARSE_LOCATION machtigingen:

WifiManager.getScanResults()

BluetoothDevice.ACTION_FOUND

BluetoothLeScanner.startScan()"

Maar later bleek dat Google dit opzettelijk zo heeft opgezet (en noemt het een beveiligingsmaatregel). De zoekgigant zegt dat het niet van plan is dit te veranderen tot grote irritatie van ontwikkelaars, zeker omdat in sommige gevallen het vragen om toestemming tot de locatie-machtiging niet voldoende is. In sommige gevallen moet de gebruiker ook daadwerkelijk een GPS-fix hebben:

"Dit is gewoon verkeerd van het Android team, ik weet dat je de beveiliging wilt verbeteren, maar we vragen de gebruiker al om toestemming voor de locatie, zou dat niet genoeg moeten zijn om WiFi scanresultaten te krijgen? Het is al zo duister als een WiFi-specifieke app de gebruiker vraagt om toegang te verlenen tot zijn locatie, maar daar houdt het niet op, ik moet de gebruiker vragen om "Locatie" (GPS) op zijn apparaat in te schakelen zodat ik zijn scanresultaten kan krijgen.

Het enige wat mijn app probeert te doen is over te schakelen naar een beter AP wanneer het huidige AP-signaal zwak is. Ik heb in de app al uitgelegd waarom deze locatie onzin nodig is, maar gebruikers hebben er geen begrip voor.

Doe hier iets aan in Android Nougat, wellicht door de toegang tot MAC_ADRESSES te beperken in plaats van Locatie af te dwingen," aldus een boze ontwikkelaar.

Deze en veel andere klachten waren echter aan dovemansoren gericht en Google sloot de bugmelding en labelde het als "opgelost". Dit gebeurde in 2016 en tot op de dag van vandaag wordt er door ontwikkelaars geklaagd om de ticket te heropenen en dit aan te pakken. Ondertussen zijn apps aangepast om te voldoen aan deze nieuwe eis en daarom zullen veel apps die Bluetooth of Wifi gebruiken ook vragen om gps in te schakelen ook al doet de app verder niks met deze locatie.

Gebruikers kunnen echter niet zien of een app ook daadwerkelijk niets doet met de locatie en zullen daarin maar moeten geloven wat de ontwikkelaar zegt, bovendien zorgt het inschakelen van de locatie ervoor dat andere apps (die wel wat doen met de locatie) op de achtergrond door kunnen gaan met verzamelen waardoor privacybewuste gebruikers op z'n zachtst gezegd niet blij zijn met deze beslissing.

Workaround

Er is gelukkig een klein lichtpuntje. Het is mogelijk om om dit probleem heen te werken. Op Stack overflow wordt gemeld dat er weldegelijk gezocht kan worden naar Bluetooth (LE) en Wifi-apparaten zonder dat de locatiediensten aan staan. Hiervoor kunnen ontwikkelaars BluetoothAdapter.getDefaultAdapter().startDiscovery() en startScan() gebruiken. "Dit zal alle Bluetooth-, BLE- en andere apparaten, ontdekken. BLE-apparaten zullen echter geen scanrecord hebben (wat ze normaal wel zouden hebben gehad als ze als gevolg van startScan() zouden zijn ontdekt)". Ook andere workarounds worden genoemd, al worden sommige daarvan aangemerkt als "dirty hacks" die worden afgeraden.

Blijkbaar zijn er niet veel ontwikkelaars die dit weten of daar gebruik van maken aangezien wij nog regelmatig apps tegenkomen die vragen om je locatie terwijl dat eigenlijk niet nodig is. Van alle mobiele fotoprinters bijvoorbeeld die wij de afgelopen jaren hebben getest was de Mini 2 van Kodak de enige app die z'n werk kon doen zonder de locatiemachtiging.

Het ziet er dus naar uit dat een groot deel van de appbouwers zich heeft neergelegd bij Google's beslissing, zich er niet om bekommert of simpelweg niet weet dat dit überhaupt een issue is. Of het is gewoon luiheid, dat kan natuurlijk ook.