Siri, Shortcuts, widgets e intents del sistema
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Expo lanzó recientemente expo-app-intents, que conecta el App Intents framework de Apple con JavaScript: frases de Siri y Shortcuts, catálogos de entidades en runtime, esquemas de apps para Apple Intelligence, indexación de Spotlight y una cola nativa para invocaciones antes de que inicie JavaScript.
@capgo/capacitor-app-intents es el puente Capacitor para Apple App Intents: frases de Siri y Shortcuts (vía codegen en tiempo de compilación), catálogos de entidades en runtime, indexación de Spotlight, accesos directos en la pantalla de inicio y una cola de invocaciones pendientes para cold starts. Widget Kit, Live Activities, Share Target e Intent Launcher siguen cubriendo otras interfaces. Esta página explica cómo encajan para que puedas lanzar integraciones de sistema sin mezclar Android Intent APIs con Apple App Intents.
Mapa rápido
Sección titulada “Mapa rápido”| Superficie del sistema | plugin de Capgo | Qué hace realmente el plugin |
|---|---|---|
| Widgets de la pantalla de inicio, Live Activities en la pantalla de bloqueo, Dynamic Island (SVG o widget nativo code) | @capgo/capacitor-widget-kit | Persiste actividades de plantillas, ejecuta acciones declarativas, registra toques en widgets o Live Activity y sincroniza sesiones de widgets nativos mediante App Groups. |
| Live Activities con árboles de layout JSON | @capgo/capacitor-live-activities | Inicia, actualiza y finaliza actividades de ActivityKit desde Capacitor; secuencias de temporizadores; imágenes compartidas en App Group. |
| Recibe contenido compartido de otras apps | @capgo/capacitor-share-target | shareReceived eventos para título, texto y archivos mediante intents de Android o una Share Extension de iOS con App Group. |
| Abre ajustes o actividades de Android; abre URLs de Ajustes de iOS | @capgo/capacitor-intent-launcher | startActivityAsync, openIOSSettings, openApplication. Esto es necesitas Apple App Intents. |
| Frases de Siri, Shortcuts, Spotlight, acciones rápidas y cola de App Intents | @capgo/capacitor-app-intents | Enviar al bridge, setEntityCatalog, indexSpotlightEntities, setHomeScreenShortcutItems, getPendingInvocations, useAppIntentsListener. iOS 16+. |
| LLM en el dispositivo (Apple Intelligence en iPhones compatibles) | @capgo/capacitor-llm | APIs de chat y de modelos. Sin puente de App Intent o schema. |
Comparativa con expo-app-intents
Sección titulada “Comparación con expo-app-intents”Usa esta tabla para evaluar la paridad. Las filas marcadas como parcial significan que solo hay un pequeño solapamiento.
| capacidad de expo-app-intents | Capgo hoy |
|---|---|
| Acciones personalizadas en Siri y la app Atajos con frases habladas | Sí con @capgo/capacitor-app-intents. Las frases son literales de tiempo de compilación en el Swift generado (AppShortcutsProvider), no strings de JavaScript en runtime. |
Parámetros de Shortcut respaldados por catálogos de entidades JS (AppEntity, EntityQuery) | Sí con @capgo/capacitor-app-intents mediante setEntityCatalog() y nativos EntityQuery conexión. |
| Esquemas de apps de Apple (por ejemplo, intents de borradores de Mail para Apple Intelligence) | Parcial. App Intents expone performAppleSchemaTemplate como un solo una cola de JavaScript (sin API nativo de Mail). Implementas la UI de redacción o deep links en tu app. |
| Indexación en Spotlight y contenido buscable de la app | Sí con @capgo/capacitor-app-intents mediante indexSpotlightEntities() (CSSearchableItem, además IndexedEntity en iOS 18+). |
| Asocia contenido en pantalla con entidades para inteligencia del sistema | Parcial. Los catálogos de entidades impulsan los parámetros de Shortcuts; las APIs de asociación completa en pantalla aún no están disponibles. |
| Cola nativa para acciones ejecutadas antes de que JavaScript esté listo | Sí para App Intents vía @capgo/capacitor-app-intents (getPendingInvocations, appIntentInvoked). Share Target y Widget Kit siguen usando sus propios modelos de retención para shares y eventos de plantillas. |
| Live Activity interactiva o botones de widget mediante App Intents | Parcial. WidgetKit se incluye CapgoTemplateActionIntent y CompleteSetIntent como LiveActivityIntent tipos para plantillas de acciones de hotspot y workout en iOS 17+. Actualizan el estado nativo y el log de eventos; no exponen frases arbitrarias de Siri desde JavaScript. |
| WidgetKit y ActivityKit desde el JavaScript de la app | Sí. Plugins de WidgetKit y Live Activities (ver abajo). |
Android Intent acciones (settings, VIEW, SEND y similares) | Sí para lanzarlos y recibirlos mediante Intent Launcher y Share Target. |
Widget Kit: widgets, Live Activities y acciones de plantilla
Sección titulada “Widget Kit: widgets, Live Activities y acciones de plantilla”@capgo/capacitor-widget-kit es la coincidencia más cercana a UI visible del sistema fuera de tu WebView. Puedes controlar la Lock Screen y Dynamic Island desde Capacitor, renderizar widgets de la Home Screen desde plantillas SVG o code nativos en Swift/Kotlin, y procesar los taps posteriormente.
Inicia una Live Activity de plantilla y gestiona acciones en JavaScript
Sección titulada “Inicia una Live Activity de plantilla y gestiona acciones en JavaScript”Registra un listener al arrancar la app, luego haz polling o llama tras App se reanuda porque los toques en el widget pueden ejecutarse mientras la WebView aún se está cargando:
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();En iOS, los controles interactivos en la extensión del widget pueden llamar al bundle CapgoTemplateActionIntent (LiveActivityIntent). Esa ruta actualiza el estado de la plantilla almacenada y escribe en el mismo log de eventos que lee tu JavaScript. Es necesitas igual que añadir una frase de Atajo visible para el usuario en la app Shortcuts.
Ver Primeros pasos con Widget Kit para configurar el App Group y sesiones de widgets totalmente nativas.
Live Activities: layouts JSON desde Capacitor
Sección titulada “Live Activities: layouts JSON desde Capacitor”@capgo/capacitor-live-activities se centra en ActivityKit con JSON de layout declarativo (texto, imágenes, temporizadores, gauges, regiones de Dynamic Island). No registra App Intents ni atajos de Siri.
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' },});Elige Actividades en vivo cuando necesites el DSL de layout y helpers de imagen. Elige Widget Kit cuando necesites widgets para la Home, frames SVG, o el log de eventos de la plantilla y LiveActivityIntent botones.
Share Target: shares entrantes (no Shortcuts salientes)
Sección titulada “Share Target: shares entrantes (no Shortcuts salientes)”@capgo/capacitor-share-target permite que otras apps envíen contenido en a tu app. En iOS, añades una Share Extension que escribe en un App Group; el plugin principal lee y limpia ese payload y emite shareReceived.
El cold start se gestiona en iOS: el plugin nativo llama notifyListeners(..., retainUntilConsumed: true) así el primer listener de JavaScript sigue recibiendo el evento.
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);});Esto complementa los SEND intent filters de Android. Permite necesitas publicar share shortcuts o acciones de Siri desde tu app.
Intent Launcher: Android intents e iOS Settings (no App Intents)
Sección titulada “Intent Launcher: Android intents e iOS Settings (no App Intents)”El nombre es fácil de confundir con Apple App Intents. @capgo/capacitor-intent-launcher solo lanza Android actividades (incluyendo ActivityAction.CREATE_SHORTCUT para accesos directos de launchers antiguos) y aperturas de Ajustes de iOS esquemas de URL.
import { IntentLauncher, ActivityAction, IOSSettings } from '@capgo/capacitor-intent-launcher';
await IntentLauncher.startActivityAsync({ action: ActivityAction.WIFI_SETTINGS,});
await IntentLauncher.openIOSSettings({ option: IOSSettings.App });Para Siri, la app Shortcuts y AppIntent tipos, usa @capgo/capacitor-app-intents. Intent Launcher solo lanza actividades de Android y URLs de Ajustes de iOS.
Combinaciones sugeridas
Sección titulada “Combinaciones sugeridas”| Objetivo | Empieza aquí |
|---|---|
| Lock Screen y Dynamic Island con SVG y tap logging | Widget Kit |
| Layout JSON enriquecido y secuencias de timer | Actividades en vivo |
| El usuario comparte un link o archivo en tu app | Compartir objetivo |
| Deep link al usuario a WiFi o ajustes de la app | Lanzador de Intents |
| Frase de Siri que ejecuta tu handler JS con parámetros | App Intents (codegen para frases, setEntityCatalog, useAppIntentsListener) |
Brechas restantes (para planificación)
Sección titulada “Brechas restantes (para planificación)”| Área | Estado |
|---|---|
Widget Kit personalizado AppShortcut frases vinculadas al log de eventos de la plantilla | Widget Kit aún incluye LiveActivityIntent solo helpers; las frases de Siri arbitrarias van en la codegen de App Intents. |
| Polling de Share Target API | Solo eventos por ahora; usa addListener('shareReceived') al inicio del boot. |
| Intents de esquema de Apple Mail nativo | No disponible para apps de terceros; App Intents encola un handler de JS en su lugar. |
| Paridad de App Intents en Android | App Intents es solo para iOS 16+; Android devuelve un error claro. |