Zum Hauptinhalt springen
Tutorials

Channel Surfing mit Capgo: Update-Channels zur Laufzeit wechseln

Mit dem Runtime-Channel-Switching von Capgo rollst du Änderungen sofort für bestimmte Nutzer aus. Wechsle Update-Channels, ohne deine Capacitor App neu zu installieren.

Channel-Surfing für Capgo: So wechseln Sie Update-Kanäle zur Laufzeit Capgo Blog-Illustration

Hast du dir je gewünscht, eine Änderung direkt an einen bestimmten Nutzer zu liefern, damit er sie sofort prüfen und Feedback geben kann – ohne dass er einen neuen Build von TestFlight oder Google Play herunterladen und installieren muss?

Ich hatte Kunden, die Verbesserungen anfragten, die ich schnell umsetzen konnte. Aber um die Ergebnisse zur Validierung an sie zu übergeben, musste ich entweder ein Update für alle Nutzer veröffentlichen (riskant für experimentelle Änderungen) oder einen Einmal-Build speziell für den Kunden erstellen (Mühe für uns beide).

Was fehlte, war Flexibilität. Entwickler wollten in der Lage sein, unterschiedlichen Nutzergruppen unterschiedliche Updates bereitzustellen, z. B. nicht-technischen Stakeholdern, QA oder der gesamten Nutzerbasis, wenn es angemessen ist.

Es gab keine Möglichkeit, wie ein Produktions-Build auf eine Work-in-Progress-Version wechseln, Feedback sammeln und dann wieder zur Produktion zurückkehren konnte.

Genau das Channel Surfing es. Eine auf einem Nutzergerät installierte App kann zur Laufzeit zwischen Update-Kanälen wechseln und so aus einer Produktions-App einen flexiblen Raum für Review und Iteration machen, statt ein festes Endziel zu sein. Das ist besonders nützlich für nicht-technische Stakeholder, die mit Produktions-Apps arbeiten, da sie Änderungen direkt in der bereits installierten App testen und Feedback geben können.

Update-Kanäle verstehen

Update-Kanäle sind die Methode, mit der Capgo Updates auf bestimmte Builds ausrichtet. Jeder Build ist einem Kanal zugeordnet, und dieser Kanal bestimmt, welche Updates er erhält.

Zum Beispiel kannst du Updates in einen preview Channel veröffentlichen, ohne Nutzer auf production. Früher erforderte das Umschalten zwischen Channels die Installation eines anderen Native Builds oder das manuelle Ändern der Gerätezuweisungen über das Dashboard.

Mit Channels in Capgo kannst du:

  • Bestimmte Nutzergruppen mit unterschiedlichen Features ansprechen
  • A/B-Tests durchführen, indem du Nutzer verschiedenen Channels zuweist
  • Neue Features schrittweise ausrollen
  • Beta-Testprogramme erstellen
  • Produktionsprobleme mit einzelnen Nutzern debuggen

Falls du mit Update-Channels noch nicht vertraut bist, erklärt die Capgo Channels-Dokumentation gehen wir im Folgenden näher darauf ein.

Was ist Channel Surfing?

Channel Surfing ermöglicht es einer installierten App, verschiedene Update-Streams zu nutzen, ohne neu installiert zu werden. Eine installierte App kann zur Laufzeit zwischen Update-Kanälen wechseln und erhält weiterhin Updates vom neu gewählten Kanal, bis die App deinstalliert oder auf einen anderen Kanal umgestellt wird.

In der Praxis bedeutet das, dass ein Product Owner oder QA eine production Build auf beispielsweise einen preview Kanal umstellen kann, um die neuesten Änderungen zu testen. Wenn das Testen abgeschlossen ist, wird auf production zurückgeschaltet. Eine Neuinstallation oder ein separater Preview-Build ist nicht erforderlich.

Im Hintergrund funktioniert Channel Surfing so, dass die App dem Updates-Client mitteilt, welchen Kanal sie verwenden soll. Diese Auswahl kann zur Laufzeit geändert werden und bleibt in Kraft, bis sie gelöscht oder ersetzt wird.

So implementierst du Channel Surfing

Bevor du Channel Surfing ausprobieren kannst, muss dein Projekt mit Capgo Live Updates konfiguriert sein. Richte dies ein, indem du dem Capgo Quickstart-Guide.

Die einzige Einrichtung für Channel Surfing besteht darin, „Geräte können sich selbst zuordnen“ auf jedem Kanal zu aktivieren, zu dem du wechseln möchtest, im Capgo Dashboard. Darüber hinaus sind keine code Änderungen oder Konfigurationsanpassungen erforderlich.

Im Kern wird das Channel-Surfing durch einen einzigen API-Aufruf gesteuert:

import { CapacitorUpdater } from '@capgo/capacitor-updater';

await CapacitorUpdater.setChannel({ channel: 'your-channel' });

Dies setzt den Channel, der bei der Abfrage von Capgo nach Updates verwendet wird. Mehr über die setChannel API.

Sofortiges Channel-Switching (v5.34.0+)

Ab Plugin-Version 5.34.0, 6.34.0, 7.34.0 oder 8.0.0 (abhängig von deiner Major-Version), setChannel() funktioniert anders und deutlich schneller:

  1. Backend-Validierung (read-only): Eine Anfrage wird an das Capgo-Backend gesendet, um zu validieren, ob der Channel erlaubt ist
  2. Update des lokalen Speichers: Wenn die Validierung erfolgreich ist, wird der Channel im lokalen Speicher des Geräts gespeichert
  3. Sofortige Wirkung: Der nächste Update-Check nutzt sofort den neuen Channel

Bisher wurde setChannel() speicherte die Channel-Überschreibung in der Backend-Datenbank (wie bei Dashboard- oder API-Änderungen). Geräte mussten auf die Backend-Replikation warten (bis zu 2 Minuten), bevor der neue Channel erkannt wurde. Das neue Verhalten liest nur aus dem Backend (zur Validierung) und speichert lokal, wodurch Channel-Wechsel sofort erfolgen.

Kompletter Channel-Switching-Flow

Für ein besseres Nutzererlebnis möchtest du in der Regel mehr tun, als nur den Channel zu wechseln und auf den nächsten App-Neustart zu warten. Ein gängiger Ansatz besteht darin, sofort nach Updates zu suchen, diese bei Verfügbarkeit herunterzuladen und die App neu zu laden, damit der Nutzer direkt auf dem Update des gewählten Channels landet.

Ein typischer Ablauf sieht so aus:

  1. Channel wechseln (setChannel)
  2. Nach einem Update suchen (getLatest)
  3. Update abrufen und anwenden (download, set oder next)
  4. App bei Bedarf neu laden (reload)

Hier ist ein vollständiges Beispiel:

import { CapacitorUpdater } from '@capgo/capacitor-updater';

async function switchChannel(selectedChannel: string) {
  try {
    // 1. Set the updates channel (with optional auto-update trigger)
    await CapacitorUpdater.setChannel({
      channel: selectedChannel,
      triggerAutoUpdate: true // Immediately check for updates
    });

    console.log(`Switched to channel: ${selectedChannel}`);

    // If you want more control, handle the update manually:
    // const latest = await CapacitorUpdater.getLatest();
    // if (latest.url) {
    //   const bundle = await CapacitorUpdater.download({
    //     url: latest.url,
    //     version: latest.version
    //   });
    //   await CapacitorUpdater.set({ id: bundle.id });
    // }

  } catch (error) {
    console.error('Failed to switch channel:', error);
  }
}

// Switch to the beta channel
switchChannel('beta');

Wie du diesen Flow strukturierst, liegt bei dir. Du kannst die Schritte über mehrere Interaktionen aufteilen oder sie alle auf einmal ausführen. Wie auch immer du den Flow aufbaust: Berücksichtige Fehler. Netzwerkprobleme oder ein ungültiger Channel können verhindern, dass ein Update angewendet wird.

Die einzige Voraussetzung: Self-Assignment aktivieren

Das ist alles, was du tun musst, um Channel Surfing zu aktivieren. Bevor Ihre App auf einen Channel umschalten kann, setChannel(), müssen Sie die Selbstzuweisung für diesen Channel im Capgo-Dashboard aktivieren:

  1. Besuchen Sie die Kanäle Abschnitt in deinem Capgo Dashboard
  2. Klicke auf den Namen des Kanals, den du verwalten möchtest
  3. Aktivieren „Geräten erlauben, sich selbst zuzuordnen“
  4. Änderungen speichern

Self-Assignment in den Kanaleinstellungen aktivieren

Das ist alles. Keine Config-Änderungen in deiner App nötig. Keine defaultChannel ...muss konfiguriert werden. Aktiviere einfach Self-Assignment für die Channels, zwischen denen Nutzer wechseln können.

Wenn diese Einstellung deaktiviert ist, schlägt jeder Versuch, setChannel() diesen Kanal aufzurufen, fehl und das channelPrivate Event wird ausgelöst.

Verfügbare Kanäle auflisten

Du kannst die Liste der verfügbaren Channels für das Self-Assignment abrufen:

const { channels } = await CapacitorUpdater.listChannels();

console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI

Es werden nur Channels zurückgegeben, bei denen Self-Assignment aktiviert ist.

Den aktuellen Channel abrufen

Prüfe, welchem Channel das Gerät aktuell zugewiesen ist:

const { channel } = await CapacitorUpdater.getChannel();

console.log('Current channel:', channel);

Zurück zum Default Channel

Um den Channel-Override zu entfernen und zum Default zurückzukehren:

await CapacitorUpdater.unsetChannel({});

Dadurch wird die Verknüpfung des Geräts mit einem speziell zugewiesenen Channel aufgehoben, sodass es auf den defaultChannel in Ihrer Konfiguration oder dem Cloud-Standard.

So testest du das Channel-Surfing

Um das Channel-Surfing live zu sehen, benötigst du einen Release-Build – der @capgo/capacitor-updater API ist für Release-Builds gedacht. In Debug-Builds lädt die App JavaScript meist von einem Development-Server, wodurch der normale Update-Flow umgangen wird.

Voraussetzungen

Die einzige Voraussetzung für Channel Surfing ist das Aktivieren von „Geräten erlauben, sich selbst zuzuordnen“ auf jedem Channel, zu dem ein Wechsel erlaubt sein soll. In deiner App sind keine Config-Änderungen nötig.

Einen Test-Build erstellen

Erstelle deinen Build wie gewohnt:

bun run build && npx cap sync

Erstelle dann deine Native Builds mit Xcode oder Android Studio oder nutze deine CI/CD-Pipeline. Die App startet auf dem Channel, der in deinem Capgo Dashboard als Cloud-Standard gesetzt ist.

Updates auf verschiedene Channels veröffentlichen

Sobald die App installiert ist, veröffentliche Updates auf verschiedene Channels:

# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview

# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production

Navigiere von dort zur Channel-Surfing-UI in deiner App und löse den Channel-Wechsel aus. Die App sollte das Update vom gewählten Channel abrufen und mit dem neuen Update neu laden.

Eine Channel-Switcher-UI bauen

Channel Surfing ist meistens etwas, das du nur einer begrenzten Nutzergruppe zugänglich machen willst, nicht allen Nutzern deiner App. Du könntest zum Beispiel einen Button nur für authentifizierte Mitarbeiter bereitstellen, der die App auf den Preview-Channel umschaltet.

Hier ein Beispiel für eine React-Komponente für einen Channel Switcher:

import { useState, useEffect } from 'react';
import { CapacitorUpdater } from '@capgo/capacitor-updater';

export function ChannelSwitcher() {
  const [currentChannel, setCurrentChannel] = useState<string>('');
  const [availableChannels, setAvailableChannels] = useState<string[]>([]);
  const [isLoading, setIsLoading] = useState(false);

  useEffect(() => {
    loadChannelInfo();
  }, []);

  async function loadChannelInfo() {
    const { channel } = await CapacitorUpdater.getChannel();
    setCurrentChannel(channel || 'default');

    const { channels } = await CapacitorUpdater.listChannels();
    setAvailableChannels(channels.map(c => c.name));
  }

  async function handleChannelSwitch(channel: string) {
    setIsLoading(true);
    try {
      await CapacitorUpdater.setChannel({
        channel,
        triggerAutoUpdate: true
      });
      setCurrentChannel(channel);
      // App will update in background or on next restart
    } catch (error) {
      console.error('Failed to switch channel:', error);
    } finally {
      setIsLoading(false);
    }
  }

  return (
    <div>
      <p>Current channel: {currentChannel}</p>
      <div>
        {availableChannels.map(channel => (
          <button
            key={channel}
            onClick={() => handleChannelSwitch(channel)}
            disabled={isLoading || channel === currentChannel}
          >
            Switch to {channel}
          </button>
        ))}
      </div>
    </div>
  );
}

OTA-Update-Fallstricke

Keines davon ist spezifisch für das Channel-Surfing, aber es wird schnell deutlich, sobald man zur Laufzeit zwischen Channels wechselt.

Runtime-Version-Mismatches

Updates in Capgo sind an native App-Versionen gebunden. Wenn die native Version eines Updates nicht mit der nativen Version der installierten App übereinstimmt, wird das Update weder heruntergeladen noch angewendet. Beim Channel-Surfing zeigt sich das typischerweise dadurch, dass die App den Channel wechselt, aber kein Update angewendet wird, obwohl eines auf diesem Channel existiert.

Das bedeutet in der Regel, dass das Update aus einer anderen nativen Version der App veröffentlicht wurde. Stelle sicher, dass das Bundle deines Channels mit der auf dem Gerät installierten nativen Version kompatibel ist.

Updates entfernen oder rückgängig machen

Wenn eine App bereits ein Update für einen Channel heruntergeladen hat, entfernt das Löschen dieses Updates aus dem Capgo-Dashboard es nicht von Geräten, die es bereits installiert haben. Das Löschen verhindert nur zukünftige Downloads.

Die zuverlässigste Methode, ein fehlerhaftes Update rückgängig zu machen, besteht darin, ein bekanntes, stabiles Update auf denselben Channel zu veröffentlichen. Dies erstellt ein neues Update an der Spitze der Channel-Historie, das Clients als neueste Version behandelt und anwendet.

Capgo bietet zudem einen Rollback-Mechanismus, der Clients anweisen kann, ein vorheriges stabiles Update erneut anzuwenden oder auf das in der Build eingebettete Update zurückzufallen.

Überlegungen zur Datenmigration

Das Wechseln zwischen Channels ändert das JavaScript-Bundle, das die App ausführt. Wenn Ihre App von Migrationsprozessen oder Datenstrukturen abhängt, die zwischen Channels nicht kompatibel sind, können Hin- und Herwechseln zu Problemen führen.

Zum Beispiel: Wenn ein Beta-Update eine Datenbank-Migration anwendet, versteht die Produktionsversion möglicherweise das neue Schema nicht. Entwickler sollten sicherstellen, dass ihre Updates sicher zwischen Channels gewechselt werden können, oder das Wechseln bei Bedarf auf eine Richtung beschränken.

Warum Channel Surfing die mobile Iteration verbessert

Channel Surfing ist besonders nützlich, wenn Sie Änderungen schnell in einer Produktionsumgebung überprüfen müssen.

Schnelle Validierung

Stellen Sie sich einen dringenden Bugfix vor, der vor dem breiten Rollout validiert werden muss. Mit Channel Surfing kann die Änderung auf eine kleine Gruppe ausgewählter Nutzer beschränkt werden, die sie vor dem Produktivgang prüfen kann.

Stakeholder-Review

Ein Product Owner oder QA kann seine installierte Produktions-Build auf einen anderen Update-Channel umschalten, den Fix oder die Funktion verifizieren und nach Abschluss wieder zurückwechseln.

Effizienteres Testing

So lässt sich es leichter, nicht-technische Stakeholder in Review und Entscheidungsfindung einzubeziehen, während der Workflow reibungslos bleibt. Eine einzelne Produktions-Build wird zu einem flexiblen Werkzeug für Testing, Feedback und Validierung.

Anwendungsfälle

  • QA-Testing: QA-Team zwischen Feature-Branches wechseln lassen
  • Beta-Programme: Nutzer wählen den Beta-Channel für Early Access
  • Stakeholder-Review: Product Owner prüfen Änderungen vor dem Release
  • A/B-Testing: Nutzer für Experimente verschiedenen Channels zuweisen
  • Debugging: Einen bestimmten Nutzer zur Fehlerdiagnose in einen Debug-Channel verschieben

Vergleich: Methoden für den Channel-Wechsel

Methode Effektzeit Speicherort Anwendungsfall
setChannel() vom Plugin Sofort Nur auf dem Gerät (lokal) In-App-Channel-Wechsel durch User
Geräte-Override im Dashboard Bis zu 2 Min. Backend-Datenbank Admin-initiierte Änderungen für bestimmte Geräte
API Channel-Zuweisung Bis zu 2 Min. Backend-Datenbank Automatisierte Backend-Integrationen

Für die beste User Experience beim Erstellen von Channel-Switching-UIs solltest du immer das Plugin nutzen setChannel() Methode.

Best Practices

  1. Zugriff einschränken: Channel-Surfing ist meist für den internen Gebrauch – mache es nicht für alle User zugänglich
  2. Fehler behandeln: Behandle Fehler beim Channel-Wechsel immer sauber
  3. Kompatibilität prüfen: Stelle sicher, dass Updates auf verschiedenen Channels mit der installierten nativen Version kompatibel sind
  4. Channels dokumentieren: Dokumentiere klar, wofür jeder Channel gedacht ist
  5. Nutzung überwachen: Verfolge, welche Geräte auf welchen Channels sind – zum Debuggen

Ressourcen

Fazit

Channel Surfing verändert, wie du an deiner Capacitor App iterierst. Statt Production-Builds als feste Endpunkte zu behandeln, werden sie zu flexiblen Tools für Tests, Validierung und schnelle Iteration.

Mit dem Instant-Channel-Switching in den aktuellen Plugin-Versionen ist das Erlebnis jetzt nahtlos – Nutzer können den Channel wechseln und erhalten sofort Updates aus dem neuen Channel, ohne Wartezeit.

Egal, ob du Bugfixes mit Stakeholdern validierst, Beta-Programme durchführst oder Probleme mit bestimmten Nutzern debuggst: Channel Surfing gibt dir die Flexibilität, das richtige Update zur richtigen Zeit an den richtigen Nutzer auszuliefern.

Weiter geht's mit Channel Surfing für Capgo: So wechselst du Update-Channels zur Laufzeit

Wenn du es nutzt Channel Surfing mit Capgo: Update-Channels zur Laufzeit wechseln um Channel-Routing und Staged Rollout zu planen, verbinde es mit Kanäle für die Implementierungsdetails in Channels, Kanäle für die Implementierungsdetails in Channels, Kanäle für die Implementierungsdetails in Channels, Beta-Testing-Lösung für den Produkt-Workflow in der Beta-Testing-Lösung, und Version-Targeting-Lösung für den Produkt-Workflow in der Version-Targeting-Lösung.

Live-Updates für Capacitor-Apps

Wenn ein Bug im Web-Layer live ist, liefere den Fix über Capgo aus, statt Tage auf die App-Store-Freigabe zu warten. Nutzer bekommen das Update im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Neues aus unserem Blog

Capgo gibt dir die besten Insights, um eine wirklich professionelle Mobile App zu erstellen.