Alkalmazáskiterjesztések különálló végrehajtható modulok, amelyek egy mobilalkalmazás képességeit a fő interfészen túlra bővítik: Today Widget a kezdőképernyőn, VoIP-hívások kezelése CallKit-en keresztül és rendszereseményekre való reagálás BroadcastReceiver-en keresztül. A rendszerintegrációk lehetővé teszik az alkalmazás számára, hogy mély szinten lépjen kapcsolatba az operációs rendszerrel, olyan funkciókat nyitva meg, amelyek a normál képernyők számára nem elérhetők. Az Apple Developer dokumentáció szerint minden kiterjesztés izolált folyamatban fut, és a rendszer a főalkalmazástól függetlenül kezeli. Az alkalmazáskiterjesztések egy mobilalkalmazásban lehetővé teszik a fő folyamatban nem elérhető funkciók megvalósítását.
Főbb pontok
Az alkalmazáskiterjesztések iOS-en az iOS 8-ban jelentek meg, és a rendszerintegrációk alapjává váltak a mobilfejlesztésben. Ezek külön bináris fájlok, amelyek a főalkalmazással együtt vannak csomagolva, de izolált folyamatban indulnak el. Minden kiterjesztésnek saját Info.plist-je és NSExtensionPrincipalClass-on keresztül definiált belépési pontja van. A rendszer kezeli az alkalmazáskiterjesztések életciklusát — nem maradhatnak a háttérben a feladat befejezése után.
A WidgetKit (iOS 14+) egy modern keretrendszer widgetek létrehozására a kezdőképernyőn. WidgetKit SwiftUI-t használ a felület leírásához és TimelineProvider-t a frissítési ütemezések meghatározásához. A widgetek három méretben kaphatók: kicsi (2×2 cella), közepes (4×2) és nagy (4×4). A régi, UICollectionViewController-en alapuló Today Widget továbbra is támogatott, de az Apple a WidgetKit-re való migrálást javasolja. A WidgetKit-en lévő alkalmazáskiterjesztések nem támogatják az animációt, billentyűzetbevitelt vagy gesztusokat — ezek statikus vagy pszeudo-animált elemek időszakos frissítéssel.
Share Extension lehetővé teszi tartalom küldését bármely alkalmazásból az Ön alkalmazásába a rendszer megosztó lapján keresztül. Share Extension adatokat fogad NSExtensionItem-en keresztül, és SLComposeServiceViewController-t használ a felülethez. Action Extension a tartalmat helyben dolgozza fel — például szöveget fordít a böngészőben anélkül, hogy másik alkalmazásba váltana. Mindkét típusnak korlátozott időn belül be kell fejeznie a munkát, különben a rendszer "megöli" a kiterjesztést. Ez az alkalmazáskiterjesztések fontos korlátozása egy mobilalkalmazásban — a háttérfeladatok nem érhetők el kiterjesztési szinten.
A rendszerintegrációk iOS-en messze túlmutatnak a widgeteken: CallKit, PushKit és SiriKit lehetővé teszik egy mobilalkalmazás számára, hogy rendszerszinten működjön. Ezek a keretrendszerek speciális jogosultságokat igényelnek, de zökkenőmentes élményt nyújtanak a felhasználónak — a CallKit-en keresztüli hívások úgy néznek ki, mint a normál telefonhívások, és a Siri feldolgozza a kéréseket az alkalmazás megnyitása nélkül.
CallKit integrálja a harmadik féltől származó alkalmazáshívásokat a rendszer hívás képernyőjébe, beleértve a zárolt képernyőt is. A CXProvider regisztrálja az alkalmazást VoIP-szolgáltatásként, a CXCallController pedig kezeli a hívásokat. A CallKit automatikusan blokkolja a duplikált hívásokat, és támogatja a Call Directory Extension-t a nem kívánt számok blokkolásához. A CallKit-tel való rendszerintegrációk a mobilfejlesztésben kritikusak a hangkommunikációs alkalmazások számára — a WhatsApp, Skype és Zoom a bejövő hívások megjelenítésére használja.
A PushKit push értesítéseket közvetlenül a mobilalkalmazásba szállítja anélkül, hogy megjelenítené azokat a felhasználónak. PushKit felébreszti az alkalmazást egy "megölt" állapotból, és adatokat továbbít a PKPushRegistryDelegate-en keresztül. Ez az elsődleges mechanizmus a VoIP-alkalmazások számára: a PushKit szállítja a hívásinformációkat, a CallKit pedig megjeleníti azokat. A PushKit magasabb szállítási prioritással rendelkezik, mint a normál push értesítések, és nem igényel banner megjelenítést. Az alkalmazáskiterjesztések a mobilalkalmazásokban gyakran kombinálják a PushKit-et a CallKit-tel a hangkommunikációhoz.
A SiriKit lehetővé teszi kérések feldolgozását a Siri és a Parancsok alkalmazáson keresztül. Intents Extension egy külön alkalmazáskiterjesztés, amely regisztrálja a támogatott szándékokat és feldolgozza azokat. A SiriKit több mint 20 domaint támogat: hívások, üzenetek, fizetések, jegyzetek, edzések. A Parancsok lehetővé teszik a felhasználó számára automatizálások létrehozását — például "Üzenet küldése a WhatsApp-ban Sirin keresztül." A SiriKit-tel és Parancsokkal való rendszerintegrációk növelik az elköteleződést, mivel a felhasználó az alkalmazás megnyitása nélkül hajt végre műveleteket.
BroadcastReceiver egy Android-komponens, amely reagál a rendszer broadcast üzeneteire. Az iOS alkalmazáskiterjesztésekkel ellentétben a BroadcastReceiver nem igényel külön bináris fájlt — elég regisztrálni a vevőt a manifestben vagy a kódban a Context.registerReceiver-en keresztül. A rendszerintegrációk Androidon gyakran BroadcastReceiver-rel kezdődnek: az eszköz indításakor egy szolgáltatás elindításától a hálózati kapcsolatra való reagálásig.
IntentFilter egy BroadcastReceiver-t egy adott rendszereseményhez köt. Tipikus események: BOOT_COMPLETED (eszköz indítása), CONNECTIVITY_ACTION (hálózati változás), BATTERY_LOW (alacsony akkumulátor), TIME_SET (időváltozás). A vevő regisztrálása az AndroidManifest.xml-ben vagy a Context.registerReceiver-en keresztül történik dinamikus regisztrációhoz. A dinamikus regisztráció előnyösebb — nem igényel engedélyeket a manifestben, és csak akkor működik, amikor az alkalmazás aktív. Az alkalmazáskiterjesztések Androidon nem léteznek koncepcióként, de a BroadcastReceiver hasonló szerepet tölt be — rendszerintegrációkon keresztül bővíti az alkalmazás képességeit.
A NotificationListenerService egy szolgáltatás, amely minden rendszerértesítést fogad. NotificationListenerService BIND_NOTIFICATION_LISTENER_SERVICE engedélyt és hozzáférést igényel a kisegítő lehetőségek beállításain keresztül. Az AccessibilityService egy erősebb eszköz a rendszerintegrációhoz: képes olvasni a képernyő tartalmát, szimulálni kattintásokat és automatizálni műveleteket. Mindkét szolgáltatás explicit bekapcsolást igényel a felhasználó által a beállításokban, ami növeli a biztonságot. A mobilalkalmazásokban AccessibilityService-en keresztüli rendszerintegrációkat automatikus kitöltőkhöz, képernyőolvasókhoz és kisegítő eszközökhöz használják.
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
A példa regisztrál egy BroadcastReceiver-t a BOOT_COMPLETED eseményhez. WorkManager az eszköz indítása utáni késleltetett feladatvégrehajtáshoz használatos — ez a szabványos megközelítés az Android-alkalmazásokhoz.
App Widget Provider Androidon az iOS alkalmazáskiterjesztések megfelelője a widgetek kontextusában: ez egy komponens, amely interaktív tartalmat jelenít meg a kezdőképernyőn. A WidgetKit-tel ellentétben az Android widgetek fogadhatnak felhasználói bemenetet — kattintásokat, kapcsolókat és gesztusokat. Az App Widget Provider a manifestben regisztrálódik a méret és frissítési gyakoriság XML leírásán keresztül.
A RemoteViews XML-elrendezésen keresztül írja le a widget felületét, és csak korlátozott View-készletet támogat. RemoteViews nem engedélyez egyedi View-kat — csak szabványos komponenseket: TextView, ImageView, Button, ProgressBar. Az AppWidgetProvider az alaposztály, amely kezeli a widget frissítéseit, engedélyezését és törlését. Az onUpdate metódus időzítőn keresztül hívódik meg updatePeriodMillis segítségével vagy WorkManager-en keresztül a pontos vezérlés érdekében. A widgetekkel való rendszerintegrációk Androidon óvatosságot igényelnek — a túl gyakori frissítés lemeríti az akkumulátort.
A Glance API egy Jetpack könyvtár widgetek létrehozásához Kotlin DSL használatával XML helyett. Glance API RemoteViews-be fordul, és Compose-szerű szintaxist támogat: GlanceComposable, Column, Row, Text. A könyvtár megoldja a bonyolult XML kód problémáját, és lehetővé teszi a widgetek tesztelését JUnit-on keresztül. A Glance API még nem támogatja az összes RemoteViews funkciót — bonyolult interaktív widgetekhez a klasszikus megközelítés jobb. Az alkalmazáskiterjesztések a mobilfejlesztésben Androidon a Glance API felé fejlődnek, leegyszerűsítve a widgetek létrehozását és karbantartását.
Content Provider egy Android-komponens strukturált adatok megosztására alkalmazások között egységes ContentResolver interfészen keresztül. Az iOS alkalmazáskiterjesztésekkel ellentétben a Content Provider nem hoz létre külön folyamatot — az adatok szinkron módon kerülnek lekérésre a hívó alkalmazás kontextusában. A Content Provider képezi az Android rendszerintegrációinak alapját: névjegyek, médiafájlok, naptár és szabványos alkalmazások használják adatok közzétételére.
A FileProvider a ContentProvider alosztálya biztonságos fájlátvitelhez alkalmazások között. FileProvider ideiglenes content:// URI-kat generál a közvetlen file:// útvonalak helyett, amelyek Android 7+ rendszeren tiltottak. Használatához meg kell adni a files-path vagy external-files-path paramétert az XML konfigurációban. Az alkalmazáskiterjesztések a mobilfejlesztésben Androidon nem léteznek külön koncepcióként, de a FileProvider betölti a funkciójukat — az adatmegosztási képességeket egyetlen alkalmazáson túlra bővíti.
iOS-en a fájlmegosztás szerepét a File Provider Extension tölti be. File Provider Extension közzéteszi az alkalmazás fájljait a Fájlok alkalmazásban NSFileProviderManager-en keresztül. A FileProvider-rel ellentétben az iOS kiterjesztés külön bináris fájlt igényel, és izolált folyamatban fut. A File Provider Extension támogatja az NSFileProviderItem-et fájlok leírásához és az NSFileProviderEnumerator-t mappákban való navigációhoz. A File Provider Extension-en keresztüli rendszerintegrációk a mobilalkalmazásokban lehetővé teszik a felhasználó számára, hogy az alkalmazás fájljait a Fájlok alkalmazásból kezelje anélkül, hogy megnyitná azt.
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
A példa egy minimális File Provider Extension implementációt mutat Swift-ben. A item(for:) metódus egy NSFileProviderItem objektumot ad vissza azonosító alapján — a rendszer ezt hívja meg a fájlok Fájlok alkalmazásban való megjelenítésekor.
Gyakran ismételt kérdések
Alkalmazáskiterjesztések külön bináris fájlok, amelyek az alkalmazás funkcionalitását a folyamatán túlra bővítik: Today Widget, Share Extension, Action Extension, Keyboard Extension és más típusok, amelyek izolált környezetben futnak.
A CallKit integrálja a VoIP-hívásokat a rendszer hívásfelületébe a zárolt képernyőn való megjelenítéssel. A PushKit háttérbeli push értesítéseket szállít anélkül, hogy megjelenítené azokat a felhasználónak — felébreszti az alkalmazást adatok feldolgozásához, mint például a bejövő hívással kapcsolatos információk.
BroadcastReceiver egy Android-komponens, amely reagál a rendszer broadcast üzeneteire: eszköz indítás (BOOT_COMPLETED), hálózati kapcsolat (CONNECTIVITY_ACTION), repülőgép mód változások és egyéb operációs rendszer események.
Használja az AppWidgetProvider-t RemoteViews-szal a widget felületének létrehozásához vagy a Glance API-t (Jetpack) a Kotlin DSL megközelítéshez. A widget a manifestben regisztrálódik egy XML leíráson keresztül, amely meghatározza a méretet és a frissítési gyakoriságot.
Content Provider egy Android-komponens adatok megosztására alkalmazások között ContentResolver-en keresztül. Névjegyek, médiafájlok és bármilyen strukturált adat elérésére használják más alkalmazásokból.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.