App Extensions en systeemintegraties in mobiele ontwikkeling: wat ze zijn, typen en hoe ze werken

Auteur: IT Sectr Gepubliceerd: 2026-06-22 Leestijd: 11 min

App Extensions zijn aparte uitvoerbare modules die de mogelijkheden van een mobiele app uitbreiden buiten de hoofdinterface: Today Widget op het startscherm, VoIP-gespreksafhandeling via CallKit en reactie op systeemgebeurtenissen via BroadcastReceiver. Systeemintegraties stellen een app in staat om op een diep niveau met het besturingssysteem te interageren, waardoor functies worden ontgrendeld die niet beschikbaar zijn voor gewone schermen. Volgens de Apple Developer-documentatie draait elke extensie in een geïsoleerd proces en wordt beheerd door het systeem, onafhankelijk van de hoofd-app. App Extensions in een mobiele app maken het mogelijk functies te implementeren die niet beschikbaar zijn in het hoofdproces.

Belangrijkste punten

  • App Extensions — aparte binaire bestanden in een app die de functionaliteit buiten het hoofdproces uitbreiden
  • CallKit — een framework voor het integreren van VoIP-gesprekken in de systeemgespreksinterface van de iPhone
  • BroadcastReceiver — een Android-component die reageert op systeembroadcastberichten
  • AppWidgetProvider — een basisklasse voor het maken van widgets op Android met RemoteViews-ondersteuning
  • Content Provider — een Android-component voor het delen van gegevens tussen apps via ContentResolver

App Extensions op iOS: widgets en extensies voor het delen van inhoud

App Extensions op iOS verschenen in iOS 8 en werden de basis voor systeemintegraties in mobiele ontwikkeling. Dit zijn aparte binaire bestanden die samen met de hoofd-app worden gebundeld, maar worden gestart in een geïsoleerd proces. Elke extensie heeft zijn eigen Info.plist en een ingangspunt gedefinieerd via NSExtensionPrincipalClass. Het systeem beheert de levenscyclus van App Extensions — ze kunnen niet op de achtergrond blijven nadat een taak is voltooid.

WidgetKit en Today Widget

WidgetKit (iOS 14+) is een modern framework voor het maken van widgets op het startscherm. WidgetKit gebruikt SwiftUI voor het beschrijven van de interface en TimelineProvider voor het definiëren van updateschema's. Widgets zijn er in drie maten: klein (2×2 cellen), medium (4×2) en groot (4×4). De oude Today Widget op basis van UICollectionViewController wordt nog steeds ondersteund, maar Apple raadt aan om te migreren naar WidgetKit. App Extensions op WidgetKit ondersteunen geen animatie, toetsenbordinvoer of gebaren — dit zijn statische of pseudo-geanimeerde elementen met periodieke updates.

Share Extension en Action Extension

Share Extension maakt het mogelijk om inhoud vanuit elke app naar jouw app te verzenden via het systeemdeelblad. Share Extension ontvangt gegevens via NSExtensionItem en gebruikt SLComposeServiceViewController voor de gebruikersinterface. Action Extension verwerkt inhoud ter plaatse — bijvoorbeeld tekst vertalen in de browser zonder naar een andere app te gaan. Beide typen moeten hun werk binnen een beperkte tijd voltooien, anders "doodt" het systeem de extensie. Dit is een belangrijke beperking van App Extensions in een mobiele app — achtergrondtaken zijn niet beschikbaar op extensieniveau.

CallKit, PushKit en SiriKit — systeemintegraties voor spraak en meldingen

De systeemintegraties op iOS gaan veel verder dan widgets: CallKit, PushKit en SiriKit stellen een mobiele app in staat om op systeemniveau te werken. Deze frameworks vereisen speciale rechten, maar bieden de gebruiker een naadloze ervaring — gesprekken via CallKit zien eruit als gewone telefoongesprekken en Siri verwerkt verzoeken zonder de app te openen.

CallKit — VoIP-gesprekken in de systeeminterface

CallKit integreert gesprekken van apps van derden in het systeemgespreksscherm, inclusief het vergrendelde scherm. CXProvider registreert de app als een VoIP-dienst en CXCallController beheert gesprekken. CallKit blokkeert automatisch dubbele gesprekken en ondersteunt Call Directory Extension voor het blokkeren van ongewenste nummers. Systeemintegraties in mobiele ontwikkeling met CallKit zijn cruciaal voor spraakcommunicatie-apps — WhatsApp, Skype en Zoom gebruiken het om inkomende gesprekken weer te geven.

PushKit — Pushmeldingen op de achtergrond

PushKit levert pushmeldingen rechtstreeks aan de mobiele app zonder ze aan de gebruiker te tonen. PushKit wekt de app uit een "gedode" toestand en geeft gegevens door via de gedelegeerde PKPushRegistryDelegate. Dit is het primaire mechanisme voor VoIP-apps: PushKit levert gespreksinformatie en CallKit toont deze. PushKit heeft een hogere bezorgprioriteit dan gewone pushmeldingen en vereist geen weergave van een banner. App Extensions in mobiele apps combineren vaak PushKit met CallKit voor spraakcommunicatie.

SiriKit en Intents Extension

SiriKit maakt het mogelijk om verzoeken via Siri en de Snelkoppelingen-app te verwerken. Intents Extension is een aparte App Extension die ondersteunde intenties registreert en verwerkt. SiriKit ondersteunt meer dan 20 domeinen: gesprekken, berichten, betalingen, notities, trainingen. Snelkoppelingen stellen de gebruiker in staat om automatiseringen te maken — bijvoorbeeld "Een bericht in WhatsApp verzenden via Siri." Systeemintegraties met SiriKit en Snelkoppelingen verhogen de betrokkenheid omdat de gebruiker acties uitvoert zonder de app te openen.

BroadcastReceiver en systeemdiensten op Android

BroadcastReceiver is een Android-component die reageert op systeembroadcastberichten. In tegenstelling tot iOS App Extensions heeft BroadcastReceiver geen apart binair bestand nodig — het volstaat om de ontvanger te registreren in het manifest of in code via Context.registerReceiver. Systeemintegraties op Android beginnen vaak met BroadcastReceiver: van het starten van een dienst bij het opstarten van het apparaat tot het reageren op netwerkverbinding.

IntentFilter voor systeemgebeurtenissen

IntentFilter bindt BroadcastReceiver aan een specifieke systeemgebeurtenis. Typische gebeurtenissen: BOOT_COMPLETED (opstarten apparaat), CONNECTIVITY_ACTION (netwerkverandering), BATTERY_LOW (lage batterij), TIME_SET (tijdwijziging). De ontvanger wordt geregistreerd in AndroidManifest.xml of via Context.registerReceiver voor dynamische registratie. Dynamische registratie heeft de voorkeur — het vereist geen machtigingen in het manifest en werkt alleen terwijl de app actief is. App Extensions op Android bestaan niet als concept, maar BroadcastReceiver vervult een vergelijkbare rol — het breidt de app-mogelijkheden uit via systeemintegraties.

NotificationListenerService en AccessibilityService

NotificationListenerService is een dienst die alle systeemmeldingen ontvangt. NotificationListenerService vereist de machtiging BIND_NOTIFICATION_LISTENER_SERVICE en toegang via de toegankelijkheidsinstellingen. AccessibilityService is een krachtiger hulpmiddel voor systeemintegratie: het kan scherminhoud lezen, klikken simuleren en acties automatiseren. Beide diensten vereisen expliciete inschakeling door de gebruiker in de instellingen, wat de beveiliging verhoogt. Systeemintegraties in mobiele apps via AccessibilityService worden gebruikt voor automatische invullers, schermlezers en toegankelijkheidshulpmiddelen.

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            WorkManager.getInstance(context)
                .enqueueUniqueWork("post-boot", ...)
        }
    }
}

Het voorbeeld registreert een BroadcastReceiver voor de gebeurtenis BOOT_COMPLETED. WorkManager wordt gebruikt voor het uitgesteld uitvoeren van taken na het opstarten van het apparaat — dit is de standaardaanpak voor Android-apps.

App Widget Provider — widgets maken op Android

App Widget Provider op Android is het equivalent van iOS App Extensions in de context van widgets: het is een component die interactieve inhoud op het startscherm weergeeft. In tegenstelling tot WidgetKit kunnen Android-widgets gebruikersinvoer accepteren — klikken, schakelaars en gebaren. App Widget Provider wordt geregistreerd in het manifest via een XML-beschrijving van grootte en updatefrequentie.

RemoteViews en AppWidgetProvider

RemoteViews beschrijft de widgetinterface via een XML-lay-out en ondersteunt slechts een beperkte set Views. RemoteViews staat geen aangepaste Views toe — alleen standaardcomponenten: TextView, ImageView, Button, ProgressBar. AppWidgetProvider is de basisklasse die widgetupdates, inschakeling en verwijdering afhandelt. De methode onUpdate wordt aangeroepen via een timer via updatePeriodMillis of via WorkManager voor nauwkeurige controle. Systeemintegraties met widgets op Android vereisen voorzichtigheid — te frequente updates verbruiken de batterij.

Glance API (Jetpack) — moderne aanpak

Glance API is een Jetpack-bibliotheek voor het maken van widgets met Kotlin DSL in plaats van XML. Glance API compileert naar RemoteViews en ondersteunt een Compose-achtige syntaxis: GlanceComposable, Column, Row, Text. De bibliotheek lost het probleem van complexe XML-code op en maakt het testen van widgets via JUnit mogelijk. Glance API ondersteunt nog niet alle RemoteViews-functies — voor complexe interactieve widgets is de klassieke aanpak beter. App Extensions in mobiele ontwikkeling op Android evolueren richting Glance API, waardoor het maken en onderhouden van widgets eenvoudiger wordt.

Content Provider, FileProvider en gegevens delen tussen apps

Content Provider is een Android-component voor het delen van gestructureerde gegevens tussen apps via een uniforme ContentResolver-interface. In tegenstelling tot iOS App Extensions creëert Content Provider geen apart proces — gegevens worden synchroon aangevraagd in de context van de aanroepende app. Content Provider vormt de basis van systeemintegraties op Android: contacten, mediabestanden, agenda en standaard apps gebruiken het om gegevens te publiceren.

FileProvider voor veilig delen van bestanden

FileProvider is een subklasse van ContentProvider voor veilige bestandsoverdracht tussen apps. FileProvider genereert tijdelijke content://-URI's in plaats van directe file://-paden, die verboden zijn op Android 7+. Om het te gebruiken, moet u files-path of external-files-path opgeven in de XML-configuratie. App Extensions in mobiele ontwikkeling op Android bestaan niet als apart concept, maar FileProvider vervult hun functie — het breidt de mogelijkheden voor het delen van gegevens uit buiten één app.

Tegenhanger op iOS: File Provider Extension

Op iOS wordt de rol van het delen van bestanden vervuld door File Provider Extension. File Provider Extension publiceert de bestanden van de app in de Bestanden-app via NSFileProviderManager. In tegenstelling tot FileProvider vereist de iOS-extensie een apart binair bestand en draait deze in een geïsoleerd proces. File Provider Extension ondersteunt NSFileProviderItem voor bestandsbeschrijving en NSFileProviderEnumerator voor navigatie door mappen. Systeemintegraties in mobiele apps via File Provider Extension stellen de gebruiker in staat om app-bestanden te beheren vanuit de Bestanden-app zonder deze te openen.

swift
class MyFileProviderExtension: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        return MyFileProviderItem(identifier: identifier)
    }
}

Het voorbeeld toont een minimale implementatie van File Provider Extension in Swift. De methode item(for:) retourneert een NSFileProviderItem-object op basis van identifier — het systeem roept deze aan bij het weergeven van bestanden in de Bestanden-app.

Veelgestelde vragen

Wat zijn App Extensions op iOS?

App Extensions zijn aparte binaire bestanden die de functionaliteit van de app uitbreiden buiten het proces: Today Widget, Share Extension, Action Extension, Keyboard Extension en andere typen die in een geïsoleerde omgeving draaien.

Hoe verschilt CallKit van PushKit?

CallKit integreert VoIP-gesprekken in de systeemgespreksinterface met weergave op het vergrendelde scherm. PushKit levert pushmeldingen op de achtergrond zonder ze aan de gebruiker te tonen — het wekt de app om gegevens te verwerken, zoals informatie over een inkomend gesprek.

Wat is BroadcastReceiver op Android?

BroadcastReceiver is een Android-component die reageert op systeembroadcastberichten: opstarten van apparaat (BOOT_COMPLETED), netwerkverbinding (CONNECTIVITY_ACTION), vliegtuigmoduswijzigingen en andere besturingssysteemgebeurtenissen.

Hoe maak ik een widget op Android?

Gebruik AppWidgetProvider met RemoteViews voor het maken van de widgetinterface of Glance API (Jetpack) voor de Kotlin DSL-aanpak. De widget wordt geregistreerd in het manifest via een XML-beschrijving die de grootte en updatefrequentie specificeert.

Waar dient Content Provider voor?

Content Provider is een Android-component voor het delen van gegevens tussen apps via ContentResolver. Het wordt gebruikt voor toegang tot contacten, mediabestanden en alle gestructureerde gegevens uit andere apps.

Samenvatting

  • App Extensions — de basis van systeemintegraties op iOS: widgets, delen, inhoudsverwerking en toetsenbordextensies in geïsoleerde processen
  • CallKit en PushKit — een paar frameworks voor VoIP-gesprekken: PushKit levert gegevens, CallKit toont de gespreksinterface
  • BroadcastReceiver — het Android-equivalent van App Extensions voor het reageren op systeemgebeurtenissen zonder apart binair bestand
  • AppWidgetProvider — een component voor widgets op Android met RemoteViews- en Glance API-ondersteuning
  • Content Provider en FileProvider — mechanismen voor het delen van gegevens tussen apps op Android via ContentResolver
  • File Provider Extension — de iOS-tegenhanger van FileProvider voor het publiceren van bestanden in de Bestanden-app vanuit een geïsoleerd proces
  • Systeemintegraties in mobiele ontwikkeling verenigen App Extensions, BroadcastReceiver, CallKit en Content Provider in één ecosysteem

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project