Siri, Shortcuts, Widgets und System Intents
Kopiere einen Setup-Prompt mit den Installationsschritten und dem vollständigen Markdown-Guide für dieses Plugin.
Expo hat kürzlich expo-app-intentsveröffentlicht, das Apples App-Intents Framework mit JavaScript verbindet: Siri- und Shortcuts-Phrasen, Runtime-Entity-Kataloge, Apple-App-Schemas für Apple Intelligence, Spotlight-Indexierung und eine native Queue für Aufrufe, die eintreffen, bevor JavaScript startet.
@capgo/capacitor-app-intents ist die Capacitor-Brücke für Apple App-Intents: Siri- und Shortcuts-Phrasen (via Compile-Time-Codegen), Runtime-Entity-Kataloge, Spotlight-Indexierung, Home-Screen-Quick-Actions und eine Pending-Invocation-Queue für Cold Starts. Widget Kit, Live Activities, Share Target und Intent Launcher decken weiterhin angrenzende Oberflächen ab. Diese Seite zeigt, wie sie zusammenpassen, damit du Systemintegrationen ausliefern kannst, ohne Android- Intent APIs mit Apple App Intents.
Kurzübersicht
Abschnitt mit dem Titel „Kurzübersicht“| Systemoberfläche | Capgo Plugin | Was das Plugin tatsächlich macht |
|---|---|---|
| Home-Screen-Widgets, Lock-Screen Live Activities, Dynamic Island (SVG oder natives Widget code) | @capgo/capacitor-widget-kit | Template-Activities persistieren, deklarative Actions ausführen, Taps auf Widgets oder Live Activities loggen, Full-Native-Widget-Sessions über App Groups synchronisieren. |
| Live Activities mit JSON-Layout-Trees | @capgo/capacitor-live-activities | ActivityKit-Activities aus Capacitor heraus starten, updaten und beenden; Timer-Sequenzen; geteilte Bilder in der App Group. |
| Shares von anderen Apps empfangen | @capgo/capacitor-share-target | shareReceived Events für Titel, Text und Dateien via Android Intents oder einer iOS Share Extension plus App Group. |
| Android-Einstellungen oder Activities öffnen; iOS Settings-URLs öffnen | @capgo/capacitor-intent-launcher | startActivityAsync, openIOSSettings, openApplication. Das ist es nicht Apple App Intents. |
| Siri-Phrasen, Shortcuts, Spotlight, Quick Actions, App Intent Queue | @capgo/capacitor-app-intents | Dispatch Bridge, setEntityCatalog, indexSpotlightEntities, setHomeScreenShortcutItems, getPendingInvocations, useAppIntentsListener. iOS 16+. |
| On-device LLM (Apple Intelligence auf unterstützten iPhones) | @capgo/capacitor-llm | Chat- und Model-APIs. Kein App Intent oder Schema-Bridge. |
Vergleich mit expo-app-intents
Abschnitt mit dem Titel „Vergleich mit expo-app-intents“Nutze diese Tabelle, um die Parität zu bewerten. Zeilen, die als teilweise mean only a narrow slice overlaps.
| expo-app-intents-Fähigkeit | Capgo heute |
|---|---|
| Benutzerdefinierte Aktionen in Siri und der Shortcuts-App mit gesprochenen Phrasen | Ja mit @capgo/capacitor-app-intents. Phrasen sind Compile-Time-Literale im generierten Swift (AppShortcutsProvider), keine JavaScript-Strings zur Laufzeit. |
Shortcut-Parameter auf Basis von JS-Entity-Katalogen (AppEntity, EntityQuery) | Ja mit @capgo/capacitor-app-intents über setEntityCatalog() und native EntityQuery Verdrahtung. |
| Apple App-Schemas (z. B. Mail-Entwurf-Intents für Apple Intelligence) | Teilweise. App Intents stellt bereit performAppleSchemaTemplate als eine reine JavaScript-Queue (kein natives Mail API). Du implementierst die Verfassen-UI oder Deep Links in deiner App. |
| Spotlight-Indexierung und durchsuchbare App-Inhalte | Ja mit @capgo/capacitor-app-intents über indexSpotlightEntities() (CSSearchableItem, plus IndexedEntity auf iOS 18+). |
| Bildschirminhalte mit Entities verknüpfen für System-Intelligenz | Teilweise. Entity-Kataloge steuern Shortcuts-Parameter; vollständige APIs für die Bildschirminhaltsverknüpfung sind noch nicht verfügbar. |
| Native Queue für Aktionen, die ausgelöst werden, bevor JavaScript bereit ist | Ja für App Intents über @capgo/capacitor-app-intents (getPendingInvocations, appIntentInvoked). Share Target und Widget Kit verwenden weiterhin ihre eigenen Retention-Modelle für Shares und Template-Events. |
| Interaktive Live Activity- oder Widget-Buttons über App Intents | Teilweise. Widget Kit wird ausgeliefert CapgoTemplateActionIntent und CompleteSetIntent als LiveActivityIntent Typen für Template Hotspot- und Workout-Aktionen auf iOS 17+. Sie aktualisieren den nativen Zustand und das Event-Log; sie stellen keine beliebigen Siri-Phrasen aus JavaScript bereit. |
| WidgetKit und ActivityKit aus App-JavaScript | Ja. Widget Kit- und Live Activities-Plugins (siehe unten). |
Android Intent Aktionen (Einstellungen, VIEW, SEND und ähnliche) | Ja zum Starten und Empfangen über Intent Launcher und Share Target. |
Widget Kit: Widgets, Live Activities und Template-Aktionen
Abschnitt mit dem Titel „Widget Kit: Widgets, Live Activities und Template-Aktionen“@capgo/capacitor-widget-kit ist die nächstliegende Entsprechung zu systemseitig sichtbare UI außerhalb deines WebViews. Du kannst Lock Screen- und Dynamic Island-Oberflächen von Capacitor aus steuern, Home Screen-Widgets aus SVG-Templates oder nativen Swift/Kotlin-code rendern und Taps nachträglich verarbeiten.
Live Activity aus einem Template starten und Aktionen in JavaScript verarbeiten
Abschnitt mit dem Titel „Template Live Activity starten und Aktionen in JavaScript verarbeiten“Registriere einen Listener beim App-Start, dann pollen oder aufrufen nach App resume, da Widget-Taps ausgeführt werden können, während der WebView noch lädt:
import { App } from '@capacitor/app';import { CapgoWidgetKit } from '@capgo/capacitor-widget-kit';
const ACTIVITY_ID = 'order-tracker';
async function drainTemplateEvents() { const { events } = await CapgoWidgetKit.listTemplateEvents({ activityId: ACTIVITY_ID, unacknowledgedOnly: true, });
for (const event of events) { if (event.actionId === 'mark-delivered') { // Update your app state from event.state or event.payload } await CapgoWidgetKit.acknowledgeTemplateEvents({ eventIds: [event.eventId], }); }}
await CapgoWidgetKit.startTemplateActivity({ activityId: ACTIVITY_ID, state: { status: 'On the way' }, definition: { id: 'delivery-card', actions: [ { id: 'mark-delivered', eventName: 'delivery.marked', }, ], layouts: { lockScreen: { width: 200, height: 80, svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80"><text x="8" y="40">{{state.status}}</text></svg>', hotspots: [ { id: 'deliver', actionId: 'mark-delivered', x: 120, y: 20, width: 70, height: 40, label: 'Mark delivered', }, ], }, }, },});
App.addListener('resume', () => { void drainTemplateEvents();});
void drainTemplateEvents();Auf iOS können interaktive Steuerelemente in der Widget-Erweiterung den gebündelten CapgoTemplateActionIntent (LiveActivityIntent). Dieser Pfad aktualisiert den gespeicherten Template-State und hängt an dasselbe Event-Log an, das dein JavaScript liest. Er ist es nicht identisch mit dem Hinzufügen einer für Nutzer sichtbaren Shortcut-Phrase in der Shortcuts-App.
Siehe Widget Kit: Erste Schritte für App-Group-Setup und vollständig native Widget-Sessions.
Live Activities: JSON-Layouts von Capacitor
Abschnitt mit dem Titel „Live Activities: JSON-Layouts von Capacitor“@capgo/capacitor-live-activities focuses on ActivityKit mit deklarativem Layout-JSON (Text, Bilder, Timer, Anzeigen, Dynamic Island Bereiche). Es registriert keine App Intents oder Siri Shortcuts.
import { CapgoLiveActivities } from '@capgo/capacitor-live-activities';
const { supported } = await CapgoLiveActivities.areActivitiesSupported();if (!supported) { return;}
const { activityId } = await CapgoLiveActivities.startActivity({ layout: { type: 'container', direction: 'vertical', children: [ { type: 'text', content: 'Order {{orderId}}', fontWeight: 'bold' }, { type: 'text', content: '{{status}}' }, ], }, data: { orderId: '42', status: 'Preparing' },});
await CapgoLiveActivities.updateActivity({ activityId, data: { orderId: '42', status: 'Out for delivery' },});Wähle Live Activities wenn du das Layout-DSL und Image-Helper benötigst. Wähle WidgetKit wenn Sie Home Screen Widgets, SVG-Frames oder das Template-Eventlog benötigen und LiveActivityIntent Buttons.
Share Target: eingehende Shares (keine ausgehenden Shortcuts)
Abschnitt mit dem Titel „Share Target: eingehende Shares (keine ausgehenden Shortcuts)“@capgo/capacitor-share-target ermöglicht anderen Apps, Inhalte zu senden in an deine App. Unter iOS fügst du eine Share Extension hinzu, die in eine App Group schreibt; das Haupt-App-Plugin liest diesen Payload, leert ihn und gibt shareReceived.
Der Cold Start wird unter iOS behandelt: Das native Plugin ruft notifyListeners(..., retainUntilConsumed: true) sodass der erste JavaScript-Listener das Event weiterhin empfängt.
import { CapacitorShareTarget } from '@capgo/capacitor-share-target';
await CapacitorShareTarget.addListener('shareReceived', (event) => { const firstText = event.texts[0] ?? ''; const firstFile = event.files[0]; console.log(event.title, firstText, firstFile?.uri);});Dies ergänzt die Android- SEND Intent-Filter. Damit lassen sich es nicht Share-Shortcuts oder Siri-Aktionen aus deiner App veröffentlichen.
Intent Launcher: Android Intents und iOS Settings (keine App Intents)
Abschnitt mit dem Titel „Intent Launcher: Android-Intents und iOS-Einstellungen (nicht App Intents)“Der Name ist leicht mit Apple zu verwechseln App-Intents. @capgo/capacitor-intent-launcher startet nur Android Aktivitäten (einschließlich ActivityAction.CREATE_SHORTCUT für Legacy-Launcher-Shortcuts) und öffnet iOS-Einstellungen URL-Schemes.
import { IntentLauncher, ActivityAction, IOSSettings } from '@capgo/capacitor-intent-launcher';
await IntentLauncher.startActivityAsync({ action: ActivityAction.WIFI_SETTINGS,});
await IntentLauncher.openIOSSettings({ option: IOSSettings.App });Für Siri, die Shortcuts-App und AppIntent Typen, verwende @capgo/capacitor-app-intents. Intent Launcher startet nur Android-Aktivitäten und iOS-Einstellungen-URLs.
Empfohlene Kombinationen
Abschnitt mit dem Titel „Empfohlene Kombinationen“| Ziel | Hier starten |
|---|---|
| Lock Screen und Dynamic Island mit SVG und Tap-Logging | WidgetKit |
| Rich-Layout-JSON und Timer-Sequenzen | Live Activities |
| Nutzer teilt Link oder Datei mit deiner App | Ziel teilen |
| Deep Link zu WiFi- oder App-Einstellungen | Intent-Launcher |
| Siri-Phrase, die deinen JS-Handler mit Entity-Parametern ausführt | App-Intents (Codegen für Phrasen, setEntityCatalog, useAppIntentsListener) |
Offene Punkte (für die Planung)
Abschnitt mit der Überschrift „Verbleibende Lücken (für die Planung)“| Bereich | Status |
|---|---|
Widget Kit custom AppShortcut Phrasen, die an das Template-Event-Log gebunden sind | Widget Kit bündelt weiterhin LiveActivityIntent nur Helper; beliebige Siri-Phrasen gehören in den App Intents Codegen. |
| Share Target Polling API | Aktuell nur Events; nutze addListener('shareReceived') früh beim Boot. |
| Native Apple Mail Schema-Intents | Nicht für Drittanbieter-Apps verfügbar; App Intents stellt stattdessen einen JS-Handler in die Warteschlange. |
| Android-Parität für App Intents | App Intents nur für iOS 16+; Android gibt eine klare Fehlermeldung aus. |