Zum Hauptinhalt springen
@capgo/capacitor-Widget-Kit Benutzeroberfläche und System Open Source

Widget Kit Capacitor Plugin

Erstellen Sie WidgetKit- und Live-Aktivitätsflächen aus Capacitor mit SVG-Rahmen, Zeitern, Aktions-Hotspots 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-Vorlagensteuerelemente als animierte WebP-Demo.

Quellen-Assets
Animierte WidgetKit-Demo, die das Template-Widget-Zustand und die von Capacitor gesteuerten Kontrollen zeigt.
Widget-Template-Flow

Richtlinie

Wie Sie das Widget-Kit in Capacitor verwenden

Gerät testen

Laden Sie die Capgo-App herunter, dann scannen Sie die QR-code.

Vorschau-QR-code für das Widget-Kit-Plugin

Mit @capgo/capacitor-widget-kit

@capgo/capacitor-widget-kit erlaubt es einer Capacitor-App, WidgetKit und Live Activity-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.
  • Halten Sie das Widget vollständig nativ, während die App und das Widget JSON-Sitzungsstate und asynchrone Nachrichten teilen.

Installieren

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

Wann Verwenden Sie SVG-Vorlagen?

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

Gute Anwendungen umfassen Workout-Timer, Zustellstatuskarten, 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>`,
          },
        ],
      },
    },
  },
});

Behandeln Sie Widget-Aktionen in der App.

Widget-Aktionen werden als Ereignisse persistiert. Lesen und bestätigen Sie sie, wenn die App wieder aufgenommen wird oder nach einem Hintergrund-Synchronisierungsschritt.

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 Voll-Native Sitzungen?

Verwenden Sie voll-native Sitzungen, wenn die Widget-UI besser direkt in Swift, Kotlin oder Java erstellt werden kann. Capacitor startet und stoppt die Sitzung, hält den gemeinsamen Zustand aktuell und stellt die Arbeit zwischen App und Widget code an die Warteschlange.

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

Stellen Sie asynchrone Arbeit zwischen Widget und App an.

Nachrichten können von der App auf das Widget oder umgekehrt 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',
});

Sitzungen sauber beenden

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

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

Hinweise zur nativen Einrichtung

Für iOS WidgetKit und Live-Aktivitäten konfigurieren Sie einen App-Gruppen auf der App- und Widget-Erweiterungsziele 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-Intents verbindet.

Vollständige Referenz

Fortsetzen Sie von @capgo/capacitor-widget-kit

Wenn Sie verwenden Mit @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 Anleitung zum Starten für die Implementierungsdetails in Anleitung zum Starten Capgo Plugin-Verzeichnis für den Produktworkflow in Capgo Plugin-Verzeichnis Capacitor Plugins von Capgo für die Implementierungsdetails in Capacitor Plugins von Capgo, und Plugins hinzufügen oder aktualisieren für die Implementierungsdetails in Plugins hinzufügen oder aktualisieren.

FAQ

Widget Kit Plugin FAQ

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"), dann führen Sie "bunx cap sync" aus, damit die iOS- und Android-Projekte die native code-Datei aufnehmen. Importieren Sie sie 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-Version: verwenden Sie die Plugin-Major-Version, die Ihrem Capacitor-Major-Version entspricht (z.B. Plugin v8 mit Capacitor 8). Die Kompatibilitäts-Tabelle im GitHub-README listet die unterstützten Versionen auf.

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

Ja. Der 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. Bug-Reports und Pull-Requests sind willkommen.

Kann ich code aktualisieren, das Widget Kit verwendet, ohne eine App-Store-Überprüfung?

Die Installation oder Aktualisierung des Plugins ändert die native code-Datei, daher benötigt sie eine neue App-Store-Überprüfung. Nachdem Sie dies getan haben, können Sie JavaScript-, HTML- und CSS-Änderungen, die den Plugin-Aufruf enthalten, sofort mit Capgo-Live-Updates bereitstellen.

Verschicke Widget-Kit-Änderungen ohne auf die App-Überprüfung zu warten

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

Starte mit Capgo