Sorozatunkban Gruber Kristóf iOS-fejlesztő mondja el az Apple-szolgáltatásokról a tutit. Rántja le róluk a leplet. Bétateszteli őket. Havi rendszerességgel kiválaszt egy témát, amivel kapcsolatban mindenki csak zavartan vakarja a fejét és elmagyarázza, hogyan működik, mire jó, mire nem jó. Hatodik témája a Location Services és az Apple szoftverek helymeghatározási képessége. 

Location Services

Az iOS a kezdetektől el tudta magát helyezni a térben. A helymeghatározás az iPhone – és az egész okostelefon piac – egyik legfontosabb képessége, amire rengeteg program épít. Ehhez mérten a programozóknak elég sok eszközt kínál az Apple ennek kihasználására. Ezekről szeretnék adni egy kis áttekintést, anélkül, hogy a technikai részletekben elmerülnénk.

iphone_6_location_services_hero.jpg

Testvérek

Az iPhone OS (ma iOS) a legelső verziótól rendelkezett a CoreLocationnel, ami a helyzet megállapításáért felelős framework. (Persze a programozók ezt is csak az App Store bejelentése után vehették igénybe.) Azt viszont már kevesebben tudják, hogy a CoreLocation idővel megjelent OS X-en is (egészen pontosan 10.8-ban), így Mac-ünk sok esetben hasonló képességekkel rendelkezik, mint egy iPhone.

Hardver

Ez az egyik legérdekesebb dolog: ahhoz, hogy készülékünk meghatározza a helyzetünket, nem feltétlenül van szüksége a GPS-re. A legpontatlanabb helymeghatározási mód magát a GSM (mobiltelefon) hálózatot használja arra, hogy az adótornyok ismert helyzetét és vételi jelerejét felhasználva megbecsülje a felhasználó helyzetét. Könnyű erre azt mondani, hogy ez nagyon pontatlan, de nem árt ha belegondolunk, hogy tisztában lenni azzal, hogy a „Győr közelében vagy” egy egészen pontos információ ahhoz képest, hogy azt sem tudjuk, hogy melyik földrészen csavarogsz. A dolog nagy előnye, hogy nem szükséges hozzá semmi extra: a telefon mindenképpen monitorozza az adótornyok jelszintjét, hiszen ez a telefonáláshoz szükséges.

A második szint a WiFi (WPS – WiFi Positioning System). Ez a megoldás már akár néhány méteres pontosságot is adhat, hasonló módszerekkel: a telefon figyeli a közelben lévő WiFi eszközöket, és egy adatbázis alapján tudja, hogy melyik hol helyezkedik el. A vételi jelszintből háromszögeléssel megállapítható a készülék pozíciója. Honnan tudja a rendszer, hogy melyik WiFi hol van? Egyszerű: a Google Maps például jelenti ezeket az információkat az aktuális GPS hardverből szerzett koordinátákkal együtt.

A legelső iPhone még nem rendelkezett GPS vevővel, így Steve Jobs demójában kizárólag a WiFi háromszögelés pontosságát láthattátok.

24satellite.jpgA harmadik szint természetesen maga a GPS vevő. Erről pár szót: A GPS rendszer minimum 24, jelenleg kicsit túlméretezve éppen 31, a Föld körül 20.000 km magasságban keringő műhold segítségével működik. Leegyszerűsítve ezek a műholdak ismert helyen tartózkodnak és folyamatosan közvetítik a pontos időt. A GPS vevők nem sugároznak semmilyen jelet, mindössze a műholdak adását képesek fogni. A műholdak helyéből, a sugárzott időből és a vevő pontos idejéből kiszámítható a vevő koordinátája. A GPS-vevőről még azt érdemes tudni, hogy viszonylag sokat fogyaszt, tehát a telefonok minden áron próbálják elkerülni, hogy be kelljen kapcsolniuk.

Érdekesség, hogy az amerikaiak GPS rendszere mellett az orosz GLONASS rendszer műholdjainak jeleit is veszi minden iPhone 4S-nél újabb telefon. Ez a rossz vételi viszonyok közt tud egy kicsit segíteni a helymeghatározásban, más előnye nem nagyon van. 

Alapjárat

A CoreLocation legegyszerűbb szolgáltatása úgy működik, hogy a program megmondja, milyen pontosságú pozíció érdekli (egy navigációs szoftvert például a méteres pontosság elengedhetetlen, egy időjárási alkalmazásnak azonban egy város szintű elég lehet), mekkora változás esetén akar értesülni annak bekövetkeztéről, majd elindítja a figyelést. Ekkor az iOS bekapcsolja a megfelelő hardvereket, kirakja a teli lokáció jelző nyilat a státusz sávba és ha talált egy megfelelő pontosságú pozíciót, akkor értesíti az appot, ami ezt feldolgozhatja. Innentől a program dönt, hogy ezzel megelégszik, és lekapcsolja a szolgáltatást (ekkora pár másodperc késleltetéssel eltűnik az ikon), vagy folyamatosan követni szeretné a felhasználót.

_A beállításokban (adatvédelem → helymeghatározás) mindig nyomon követhető, hogy mely alkalmazások használták legutóbb a helymeghatározást. Ezek neve mellett lila színnel jelenik meg a nyíl ikon._

Ez a szolgáltatás minden további nélkül elérhető OS X-en is. Ki is tudod próbálni, ha a Safariban megnyitod a Google Maps-et, vagy elindítod a Térképek appot.

Háttérmunkák

Amikor iOS-en háttérbe raksz egy appot, az záros határidőn belül fel fogja függeszteni a futását, hogy ne merítse le a telefont. Lehetséges azonban pár előre meghatározott módon megkérni a rendszert, hogy az app futhasson háttérbe küldés után is. Az egyik ilyen mód pontosan ilyen feladatokhoz készült: ha a program jelezte, hogy élni kíván vele, akkor továbbra is futni fog. Ilyenkor a rendszer a státusz sort kékre váltja, és kiírja, melyik program használja a háttérben a pozíciódat.

iOS 8-tól kétféle engedélyt adhatsz az appoknak a lokációs szolgáltatások eléréséhez: „Mindig” és „Az alkalmazás használata közben”. A régebbi programok automatikusan a „Mindig” jogot kapták meg.

Még egy fontos dolog: néhány helymeghatározó szolgáltatás csak addig működik a háttérben, amíg az appod fut (tehát nem pöckölöd ki a multitasking váltóban, vagy nem öli le a rendszer, amikor valami másnak kell a memória, illetve nem volt reboot), néhány program viszont ilyen események után is újra lesz indítva. Alapesetben azonban nem indítja vissza az appot a rendszer.

Fontoskodás

iOS 4-től az Apple bevezetett egy új módszert arra az esetre, amikor csak a nagyobb ugrások érdeklik a programot, a kisebb mozgások nem. Az ilyen „significant location change” eseményekre feliratkozó programokon sokat tud spórolni a telefon. Ezek a nagyobb ugrások a dokumentáció alapján legalább 500 m-esek. Az ezt a módszert használó programokat a rendszer felébreszti akkor is, ha nem futnak.

Régiók

Az Apple-nél azonban nem elégedtek meg ennyivel és arra jutottak, hogy van egy csomó program, ami még így is kap egy rakás olyan eseményt, amire igazából nem kíváncsi, például a teendő lista alkalmazás, amit kizárólag az érdekel, hogy a bolt közelében vagy, nem kell, hogy fusson, ha még csak a városban sem tartózkodsz.

Erre a problémára volt a válasz az iOS 5-ben bevezetett régió monitorozás. A programok beregisztrálhatnak egyenként maximum 20 területet, ami érdekli őket, és értesítést kapnak az iOS-től, ha a készülék ezen régiók valamelyikén belülre kerül, vagy elhagyja azt. Amikor egy program erre a módra regisztrál be, egy körvonalas nyíl ikon jelenik meg a státusz sorban.

Ez a szolgáltatás szintén felébreszti a nem futó appot, így biztosítva, hogy újraindítás után is szóljon a teendőlista alkalmazásunk, hogy vegyünk tejet. OS X-en szintén elérhető(!), bár ott természetesen nincs ilyen lehetőség, vagyis a programnak futnia kell, hogy működjön.

Irányfények

Angol nevükön: beacon-ök, így talán már ismerősebb. Kis, Bluetooth jeladókról van szó, amik közelségét képes érzékelni minden iPhone 4S-nél újabb telefon (iOS 7-től). A programozók beregisztrálhatják azokat a beacon-öket, amikre figyelni akar az app, ezután pedig az iOS értesíti az appot, ha a telefon a közelükbe kerül. A háttérbe rakáskor önállóan nem működőképesek, tehát mindenképpen egy nyíl ikon fog megjelenni a státusz sorban, ugyanis valamelyik háttérben lokációt figyelő mód aktív kell hogy legyen mellette. Ez OS X-en nem elérhető.

Iránytű

Fontos szolgáltatás még, amiről nem ejtettünk szót, az iránytű. Természetesen sokszor nem elég, ha a készülék tudja, hol tartózkodik, az információk helyes megjelenítéséhez arra is szüksége van, hogy milyen irányba fordulunk éppen. Érdemes tudni, hogy kétféle északi irány megkülönböztetésére képes az iOS: a mágneses és a valós északi sark felé is tud mutatni (ugyanis ezek közel sem ugyanott helyezkednek el). A mágnes irányt célhardverrel, a valós északi irányt pedig a GPS rendszert is bevonva kalkulálja ki.

Az iránytű az alap helymeghatározáshoz hasonlóan működik, tehát a háttérben akkor megy, ha a program futhat a háttérben is. Mivel Mac-ekben nincs iránytű vagy GPS, ez csak iOS-en megy.

Gyakori helyek

Ez az egyik legizgalmasabb újdonság, ami iOS 8-ban jelent meg. Ha bekapcsoltuk (Beállítások → Adatvédelem → Helymeghatározás → Rendszerszolgáltatások → Gyakori helyek), akkor az iOS figyeli, hol töltünk el hosszabb időt egyhuzamban. Ha a programok feliratkoznak erre, akkor a rendszer szólni fog, amikor a felhasználó egy ilyen gyakori helyre érkezik, vagy elhagyja azt, illetve lekérhető a regisztráció óta meglátogatott helyek listája is. Ilyenkor ugye a programnak egyáltalán nem kell futnia, mert a rendszer elvégzi a helyek figyelését és rögzítését, a program csak a kész listát kéri el tőle.

A háttérben csak az alap lokációs szolgáltatással együtt működik, OS X-en pedig még nem elérhető.

Trend

Jól látható tehát, hogy az iOS fejlesztő mérnökei mennyi energiát fektetnek abba, hogy minden felhasználási területnek egy agyonoptimalizált, mégis jól használható lokációs szolgáltatási módot adjanak, mert ha ez a sok, komplex hardver rossz kezekbe kerülne, percek alatt leszívná az akkut, úgyhogy jobb, ha mezei programozó palánták inkább nem próbálják meg maguk megírni a megoldást ezekre a feladatokra. A rendszer persze további optimalizációkat tud végezni, ha több program kér együtt valamilyen formában helyinfókat.

2015-ben tehát már nem kell rosszul érezni magunkat, ha egy program a háttérben használja a helymeghatározást, és kint van a státusz soron az ikonja, ez optimális esetben lehet, hogy csak 5-10% akkut szív le egy egész nap során, vagy ha csak régió monitorozásos módszert használ, annyit sem. (Saját tapasztalat alapján 1% alatt.)