Zum Hauptinhalt springen
@capgo/capacitor-Widget-Kit Benutzeroberfläche & System Offene Quelle

Widget Kit Capacitor Plugin

Erstelle WidgetKit- und Live-Aktivitätsflächen aus Capacitor mit SVG-Rahmen, Zeitern, Aktionen oder vollständiger nativer Widget-Synchronisierung

Installieren

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

Demo

Widget Kit-Demos

WidgetKit und Live Activity Vorlagensteuerungen als animierte WebP Demo angezeigt.

Quellenassets
Animierte WidgetKit-Demo, die Vorlagenwidget-Zustand und -Steuerungen anhand von Capacitor angetrieben.
Widget-Vorlagenfluss

Richtlinie

Wie man Widget Kit in Capacitor verwendet.

Mit @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit ermöglicht es einem Capacitor-App, WidgetKit- und Live-Aktivitäts-Erfahrungen auf zwei Arten zu steuern:

  • Rendere die gelöste SVG-Vorlage auf Oberflächen mit Frame-Wechsel, Touch-Hotspots und Pause/Spiel-Zählern.
  • Hält die Widget vollständig nativ, während das App und Widget JSON-Sitzungsstate und asynchrone Nachrichten teilen.

Installieren

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

Wann man SVG-Vorlagen verwenden soll.

Verwenden Sie SVG-Vorlagen, wenn die Widgetoberfläche als SVG beschrieben werden kann. Die App speichert eine Vorlagendefinition, die native Brücke löst Platzhalter auf und Widget-Tasten können den Zustand später ändern.

Gute Anwendungen sind z.B. Workout-Timer, Lieferstatuskarten, Sportergebnisse oder jede kompakte UI, bei der das Wechseln zwischen benannten Frames ausreicht.

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

Widgetaktionen im App-Code verwalten

Widgetaktionen werden als Ereignisse gespeichert. Lesen und bestätigen Sie sie, wenn die App neu gestartet wird oder nach einem Hintergrund-Synchronisierungs-Schritt.

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

Wann verwenden Sie Vollständig-Native-Sitzungen

Use full-native sessions when the widget UI is better built directly in Swift, Kotlin, or Java. Capacitor still starts and stops the session, keeps shared state current, and queues work between app and 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 },
});

Queue Async Work Between Widget And App

Nachrichten können von der App zum Widget oder vom Widget zur App fließen. Sie bleiben bis zur Bestätigung und Abschluss ausstehend.

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

Wenn die Aufgabe fehlschlägt, füllen Sie die Nachricht mit einem Fehler aus:

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

Hinweise zur native Setup

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

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

Einrichtungshinweise für native Apps

Für iOS WidgetKit und Live Activities, konfigurieren Sie einen App-Gruppen auf den App- und Widget-Erweiterungszieldarstellungen und setzen Sie CapgoWidgetKitAppGroup in beiden Info.plist Dateien. Interaktive Schaltflächen erfordern eine Widget-Erweiterung, die die vom Plugin bereitgestellte native Brücke und die Aktion-Intention verbindet.

Vollständige Referenz

Weitermachen von Using @capgo/capacitor-widget-kit

Wenn Sie @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-widget-kit Verwendung von @capgo/capacitor-Widget-Kit um native Plugin-Arbeit zu planen, verbinden Sie es mit @capgo/capacitor-Widget-Kit für die Implementierungsdetails in @capgo/capacitor-Widget-Kit, Zur Einführung zur Implementierungsdetail in Zur Einführung Capgo Plugin-Verzeichnis zur Produktworkflow in Capgo Plugin-Verzeichnis Capacitor Plugins von Capgo zur Implementierungsdetail in Capacitor Plugins von Capgo, und Hinzufügen oder Aktualisieren von Plugins zur Implementierungsdetail in Hinzufügen oder Aktualisieren von Plugins.

FAQ

FAQ für das Widget Kit-Plugin

Wie installiere ich das Widget Kit-Plugin in einer Capacitor-App?

Führen Sie "bun add @capgo/capacitor-widget-kit" (oder "npm install @capgo/capacitor-widget-kit") aus, dann führen Sie "bunx cap sync" aus, damit die iOS- und Android-Projekte die nativen code-Dateien aufnehmen. Importieren Sie es aus "@capgo/capacitor-widget-kit" in Ihrer code-App.

Funktioniert @capgo/capacitor-widget-kit mit React, Vue und Angular?

Ja. Das Widget Kit ist ein Capacitor-Paket, daher funktioniert es mit jedem Webframework, das innerhalb von Capacitor läuft, einschließlich Ionic, React, Vue, Angular, Svelte und plain JavaScript.

Welche Capacitor-Version unterstützt @capgo/capacitor-widget-kit?

Capgo-Plugins folgen der Capacitor-Majorenversion: Wählen Sie die Plugin-Majorenversion, die Ihrer Capacitor-Majorenversion entspricht (z.B. Plugin v8 mit Capacitor 8). Die Kompatibilitätsübersicht im GitHub-README enthält die unterstützten Versionen.

Ist @capgo/capacitor-widget-kit kostenlos und Open-Source?

Ja. Die Quellcode von code ist öffentlich auf GitHub unter https://github.com/Cap-go/capacitor-widget-kit/ verfügbar und das Paket kann kostenlos installiert werden von npm. Bugberichte und Pull Requests sind willkommen.

Kann ich code aktualisieren, das Widget Kit verwendet, ohne eine App-Store-Bewertung?

Die Installation oder Aktualisierung des Plugins ändert die native code, daher benötigt es eine neue App-Store-Build. Anschließend können JavaScript-, HTML- und CSS-Änderungen, die den Plugin aufrufen, sofort mit Capgo-Live-Updates verschickt werden.

Widget Kit-Änderungen ohne Wartezeit auf die App-Bewertung versenden

Einmal das Plugin in Ihrem Store-Build installiert, Capgo Live-Updates drücken Ihre JavaScript-, HTML- und CSS-Änderungen bei den Benutzern in Minuten.

Starten Sie mit Capgo