Saltar al contenido principal
@capgo/capacitor-kit-de-wIDGETS Interfaz y Sistema Fuente abierta

Kit de widgets plugin de Capacitor

Construya superficies de WidgetKit y Actividad en vivo desde Capacitor con marcos SVG, temporizadores, puntos de acción o sincronización de estado de widget nativo completo.

Instalar

bun add @capgo/capacitor-widget-kit bunx cap sync
npm, pnpm o yarn
  • npm install @capgo/capacitor-widget-kit
  • pnpm add @capgo/capacitor-widget-kit
  • yarn add @capgo/capacitor-widget-kit

Demostración

Demos del Kit de Widgets

WidgetKit y plantilla de actividad en vivo mostrados como una demostración animada de WebP.

Recursos de origen
Demo animado de WidgetKit mostrando el estado y controles de un widget de plantilla impulsados por Capacitor
Flujo de plantilla de widget

Guía

Cómo usar Widget Kit en Capacitor

Usando @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit permite a una aplicación Capacitor impulsar experiencias de WidgetKit y Live Activity de dos maneras:

  • Renderizar superficies de plantilla SVG resueltas con cambios de marco, puntos de clic calientes y temporizadores de pausa/reanudar.
  • Mantener el widget completamente nativo mientras la aplicación y el widget comparten un estado de sesión JSON y mensajes asíncronos.

Instalar

bun add @capgo/capacitor-widget-kit
bunx cap sync

Cuándo usar plantillas SVG

Utilice plantillas SVG cuando la superficie del widget se puede describir como SVG. La aplicación almacena una definición de plantilla, el puente nativo resuelve los lugares comunes y los toques del widget pueden mutar el estado más tarde.

Las buenas opciones incluyen temporizadores de entrenamiento, tarjetas de estado de entrega, resultados de deportes, o cualquier interfaz compacta donde cambiar entre marcos nombrados es suficiente.

import { CapgoWidgetKit } from '@capgo/capacitor-widget-kit';

const { activity } = await CapgoWidgetKit.startTemplateActivity({
  activityId: 'session-1',
  state: {
    title: 'Chest Day',
    frame: 'summary',
    restDurationMs: 90000,
  },
  definition: {
    id: 'workout-card',
    timers: [{ id: 'rest', durationPath: 'state.restDurationMs' }],
    actions: [
      {
        id: 'next-frame',
        frameMutations: [{ op: 'next', path: 'frame', surface: 'lockScreen' }],
      },
      {
        id: 'toggle-rest',
        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>`,
          },
        ],
      },
    },
  },
});

Gestionar Acciones de Widget en la Aplicación

Las acciones de widget se persisten como eventos. Lee y reconócelos cuando la aplicación se reanude o después de un paso de sincronización de fondo.

const { events } = await CapgoWidgetKit.listTemplateEvents({
  activityId: activity.activityId,
  unacknowledgedOnly: true,
});

for (const event of events) {
  console.log(event.actionId, event.state, event.timers);
}

await CapgoWidgetKit.acknowledgeTemplateEvents({ activityId: activity.activityId });

Cuándo Usar Sesiones de Navegación Completa

Utilice sesiones de navegación completa cuando la interfaz de usuario del widget se construye mejor directamente en Swift, Kotlin o Java. Capacitor aún inicia y detiene la sesión, mantiene el estado compartido actualizado y programa el trabajo entre la aplicación y el widget code.

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 },
});

Programar Trabajo Asíncrono entre Widget y Aplicación

Los mensajes pueden fluir desde la aplicación a la widget o viceversa. Quedan pendientes hasta que sean reconocidos y completados.

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 },
});

Si el trabajo falla, complete el mensaje con un error:

await CapgoWidgetKit.completeWidgetMessage({
  messageId: message.messageId,
  error: 'Sync failed',
});

Detener Sesiones de Manera Limpia

await CapgoWidgetKit.endTemplateActivity({
  activityId: activity.activityId,
  state: { title: 'Workout complete', frame: 'summary' },
});

await CapgoWidgetKit.stopWidgetSession({
  widgetId: session.widgetId,
  state: { isRunning: false },
});

Nota de Configuración Nativa

Configure un grupo de App en los objetivos de la aplicación y la extensión de widget y establezca CapgoWidgetKitAppGroup en ambos Info.plist archivos. Los botones interactivos requieren una extensión de widget que conecte el puente nativo proporcionado por el plugin y la intención de acción.

Referencia completa

Sigue adelante desde Usando @capgo/capacitor-kit-de-widget/

Si estás utilizando Usando @capgo/capacitor-kit-de-widget/ para planificar el trabajo de plugin nativo, conecta con @capgo/capacitor-kit-de-widget/ para los detalles de implementación en @capgo/capacitor-kit-de-widget, Getting Started para los detalles de implementación en Inicio Capgo Directorio de Plugins para el flujo de trabajo del producto en Capgo Directorio de Plugins Capacitor Plugins por Capgo para los detalles de implementación en Capacitor Plugins por Capgo, y Agregar o Actualizar Plugins para los detalles de implementación en Agregar o Actualizar Plugins.

FAQ

Kit de widgets de Capacitor FAQ

¿Cómo instalo el plugin de Kit de Widget en una aplicación Capacitor?

Run &quot;bun add @capgo/capacitor-widget-kit&quot; (or &quot;npm install @capgo/capacitor-widget-kit&quot;), then run &quot;bunx cap sync&quot; so the iOS and Android projects pick up the native code. Import it from &quot;@capgo/capacitor-widget-kit&quot; in your app code.

¿Funciona @capgo/capacitor-kit de widget con React, Vue y Angular?

Sí. El Kit de widget es un paquete Capacitor, por lo que funciona con cualquier framework web que se ejecute dentro de Capacitor, incluyendo Ionic, React, Vue, Angular, Svelte y JavaScript puro.

¿Qué versión de Capacitor soporta el kit de widgets de @capgo/capacitor?

Los plugins Capgo siguen la versión mayor de Capacitor: utilice la versión mayor del plugin que coincida con la versión mayor de Capacitor (por ejemplo, plugin v8 con Capacitor 8). La tabla de compatibilidad en el README del GitHub lista las versiones mantenidas.

¿Es @capgo/capacitor-kit de widget gratuito y de código abierto?

Sí. El código fuente de code está público en GitHub en https://github.com/Cap-go/capacitor-kit-de-widget/ y el paquete es gratuito para instalar desde npm. Se aceptan informes de errores y solicitudes de extracción.

Puedo actualizar code que utiliza el Kit de Widget sin una revisión de la Tienda de Aplicaciones?

La instalación o actualización del plugin cambia el code nativo, por lo que necesita una nueva compilación de la tienda. Después de eso, los cambios en JavaScript, HTML y CSS que llaman al plugin pueden enviar instantáneamente con Capgo actualizaciones en vivo.

Envíe cambios del Kit de Widget sin esperar a la revisión de la aplicación

Una vez que el plugin esté en tu tienda de construcción, Capgo actualizaciones en vivo envían tus cambios de JavaScript, HTML y CSS a los usuarios en minutos.

Comienza con Capgo