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ó. Hetedik témája a Notification és a körülötte kialakuló pokol.

Vajon mennyi értelme van egy értesítésnek, amit a telefonod vagy a számítógéped megjelenít, ha az nem jókor talál meg téged? Elárulom: pont semennyi. Az elmúlt évek során appokkal bástyáztuk körbe magunkat, életünk kisebb-nagyobb szegletét ezekre a virtuális szolgákra bíztuk, amik megpróbálják tenni a dolgukat. Ha úgy gondolják, hogy számunkra valami hasznos információval bírnak, akkor ezt könyörtelenül tudtunkra hozzák. Az értesítések tengerében pedig ember legyen a talpán, aki nem süllyed el.

Történelem

fetch.png

Kezdjük az egészet szokás szerint az elején. Nyilván alapvető elvárás egy programmal szemben, hogy tudjon velünk közölni valamit, ha számunkra fontos információval bír. Ez kezdetben annyit jelentett, hogy a szöveges képernyőn elindított program megjelent a kimeneten. Ezt nem lehetett nagyon bonyolítani. Aztán később jött a multitasking, és a grafikus felhasználói felületek, ahol már nem volt biztos, hogy az alkalmazás, ami szólni akar hozzánk, megegyezik az éppen használt programmal, vagyis más szóval a háttérben futó programok is tudtunkra kellett, hogy hozzák tudtunkra a mondandójukat. Különböző rendszerek különböző megoldásokat alkalmaztak erre, de rengeteg program adott saját megoldást, vagyis jelenített meg valamilyen módon egy szöveg buborékot a saját berkein belül. Ez persze káoszt szült.

Growl

growl-fork-notification.png

Az egyik első, számunkra érdekes megoldás, ami felismerte a probléma átfogó jellegét a Growl volt. A Growl egy segédeszköz a programozóknak, amivel azok egy üzeneteket tudtak megjeleníteni az OS X-en. A programok tehát Growl-on keresztül jelenítették meg az üzeneteiket, a Growl pedig a felhasználók beállításainak megfelelően rakta ki a képernyőre azokat. Rendkívül sokrétű rendszer volt, sok téma és alternatív megjelenítési mód is készült hozzá (pl. volt, ami felolvasta az üzeneteket és volt, ami emailben elküldte őket). Programonként lehetett szabályozni, hogy nézzen ki és hogy mely típusú értesítések kerüljenek egyáltalán kézbesítésre.

A Push

A Growl halála az iPhone gyengesége volt.

Az első iPhone-ok rendkívül gyenge hardware-el rendelkeztek, amin mesterséges korlátként nem volt multitasking, egyszerre csak egy (felhasználói) alkalmazás futhatott. Nagy volt a nyomás az Apple-ön, hogy ezen változtassanak, azonban erőforrás szűke miatt egy zseniális, mindent megváltoztató ötlettel álltak elő: a push notificationnel.

A Push ugyanis nem volt más, mint a háttérben futó feladatok (például egy chat esetén az üzenetek frissítése) szerverre traktálása. Zsenialitása abban rejlett, hogy továbbra sem kellett, hogy az appok a háttérben fussanak az iPhone-on (ezáltal akku időt spórolva) azonban ennek ellenére úgy tűnt, hogy mégis futnak, mert az információtovábbítás feladatát egy távoli szerver is el tudta látni, és képes volt az új üzeneteket a telefonra kézbesíteni, ami azokat megjelenítette, épp úgy, mintha csak a futó program szólt volna a háttérből.

Notification Center

yosemite_notification_widgets.png

Ez akkora siker lett, hogy a rengeteg, akkor még kizárólag képernyő közepén, leokézható ablakban megjelenő üzenet tarthatatlan állapottá vált, zavarta a használatot. Megoldást kellett találni rá, a megoldás pedig a Notification Center lett. Az üzenetek immár egy bannerben jelentek meg a képernyő tetején, amiket bárhonnan könnyen elérhettünk a rolószerűen lehúzható listából. Az üzeneteket megérintve továbbra is elindult (vagy előtérbe került) a hozzá tartozó app, lehetőséget kapva a bővebb információ közlésre.

Nagyjából itt tartunk most, ezen már csak kisebb kozmetikai átalakítások és bővítések történtek: az iOS 7 új kinézetet hozott, megjelentek a gyors akciók (gombok elhúzáskor), valamint néhány app már a gyors válaszolást is támogatja, ahol a program megnyitása nélkül tudunk reagálni egy üzenetre.

OS X

OS X-en az Apple úgy döntött, hogy nem finomkodik, és az egyeduralkotó Growl-t az iOS-en ekkor már kiforrott megoldással egy az egyben lecseréli, az ingyenes megoldásnak esélyt sem adva. Hiába volt sokkal butább az OS X rendszere, a Growl kikopott a programokból.

A probléma

Ugye milyen szépen hangzik papíron az, amit eddig elmeséltem? Hol van akkor a probléma, kérdezhetnétek. Ott, hogy a Notification Center és az egész értesítésesdi egy készülékre lett tervezve, nekünk pedig általában több is van. Nekem konkrétan van egy Mac-em, egy iPhone-om, egy iPad-em és egy Apple Watch-om is. A következő nagy probléma tehát, amit meg kell oldanunk, az a több eszköz kezelése.

Minden kiemelt fejlesztés előtt voltak gyártók, akik saját berkeiken belül megpróbálták a küszöbön álló problémákat megoldani. Most sincs ez másképp. A Facebook például egy egészen komplex algoritmussal próbálja minden áron a tudtunkra adni, ha valaki írt a Messengeren, úgy, hogy az a lehető legkevésbé zavarjon. Ez néha sikerül, néha nem. (Olyan trükkökre kell gondolni, mint az értesítés elhalasztása, ha egy chat ablakban valahol aktívak voltunk mostanában, notifikációk törlése, ha másik készüléken elolvastuk őket, stb.)

Azonban globálisan nincs megoldás három fontos dologra:

1. Értesítési transzparencia: mindegy, hogy az órám van előttem vagy az OS X, el kéne hogy tudjam érni az összes értesítésemet
2. Értesítés irányíthatóság: meg kell hogy tudjam mondani, melyik értesítést akarom látni, melyiket nem és hogy melyiket hol kérem. Emellett a rendszer el kéne hogy tudja dönteni automatikusan, hol ér el engem.
3. Globális értesítés státusz: Az értesítések állapota meg kell hogy egyezzen az eszközök között, azaz ha az egyiken elolvastam, akkor a másikon is olvasott kell hogy legyen.

Mondok mindegyikre példát:

Értesítés transzparencia

Elindítok OS X-en egy időigényes renderinget, vagy egy letöltést, ami mondjuk órákig fut. Elmegyek otthonról, de tudni akarom, hogy ezek hogy állnak. Ha ezek a programok az otthon bekapcsolva hagyott Mac-emen értesítést küldenek, akkor azt szeretném látni az órámon vagy a telefonomon is. (Ha úgy állítottam be.)

Ugyanígy ha épp a Mac előtt ülök, az óra által generált óránkénti egy perc felállásra felszólító üzentet szeretném a Mac-emen is látni.

Értesítés irányíthatóság

Azonban belátható, hogy ez nem mindenkinek optimális megoldás, ami pedig nem fér rá mindenkire, abból több méret kell, tehát beállíthatóvá kell tenni. Meg kell, hogy tudjam adni, hogy mondjuk a Facebook chat üzeneteiről mindenhol értesülni akarok, az OS X update-jeiről viszont nem szeretnék a telefonomon értesítést látni.

A legjobb az lenne, ha lenne egy automatikus, intelligens irányítási algoritmus is, ami el tudná dönteni (a preferenciáimat figyelembe véve), hogy hol ér el engem legjobb eséllyel az adott értesítés, és a többi helyre ki sem küldené. Például most ha jön egy iMessage, akkor egyszerre pittyeg és kezd el világítani minden eszközöm, holott teljesen felesleges, az óra tudhatná, hogy a karomon van, elég ott megjelennie. A Mac szintén tudja (mondjuk a legutóbbi egér használatból és billenytű letütések óta eltelt időből), hogy előtte ülök-e. Ha igen, akkor nincs szükség az iPhone-ra is kiküldeni ugyanazt.

Globális értesítés státusz

Ez talán a legfontosabb: rendszer szinten kéne kezelni azt, hogy ha mégis több eszközön is megjelenik ugyanaz az értesítés, akkor ha valamelyiken interakcióba léptem vele, a többi eszközön ne ragadjon be amíg nem foglalkozok azon is külön vele. Például ha belépek a Facebookra, és elolvasom Mac-en, amit kommenteltek, akkor az erről szóló értesítésnek el kell tűnnie az iPhone-omról és az órámról, mert többé nem bír információval számomra.

A Watch külön bugyra

apple-watch-clear-notifications.jpg

Szót érdemel még az Apple Watch, mint negatív példa, mert a tervezői megpróbálták ezt a koncepciót kicsiben megvalósítani, de annyira rosszul sikerült, hogy elrettentésül mindenképpen érdemes leírni.

Az Apple Watch ugye úgy működik, hogy egy iPhone-hoz hozzákötöd, és az iPhone-on megjelenő notifikációk egy részhalmazát jelenítené meg, akkor, amikor alkalmasnak ítéli az időt.

A baj ott van, hogy ez rendkívül korlátoltan van megoldva és nincs semmibe beleszólásod. Az egyik ilyen gond pl. hogy ha leveszem a kezemről az órát (mondjuk zuhanyzok), akkor az óra nem fogadja a notifikációkat, így ha azalatt kerestek, akkor azokat bukom és utólag sem látszanak az órán (ha visszavettem a kezemre). A másik ilyen, hogy nem lehet olyat beállítani, hogy néhány értesítésnek az órán akarom, hogy legyen hangja, a telefonon viszont nem, mert a kettő össze van kötve, ha az egyiken bekapcsolod, akkor másikon is lesz hang. Az intelligencia pedig ott bukik el, amikor ha a telefont nyomkodod, akkor az órán nincsenek értesítések, hanem a telefon jeleníti csak meg őket, ami gyakorlatilag azt eredményezi, hogy ha fejlesztek a telefonon, nincs lezárva, akkor a telefon folyamatosa rezeg vagy csipog, mert nem továbbít semmit az amúgy elnémított órámra. És nincs lehetőségem sem ezeket átállítani.

A megoldás

A megoldás ezekre a gondokra az lesz, ha bevezetünk egy "Cloud Notification Cencer"-t, vagyis hogy a programok egy központi tárhelyre helyezik el a notifikációkat, az pedig az említett szempontok figyelembe vételével a megfelelő eszközre a megfelelő időben továbbítja őket.

Egy ilyen megoldás kiküszöbölné az értesítési transzparencia problémáit és a globális állapot is megoldott lenne.

Továbbgondolva az ötletet ezt nem csak az iCloud-ban lehetne elképzelni, hanem egy általánosabb verzióban is, amire Android, Windows és egyéb eszközök is csatlakozhatnának. Például később akár egy otthoni (beszélő) asszisztens is.

Most már csak az a kérdés, hogy ki csinálja ezt meg?