Rozšíření aplikací jsou samostatné spustitelné moduly, které rozšiřují možnosti mobilní aplikace za hranice jejího hlavního rozhraní: Today Widget na domovské obrazovce, zpracování VoIP hovorů přes CallKit a reakce na systémové události přes BroadcastReceiver. Systémové integrace umožňují aplikaci interagovat s operačním systémem na hluboké úrovni a odemykají funkce nedostupné běžným obrazovkám. Podle dokumentace Apple Developer každé rozšíření běží v izolovaném procesu a je spravováno systémem nezávisle na hlavní aplikaci. Rozšíření aplikací v mobilní aplikaci umožňují implementovat funkce nedostupné v hlavním procesu.
Hlavní body
Rozšíření aplikací na iOS se objevila v iOS 8 a stala se základem systémových integrací v mobilním vývoji. Jsou to samostatné binární soubory zabalené společně s hlavní aplikací, ale spouštěné v izolovaném procesu. Každé rozšíření má vlastní Info.plist a vstupní bod definovaný přes NSExtensionPrincipalClass. Systém spravuje životní cyklus rozšíření aplikací — nemohou zůstat na pozadí po dokončení úkolu.
WidgetKit (iOS 14+) je moderní framework pro vytváření widgetů na domovské obrazovce. WidgetKit používá SwiftUI pro popis rozhraní a TimelineProvider pro definici plánů aktualizace. Widgety jsou k dispozici ve třech velikostech: malý (2×2 buňky), střední (4×2) a velký (4×4). Starý Today Widget založený na UICollectionViewController je stále podporován, ale Apple doporučuje migrovat na WidgetKit. Rozšíření aplikací na WidgetKit nepodporují animace, vstup z klávesnice ani gesta — jsou to statické nebo pseudo-animované prvky s periodickými aktualizacemi.
Share Extension umožňuje odesílat obsah z libovolné aplikace do vaší aplikace prostřednictvím systémového listu sdílení. Share Extension přijímá data přes NSExtensionItem a používá SLComposeServiceViewController pro uživatelské rozhraní. Action Extension zpracovává obsah na místě — například překládá text v prohlížeči bez přepínání do jiné aplikace. Oba typy musí dokončit práci v omezeném čase, jinak systém rozšíření "zabije". Toto je důležité omezení rozšíření aplikací v mobilní aplikaci — úlohy na pozadí nejsou na úrovni rozšíření k dispozici.
Systémové integrace na iOS sahají daleko za widgety: CallKit, PushKit a SiriKit umožňují mobilní aplikaci pracovat na systémové úrovni. Tyto frameworky vyžadují speciální oprávnění, ale poskytují uživateli bezproblémový zážitek — hovory přes CallKit vypadají jako běžné telefonní hovory a Siri zpracovává požadavky bez otevření aplikace.
CallKit integruje hovory aplikací třetích stran do systémové obrazovky hovorů, včetně zamčené obrazovky. CXProvider registruje aplikaci jako VoIP službu a CXCallController spravuje hovory. CallKit automaticky blokuje duplicitní hovory a podporuje Call Directory Extension pro blokování nežádoucích čísel. Systémové integrace v mobilním vývoji s CallKit jsou kritické pro aplikace hlasové komunikace — WhatsApp, Skype a Zoom jej používají k zobrazení příchozích hovorů.
PushKit doručuje push oznámení přímo do mobilní aplikace bez zobrazení uživateli. PushKit probouzí aplikaci z "mrtvého" stavu a předává data přes delegáta PKPushRegistryDelegate. Toto je primární mechanismus pro VoIP aplikace: PushKit doručuje informace o hovoru a CallKit je zobrazuje. PushKit má vyšší prioritu doručení než běžná push oznámení a nevyžaduje zobrazení banneru. Rozšíření aplikací v mobilních aplikacích často kombinují PushKit s CallKit pro hlasovou komunikaci.
SiriKit umožňuje zpracovávat požadavky přes Siri a aplikaci Zkratky. Intents Extension je samostatné rozšíření aplikace, které registruje podporované záměry a zpracovává je. SiriKit podporuje více než 20 domén: hovory, zprávy, platby, poznámky, cvičení. Zkratky umožňují uživateli vytvářet automatizace — například "Odeslat zprávu ve WhatsApp přes Siri." Systémové integrace se SiriKit a Zkratkami zvyšují zapojení, protože uživatel provádí akce bez otevření aplikace.
BroadcastReceiver je komponenta Androidu, která reaguje na systémové broadcast zprávy. Na rozdíl od iOS rozšíření aplikací BroadcastReceiver nevyžaduje samostatný binární soubor — stačí zaregistrovat přijímač v manifestu nebo v kódu přes Context.registerReceiver. Systémové integrace na Androidu často začínají BroadcastReceiver: od spuštění služby při startu zařízení po reakci na síťové připojení.
IntentFilter váže BroadcastReceiver na konkrétní systémovou událost. Typické události: BOOT_COMPLETED (start zařízení), CONNECTIVITY_ACTION (změna sítě), BATTERY_LOW (slabá baterie), TIME_SET (změna času). Přijímač se registruje v AndroidManifest.xml nebo přes Context.registerReceiver pro dynamickou registraci. Dynamická registrace je výhodnější — nevyžaduje oprávnění v manifestu a funguje pouze když je aplikace aktivní. Rozšíření aplikací na Androidu neexistují jako koncept, ale BroadcastReceiver hraje podobnou roli — rozšiřuje možnosti aplikace prostřednictvím systémových integrací.
NotificationListenerService je služba, která přijímá všechna systémová oznámení. NotificationListenerService vyžaduje oprávnění BIND_NOTIFICATION_LISTENER_SERVICE a přístup přes nastavení usnadnění. AccessibilityService je výkonnější nástroj pro systémovou integraci: může číst obsah obrazovky, simulovat kliknutí a automatizovat akce. Obě služby vyžadují explicitní povolení uživatelem v nastavení, což zvyšuje bezpečnost. Systémové integrace v mobilních aplikacích přes AccessibilityService se používají pro auto-výplně, čtečky obrazovky a nástroje usnadnění.
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
Příklad registruje BroadcastReceiver pro událost BOOT_COMPLETED. WorkManager se používá pro odložené provádění úloh po startu zařízení — to je standardní přístup pro Android aplikace.
App Widget Provider na Androidu je protějškem iOS rozšíření aplikací v kontextu widgetů: je to komponenta, která zobrazuje interaktivní obsah na domovské obrazovce. Na rozdíl od WidgetKit, Android widgety mohou přijímat vstup uživatele — kliknutí, přepínače a gesta. App Widget Provider se registruje v manifestu přes XML popis velikosti a frekvence aktualizace.
RemoteViews popisuje rozhraní widgetu přes XML rozvržení a podporuje pouze omezenou sadu View. RemoteViews neumožňuje vlastní View — pouze standardní komponenty: TextView, ImageView, Button, ProgressBar. AppWidgetProvider je základní třída, která zpracovává aktualizace, povolení a odstranění widgetu. Metoda onUpdate je volána časovačem přes updatePeriodMillis nebo přes WorkManager pro přesné řízení. Systémové integrace s widgety na Androidu vyžadují opatrnost — příliš časté aktualizace vybíjejí baterii.
Glance API je knihovna Jetpack pro vytváření widgetů pomocí Kotlin DSL místo XML. Glance API se kompiluje do RemoteViews a podporuje syntaxi podobnou Compose: GlanceComposable, Column, Row, Text. Knihovna řeší problém složitého XML kódu a umožňuje testování widgetů přes JUnit. Glance API zatím nepodporuje všechny funkce RemoteViews — pro složité interaktivní widgety je lepší klasický přístup. Rozšíření aplikací v mobilním vývoji na Androidu se vyvíjejí směrem k Glance API, což zjednodušuje vytváření a údržbu widgetů.
Content Provider je komponenta Androidu pro sdílení strukturovaných dat mezi aplikacemi přes jednotné rozhraní ContentResolver. Na rozdíl od iOS rozšíření aplikací Content Provider nevytváří samostatný proces — data jsou požadována synchronně v kontextu volající aplikace. Content Provider je základem systémových integrací na Androidu: kontakty, multimediální soubory, kalendář a standardní aplikace jej používají k publikování dat.
FileProvider je podtřída ContentProvider pro bezpečný přenos souborů mezi aplikacemi. FileProvider generuje dočasné URI content:// místo přímých cest file://, které jsou zakázány na Androidu 7+. Pro použití je třeba zadat files-path nebo external-files-path v XML konfiguraci. Rozšíření aplikací v mobilním vývoji na Androidu neexistují jako samostatný koncept, ale FileProvider plní jejich funkci — rozšiřuje možnosti sdílení dat za jednu aplikaci.
Na iOS plní roli sdílení souborů File Provider Extension. File Provider Extension publikuje soubory aplikace v aplikaci Soubory přes NSFileProviderManager. Na rozdíl od FileProvider, iOS rozšíření vyžaduje samostatný binární soubor a běží v izolovaném procesu. File Provider Extension podporuje NSFileProviderItem pro popis souborů a NSFileProviderEnumerator pro navigaci ve složkách. Systémové integrace v mobilních aplikacích přes File Provider Extension umožňují uživateli spravovat soubory aplikace z aplikace Soubory bez jejího otevření.
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
Příklad ukazuje minimální implementaci File Provider Extension ve Swift. Metoda item(for:) vrací objekt NSFileProviderItem podle identifikátoru — systém ji volá při zobrazování souborů v aplikaci Soubory.
Často kladené otázky
Rozšíření aplikací jsou samostatné binární soubory, které rozšiřují funkčnost aplikace za její proces: Today Widget, Share Extension, Action Extension, Keyboard Extension a další typy běžící v izolovaném prostředí.
CallKit integruje VoIP hovory do systémového rozhraní hovorů se zobrazením na zamčené obrazovce. PushKit doručuje push oznámení na pozadí bez zobrazení uživateli — probouzí aplikaci ke zpracování dat, jako jsou informace o příchozím hovoru.
BroadcastReceiver je komponenta Androidu reagující na systémové broadcast zprávy: start zařízení (BOOT_COMPLETED), síťové připojení (CONNECTIVITY_ACTION), změny režimu letadlo a další události operačního systému.
Použijte AppWidgetProvider s RemoteViews pro vytvoření rozhraní widgetu nebo Glance API (Jetpack) pro přístup Kotlin DSL. Widget se registruje v manifestu přes XML popis specifikující velikost a frekvenci aktualizace.
Content Provider je komponenta Androidu pro sdílení dat mezi aplikacemi přes ContentResolver. Používá se pro přístup ke kontaktům, multimediálním souborům a jakýmkoli strukturovaným datům z jiných aplikací.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.