Empezar
Copie un prompt de configuración con los pasos de instalación y la guía markdown completa para este plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-widget-kit`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/widget-kit/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Instalar
Sección titulada “Instalar”bun add @capgo/capacitor-widget-kitbunx cap syncImportar
Sección titulada “Importar”import { CapgoWidgetKit } from '@capgo/capacitor-widget-kit';Configuración de iOS
Sección titulada “Configuración de iOS”Para actividades en vivo y extensiones de WidgetKit, configure la aplicación nativa primero:
- Utilice iOS 17+ para botones de actividad en vivo interactivos cuando sea posible.
- Agregar
NSSupportsLiveActivitiesal la aplicaciónInfo.plistcuando se utiliza ActivityKit. - Agregar el mismo grupo de aplicación a la configuración de la aplicación y la configuración de la extensión de widget.
- Establecer
CapgoWidgetKitAppGroupen ambosInfo.plistarchivos a la identificador de grupo de aplicación compartido.
<key>CapgoWidgetKitAppGroup</key><string>group.app.capgo.widgetkit.exampleapp.widgetkit</string>Verificar Soporte
Sección titulada “Verificar Soporte”const { supported, reason } = await CapgoWidgetKit.areActivitiesSupported();
if (!supported) { console.log('WidgetKit bridge unavailable:', reason);}Opción 1: Plantilla de SVG de Actividad
Sección titulada “Opción 1: Plantilla de SVG de Actividad”Utilice este modo cuando el widget pueda renderizar SVG resuelto. El plugin almacena el estado, resuelve marcadores, aplica acciones de toque, cambia marcos de SVG y mantiene el estado del temporizador consistente.
const { activity } = await CapgoWidgetKit.startTemplateActivity({ activityId: 'workout-session-1', openUrl: 'myapp://workout/session-1', state: { title: 'Chest Day', frame: 'summary', restDurationMs: 90000, }, definition: { id: 'workout-card', timers: [ { id: 'rest', durationPath: 'state.restDurationMs', }, ], actions: [ { id: 'next-frame', eventName: 'widget.frame.changed', frameMutations: [ { op: 'next', path: 'frame', surface: 'lockScreen', }, ], }, { id: 'toggle-rest', eventName: 'widget.timer.toggled', timerMutations: [ { op: 'toggle', timerId: 'rest', }, ], }, ], layouts: { lockScreen: { width: 100, height: 40, frameIdPath: 'state.frame', frames: [ { id: 'summary', hotspots: [{ id: 'switch', actionId: 'next-frame', x: 0, y: 0, width: 100, height: 40 }], svg: `<svg viewBox="0 0 100 40"><text x="6" y="22">{{state.title}}</text></svg>`, }, { id: 'timer', hotspots: [{ id: 'pause-play', actionId: 'toggle-rest', x: 0, y: 0, width: 100, height: 40 }], svg: `<svg viewBox="0 0 100 40"><text x="6" y="22">{{timers.rest.remainingText}}</text></svg>`, }, ], }, }, },});Ejecutar Acciones Desde La Aplicación
Sección titulada “Ejecutar Acciones Desde La Aplicación”Los widgets nativos pueden desencadenar las mismas acciones a través de su cableado de hotspot/acción. La aplicación también puede ejecutarlas directamente:
await CapgoWidgetKit.performTemplateAction({ activityId: activity.activityId, actionId: 'toggle-rest', sourceId: 'app-pause-play-button',});Procesar Eventos Del Widget
Sección titulada “Procesar Eventos Del Widget”Las acciones emiten eventos para que la aplicación pueda procesar las interacciones del widget después de lanzar o reanudar:
const { events } = await CapgoWidgetKit.listTemplateEvents({ activityId: activity.activityId, unacknowledgedOnly: true,});
for (const event of events) { console.log('Widget event:', event.eventName, event.state, event.timers);}
await CapgoWidgetKit.acknowledgeTemplateEvents({ activityId: activity.activityId,});Actualizar O Finalizar La Actividad
Sección titulada “Actualizar O Finalizar La Actividad”await CapgoWidgetKit.updateTemplateActivity({ activityId: activity.activityId, state: { title: 'Back Day', frame: 'summary', restDurationMs: 120000, },});
await CapgoWidgetKit.endTemplateActivity({ activityId: activity.activityId, state: { title: 'Workout complete', frame: 'summary' },});Mutaciones de marco
Sección titulada “Mutaciones de marco”Las mutaciones de marco escriben el id del marco activo en el estado. Un diseño puede leerlo luego con frameIdPath.
| Operación | Comportamiento |
|---|---|
set | Establecer un id de marco específico. Las cadenas de texto planas se tratan como ids de marco literales; los {{...}} se resuelven primero. |
next | Moverse al siguiente marco desde frameIds o los marcos declarados en surface. |
previous | Moverse al marco anterior. |
toggle | Alternar entre los dos marcos disponibles, o entre el marco actual y frameId. |
Los IDs de marcos inválidos se ignoran cuando la mutación tiene una lista de marcos seleccionables conocida, por lo que el estado se alinea con la superficie renderizada.
Mutaciones de temporizador
Sección titulada “Mutaciones de temporizador”Las mutaciones de temporizador apuntan a un temporizador denominado definition.timers.
| Operación | Comportamiento |
|---|---|
start / restart | Inicia desde cero utilizando la duración actual. |
pause | Almacena el tiempo transcurrido y elimina startedAt. |
resume | Reanuda solo los temporizadores pausados. Los temporizadores detenidos permanecen detenidos hasta un reinicio explícito o reinicio. |
toggle | Pausa un temporizador en ejecución o reanuda un temporizador pausado. |
reset | Elimina el tiempo transcurrido y regresa a estado de inactividad. |
stop | Elimina el progreso de tiempo de ejecución y marca el temporizador como detenido. |
setDuration | Recomputa el estado después de un cambio de duración. |
Los enlaces de temporizador están disponibles para SVG como {{timers.<id>.remainingText}}, {{timers.<id>.elapsedMs}}, {{timers.<id>.status}} y campos relacionados.
Opción 2: Sesión de Widget de Navegación Completa
Sección titulada “Opción 2: Sesión de Widget de Navegación Completa”Utiliza este modo cuando la interfaz de usuario del widget se construye en code. El plugin proporciona al aplicación y al widget un registro de sesión compartido y una cola de mensajes.
const { session } = await CapgoWidgetKit.startWidgetSession({ widgetId: 'native-session-1', kind: 'workout-controls', state: { isRunning: true, selectedSetId: 'set-1' }, metadata: { accent: '#00d69c' },});
await CapgoWidgetKit.updateWidgetSession({ widgetId: session.widgetId, merge: true, state: { isRunning: false },});
const { sessions } = await CapgoWidgetKit.listWidgetSessions();console.log('Known widget sessions:', sessions);Mensajes de Widget Asíncronos
Sección titulada “Mensajes de Widget Asíncronos”Los mensajes cubren trabajo que requiere una respuesta posterior, como un widget que solicita a la aplicación sincronizar datos.
const { message } = await CapgoWidgetKit.sendWidgetMessage({ widgetId: session.widgetId, direction: 'widgetToApp', name: 'syncWorkoutSet', payload: { setId: 'set-1' }, expectsResponse: true,});
await CapgoWidgetKit.acknowledgeWidgetMessages({ messageIds: [message.messageId],});
await CapgoWidgetKit.completeWidgetMessage({ messageId: message.messageId, response: { synced: true },});Para fallar el trabajo, pasar error en lugar de response:
await CapgoWidgetKit.completeWidgetMessage({ messageId: message.messageId, error: 'Network unavailable',});completeWidgetMessage es idempotente. Si el mensaje ya está completado o fallido, las llamadas repetidas devuelven el snapshot de mensaje existente.
Detener una Sesión Nativa
Título de la sección “Detener una Sesión Nativa”await CapgoWidgetKit.stopWidgetSession({ widgetId: session.widgetId, state: { isRunning: false },});API Grupos
Título de la sección “API Grupos”| Grupo | APIs |
|---|---|
| Capacidad | areActivitiesSupported, getPluginVersion |
| ciclo de vida de actividad SVG | startTemplateActivity, updateTemplateActivity, endTemplateActivity, getTemplateActivity, listTemplateActivities |
| Acciones y eventos de SVG | performTemplateAction, listTemplateEvents, acknowledgeTemplateEvents |
| Sesiones de widget nativo | startWidgetSession, updateWidgetSession, stopWidgetSession, getWidgetSession, listWidgetSessions |
| Mensajes de widget nativo | sendWidgetMessage, listWidgetMessages, acknowledgeWidgetMessages, completeWidgetMessage |
Fuente de Verdad
Sección titulada “Fuente de Verdad”La referencia de tipo completa vive en el repositorio del plugin en src/definitions.ts.