Saltare al contenuto principale
@capgo/capacitor-kit di widget Interfaccia utente & Sistema Sorgente aperta

Kit di widget Plugin Capacitor

Crea superfici WidgetKit e di attività Live da Capacitor con frame SVG, timer, hotspot di azione o sincronizzazione dello stato widget nativo completo

Installa

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

Demo

Demos del kit di widget

Controlli di template WidgetKit e di attività Live visualizzati come demo animato WebP.

Asset di origine
Demo animata del kit di widget che mostra lo stato del widget e i controlli guidati da Capacitor
Ciclo del modello del widget

Guida

Come utilizzare il Kit dei widget in Capacitor

Testa sul dispositivo

Scarica l'app Capgo, poi scansione il codice QR code.

Widget Kit plugin preview QR code

Utilizzando @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit Permette a un'app Capacitor di guidare le esperienze di WidgetKit e Live Activity in due modi:

  • Rendere superfici SVG risolte con switching di frame, hotspot di tocco e timer di pausa/riavvio.
  • Conserva il widget completamente nativo mentre l'app e il widget condividono lo stato di sessione JSON e messaggi asincroni.

Installa

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

Quando Usare Template SVG

Usa i template SVG quando la superficie del widget può essere descritta come SVG. L'app memorizza una definizione di template, il ponte nativo risolve i placeholder e i tocchi del widget possono mutare lo stato in seguito.

Buoni adatti includono timer di allenamento, carte di stato di consegna, punteggi sportivi o qualsiasi UI compatto dove il passaggio tra frame denominati è sufficiente.

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

Gestisci Azioni del Widget Nell'App

Azioni dei widget vengono persistite come eventi. Leggi e conferma quando l'app si riavvia o dopo un passaggio di sincronizzazione in background.

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

Quando Usare Sessioni Full-Native

Usa sessioni full-native quando l'interfaccia utente del widget è meglio costruita direttamente in Swift, Kotlin o Java. Capacitor inizia e ferma comunque la sessione, mantiene lo stato condiviso aggiornato e coda il lavoro tra app e 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 },
});

Codifica il lavoro asincrono tra widget e app

I messaggi possono fluire dall'app al widget o dal widget all'app. Restano in attesa di conferma e completamento.

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

If il lavoro fallisce, completa il messaggio con un errore:

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

Stop Sessioni Pulite

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

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

Note di configurazione nativa

Per iOS WidgetKit e Live Activities, configura un gruppo di applicazione sulle impostazioni dell'app e dell'estensione widget e impostalo CapgoWidgetKitAppGroup in entrambi Info.plist i file. I pulsanti interattivi richiedono un'estensione widget che collega il ponte nativo fornito dal plugin e l'intento di azione.

Riferimento completo

Continua da Utilizzo di @capgo/capacitor-widget-kit

Se stai utilizzando Utilizzando @capgo/capacitor-kit di widget per pianificare il lavoro di plugin nativo, connettilo con @capgo/capacitor-kit di widget per i dettagli di implementazione in @capgo/capacitor-kit di widget, Getting Started per i dettagli di implementazione in Avvio, Directory dei plugin di Capgo per il workflow del prodotto nella Capgo Directory dei Plugin Plugin di Capacitor sviluppati da Capgo per i dettagli di implementazione in Plugin di Capacitor sviluppati da Capgo, e Aggiungere o aggiornare i plugin per i dettagli di implementazione in Aggiungere o aggiornare i plugin.

FAQ

FAQ del kit di widget

Come posso installare il kit di widget nel mio Capacitor app?

Esegui &quot;bun add @capgo/capacitor-widget-kit&quot; (o &quot;npm install @capgo/capacitor-widget-kit&quot;), quindi esegui &quot;bunx cap sync&quot; affinché i progetti iOS e Android recuperino i nativi code. Importalo da &quot;@capgo/capacitor-widget-kit&quot; nella tua app code.

Funziona @capgo/capacitor-widget-kit con React, Vue e Angular?

Sì. Il kit di widget è un pacchetto Capacitor, quindi funziona con qualsiasi framework web che esegue all'interno di Capacitor, compresi Ionic, React, Vue, Angular, Svelte e JavaScript puro.

Qual è la versione di Capacitor supportata da @capgo/capacitor-widget-kit?

Il plugin Capgo segue la versione maggiore di Capacitor: utilizza la versione maggiore del plugin che corrisponde alla tua versione maggiore di Capacitor (ad esempio plugin v8 con Capacitor 8). La tabella di compatibilità nel README del GitHub elenca le versioni mantenute.

È gratuito e open source @capgo/capacitor-widget-kit?

Sì. Il codice sorgente code è pubblico su GitHub all'indirizzo https://github.com/Cap-go/capacitor-widget-kit/ e il pacchetto è gratuito per l'installazione da npm. I segnalazioni di bug e pull request sono benvenuti.

Posso aggiornare il mio code che utilizza il kit di widget senza una revisione dell'App Store?

L'installazione o l'aggiornamento del plugin modifica i nativi code, quindi richiede una nuova costruzione del store. Dopo di che, le modifiche JavaScript, HTML e CSS che chiamano il plugin possono essere distribuite immediatamente con Capgo live updates.

Invia modifiche al Kit Widget senza attendere la revisione dell'app

Una volta che il plugin è presente nella tua store build, le Capgo aggiornamenti in tempo reale inviano le tue modifiche JavaScript, HTML e CSS ai utenti in pochi minuti.

Inizia con Capgo