Zum Inhalt springen

Siri, Shortcuts, Widgets und System Intents

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.

SystemoberflächeCapgo PluginWas das Plugin tatsächlich macht
Home-Screen-Widgets, Lock-Screen Live Activities, Dynamic Island (SVG oder natives Widget code)@capgo/capacitor-widget-kitTemplate-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-activitiesActivityKit-Activities aus Capacitor heraus starten, updaten und beenden; Timer-Sequenzen; geteilte Bilder in der App Group.
Shares von anderen Apps empfangen@capgo/capacitor-share-targetshareReceived 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-launcherstartActivityAsync, openIOSSettings, openApplication. Das ist es nicht Apple App Intents.
Siri-Phrasen, Shortcuts, Spotlight, Quick Actions, App Intent Queue@capgo/capacitor-app-intentsDispatch Bridge, setEntityCatalog, indexSpotlightEntities, setHomeScreenShortcutItems, getPendingInvocations, useAppIntentsListener. iOS 16+.
On-device LLM (Apple Intelligence auf unterstützten iPhones)@capgo/capacitor-llmChat- und Model-APIs. Kein App Intent oder Schema-Bridge.

Nutze diese Tabelle, um die Parität zu bewerten. Zeilen, die als teilweise mean only a narrow slice overlaps.

expo-app-intents-FähigkeitCapgo heute
Benutzerdefinierte Aktionen in Siri und der Shortcuts-App mit gesprochenen PhrasenJa 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-InhalteJa mit @capgo/capacitor-app-intents über indexSpotlightEntities() (CSSearchableItem, plus IndexedEntity auf iOS 18+).
Bildschirminhalte mit Entities verknüpfen für System-IntelligenzTeilweise. 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 istJa 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 IntentsTeilweise. 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-JavaScriptJa. 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.

@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.

@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.

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.

ZielHier starten
Lock Screen und Dynamic Island mit SVG und Tap-LoggingWidgetKit
Rich-Layout-JSON und Timer-SequenzenLive Activities
Nutzer teilt Link oder Datei mit deiner AppZiel teilen
Deep Link zu WiFi- oder App-EinstellungenIntent-Launcher
Siri-Phrase, die deinen JS-Handler mit Entity-Parametern ausführtApp-Intents (Codegen für Phrasen, setEntityCatalog, useAppIntentsListener)
BereichStatus
Widget Kit custom AppShortcut Phrasen, die an das Template-Event-Log gebunden sindWidget Kit bündelt weiterhin LiveActivityIntent nur Helper; beliebige Siri-Phrasen gehören in den App Intents Codegen.
Share Target Polling APIAktuell nur Events; nutze addListener('shareReceived') früh beim Boot.
Native Apple Mail Schema-IntentsNicht für Drittanbieter-Apps verfügbar; App Intents stellt stattdessen einen JS-Handler in die Warteschlange.
Android-Parität für App IntentsApp Intents nur für iOS 16+; Android gibt eine klare Fehlermeldung aus.