Za tajemstvím notifikací v iOS5 a vývoje architektury mobilních operačních systémů

Je chvíle, tak se podívejme na to, jak Apple řeší šlamastiku s absentujícím dashboardem a co je nového v notifikacích na iOS5.
Především, androidisti si zvykli mi podsouvat v komentářích, že jim cpu Apple jako jediné řešení. Nikoliv. Každý prosím, nechť si používá, čeho jest mu libo. Máme tu pět velkých mobilních operačních systémů (iOS, Android, WP/WM, RIM a Symbian), hromadu malých, takže snad si vybere každý. Já se jen snažím vysvětlit, proč zmíněná řešení použil Apple a co v nich vidím za positiva. To, že Apple nepovoluje všechno, co technologie umožňuje, je logická daň za požadavek, který na platformu má, co se výdrže a odezvy zařízení týká. A zdá se, že řada lidí to oceňuje, logicky ale ne všichni. Ti mohou sáhnout po jiném zařízení. Vysvětlit něco se znalostí pozadí není totéž, jako něco bezhlavě propagovat. Pokud to nechápte, jděte prosím sem, tu vám bude dobře.

notifications-center-240788.pngKe stejnému kroku sahá řada dalších výrobců. Stojí za to si povšimnout, že ačkoliv velká část mobilních telefonů je vybavena přisvětlovací diodou u fotoaparátu, jen velmi málo telefonů umožňuje tuto diodu rozsvítit trvale a používat ji jako baterku. Ačkoliv by to uživatelé pravděpodobně někdy ocenili a technicky je to triviální věc. Důvod? Ona taková Cree ledka sosá akumulátor dost slušně. Ale to si necháme zase někdy na jindy včetně zkazek, že se vám zdá, že Android/iOS/Symbian telefon vašeho kolegy vydrží zrhuba stejně, jako váš iOS/Symbian/Android.

Notifikace iOS versus Android

Řekl jsem, že notifikace iOS jsou diametrálně jinak udělané, než u Androidu. Opět to není vidět na první pohled. V čem? iOS narozdíl od Androidu má za sebou backend servery, které zprostředkovávají notifikace z internetu. V Androidu může notifikaci poslat jen běžící lokální aplikace, nebo to musí vývojář řešit po svém (a od verze 2.2 pro úplnost dodám, je tu C2DM). Na iOS je to naopak uděláno proto, aby si aplikace mohla registrovat požadavek (naslouchání na novou IM zprávu třeba), uklidila se z paměti a až přijde notifikace, aby se mohla obnovit do původního stavu s notifikací, což dělá dojem, že aplikace multitaskuje.

A to je také důvod, proč se Apple s notifikacemi nějakou dobu potýkal. Už za současného stavu, kdy jsou v iOS4 notifikace často na prd, neboť se „ztrácí“ (neexistovala historie), se jich poslalo 100 miliard. Bylo třeba naškálovat servery a serverové řešení, protože se smysluplnnou historií notifikací se dá čekat, že provoz exploduje. To, že je notifikace umístěna v horním řádku jako na Androidu, je logické – Apple zde umisťuje notifikační zprávy jako ikonky zmeškaných hovorů již od počátku, ještě v době, kdy Android neexistoval. Hovořit v tomhle případě o opisování je dobrý příklad fanatismu – notifikace v horním řádku mají mobilní telefony již od pradávna, měl ji už můj první Benefon v NMT síti.

Notifikace versus Dashboard

Technický rozdíl mezi notifikací a dashboardem? Z hlediska spotřeby vcelku podstatný. Notifikace zprávu přijímá, dashboard se dotazuje. Dotazovat se, znamená cyklicky, tedy s větší spotřebou. Přijmout zprávu znamená, dostat jen informaci o změně. Zase, jde o procenta baterie a to není málo.

Když jsem tedy mluvil o tom, že Apple pojme dashboard po svém, stalo se. Jen formou notifikací – jsou trvale přítomné na locknuté iOS5 obrazovce a umožňují i příjem zpráv z internetu formou push notifikací, tlačených, nikoliv vyžádaných zpráv. Což otevírá zajímavé možnosti bez nutnosti mít paměť zaplněnou běžícími programy.

lock-screen-notifications-240408.png
Tím také neříkám, že tenhle přístup Apple v iOS se musí dlouhodobě osvědčit, zatím ale vypadá jako progresivní. Rozhodnout se pro něj nemusíte, můžete si vybrat svobodně jiný systém a hlasovat nohama. Není ale bez zajímavosti, že podobné notifikace používá i BlackBerry a nakonec od Android 2.2 via Cloud to Device Messaging i Google.

Mobilní operační systémy

Pokud bych měl shrnout své osobní dojmy, Apple se nechal z velké části zdržet svým cloudovým řešením, které má dále posunout jeho prodej digitální hudby – serverová řešení mu nejdou tak dobře, jako Google. Tento backend handicap nyní snad srovnal a může dále škálovat funkce, která na cloudu závisí. A je třeba si všimnout, že jak Android, tak iOS, jsou na cloudu stále více závislí, mnohem více, než RIM Blackberry a citelně více, než Windows Phone. I u WP ovšem vývoj zřetelně jde tímto směrem.

Je stupidní, dohadovat se, kdo od koho opisuje. Za prvé je inspirace a vylepšování jiných řešení hnacím motorem vývoje, za druhé základní směr byl udán a zatím se nepodařilo najít jiný směr vývoje mobilních operačních systémů, než ten, který právě probíhá. Tedy, pokud se nechcete vrátit k vizi Windows CE a snaze transformovat Windows XP na mobilní telefony. Tímhle směrem kráčí Google i Apple a i ostatní. Apple vsadil na „řízenou kvalitu“, tedy na to, že upřednostňuje přívětivost, odezvu a výdrž před otevřeností, Google naopak vsadil na otevřenost. Obě firmy v poslední době slevují ze svých pozic, protože vidí, že trh to umožňuje či vyžaduje. Google zavádí omezení, Apple otevírá více možností. Proč, to je zase jiné téma.

A proč vám Steve Jobs nedopřeje alternativní dashboard pro iOS?

To je dobrá otázka, která padla v komentářích k mé minulé mikrostati věnované dashboardu, takové té „úvodní obrazovce“, kam se na vás valí všechny záležitosti, které musíte vyřídit, abyste žili se svým zařízením v míru. Proč vám Apple nedopřeje možnost instalovat dashboard jako alternativu? Proč nám vnucuje jedinou cestu?

Today obrazovka - dashboard pro Cydia. Oficiálně jej ovšem nenainstalujete.

Za prvé je vhodné poznamenat, že několik dashboardů či alternativních launcherů existuje, ale jen pro jailbreaknuté iPhony, protože se instalují přes Cydii. Takže to není omezení v návrhu systému, ale omezení v politice systému.Pokud už jste si nějaký neofiko dashboard instalovali, víte patrně odpověď.

Důvodem je výdrž baterie. iOS je, co se výdrže baterie týká, velmi obsesivní zařízení. Původní zákaz multitaskingu neplynul z toho, že by operační systém nebo procesor neutáhli multitask, ale z toho, že nebyly mechanismy, jak kontrolovat, kolik která aplikace žere baterky.

Řešením, s nímž se multitasking „povolil“, bylo jednoduché. Systém telefonu bude mít své vnitřní API, jemuž každý program předá úlohy, které se mají vykonávat na pozadí. A těchto úloh je předem definovaná sada (tuším šest nebo sedm), například čtení polohy a zavolání programu v závislosti na ní (víme, že čtení polohy u iOS nemusí nutně znamenat zapnutí GPS, záleží na požadované přesnosti). Nebo třeba poslouchání z internetu na portu a zavolání aplikace, pokud něco přijde.

Je možná zřejmé, o co je takový přístup lepší: věci, které vyžadují značné zdroje baterie, jsou centralizovány a řízeny operačním systémem. Je jedna centrála, která se stará o to, zda a jaké porty a adresy z netu se poslouchají či pingají a to v intervalech, které systém uváží za optimální. Kdyby se o to starala každá aplikace zvláště, při takových pěti spuštěných aplikacích by telefon byl trvale na datovém provozu a baterka by šla do kopru za několik hodin. Například WP7 tento systém více či méně převzal také, naopak Symbian ani Android jej nemají a na výdrži baterie se to projevuje brutálně.

Běžná iOS aplikace se tedy spustí a když ji chcete „mutlitasknout“, předá do API požadavky, kdy se má znovu zavolat (například u IM programu se má znovu zavolat, až přijde zpráva na port) a uklidí se z paměti. A protože visí v API, iOS vám ji mazaně ukazuje, jako žijící aplikaci, ačkoliv se celý IM program uklidil a neběží, kromě toho, že je registrovaný do chráněných procesů systému. Elegantní věc, které si vývojář většinou ani nevšimne. Až nastane událost, přijde vám na kecálek zpráva, API se mrkne, pro jaký program ta zpráva je (to mu řekla aplikace při uklízení), ten zavolá s patřičnými parametry a IM aplikace se obnoví i s oknem, že vám přišla zpráva. A vy si pořád myslíte, že se někde něco multitaskuje. Kulový kulový. Skutečný multitasking je v iOS vyhrazen jen některým aplikacím.

No a co to má společného s dashboardem? Aby dashboard fungoval, musel by viset na pozadí v multitasku a aktualizovat události na základní obrazovce podle toho, co se právě stalo. Čímž by systém předal vládu nad zdroji neznámé aplikaci, kterou může kdokoliv zbastlit podle svého. A nejde o grafický vzhled, jde o zdroje. Blbě naprogramovaný dashboard, který se bude příliš často aktualizovat, bude náročný jak na baterku, tak na výkon procesoru. A že by dobře naprogramovaný dashboard zkrátil životnost baterky spíše o jednotky procent, než o desítky? To je první věc, kterou se iOS konstruktéři naučili: procenta jsou hodně, únosná jsou až promile. Dejte procento k procentu a baterka je prázdná za půl dne, což je přesně to, co je nežádoucí.

Až budete přemýšlet o nějakém „monopolistickém omezení“, které iOS předkládá, vysvětlení zpravidla bude jednoduché: jde buďto o snížení nároků na odběr enegie, nebo na využití procesoru, nebo na obojí. Prioritou iOS zařízení je co nejvyšší výdrž a konstantní (=rychlá) uživatelská odezva. Že by to Apple mohl nechat na uživatelích, co si instalují? Ale prosím vás, to by dopadl jako Symbian a Android (i ten už se brání), které si uživatelé zaplevelí vším možným softwarem a pak se diví, že jim baterka zdechne ještě před večerem, ačkoliv když ten telefon kupovali, tak vydržela dva dny v kuse…

PS: Už minule jsem naznačoval, že v iOS 5 ze šlamastiky „není povolen dashboard“ Apple solidně vybruslil Centrálou Notifikací. A hned se ozvaly hlasy, že tím zkopíroval notifikace od Androidu, protože je posadil do horního řádku. No, je to komentář založený na tom, že to vypadá podobně. Ale pod kapotou je to diametrálně jiná technologie, která umožní ledasco. To, že letadlo a rogalo vypadá podobně, ještě neznamená, že to poskytne stejnou službu a pro notifikace prostě jiné logické místo není, než horní stavový řádek, který už od iOS pravěku se pro oznámení používá…. Ale o tom snad někdy příště.