Vorwort
Sobald du das Update-System von Capgo nutzt – so wie ich für meine Apps – wirst du dir irgendwann denken: „Was wäre, wenn ich mehr Kontrolle bräuchte?“
Diesen Gedanken hatte ich auch, aber da ich der Entwickler von Capgo bin, konnte ich direkt mal nachschauen!
Da alles Open-Source ist, hast auch du diese Power :)
Die nächste Hürde im Capacitor App-Distributionsprozess ist es, Teammitglieder dazu zu bringen, die Updates zu testen!
Bei TestFlight ist das Problem simpel: Leute ins Team zu holen und ihnen zu erklären, wie sie die App nutzen, kostet extrem viel Zeit!
Und natürlich hast du bei jedem Apple-Submit diesen unvorhersehbaren Review-Prozess durch einen Bot, der mal 5 Minuten oder mal 5 Stunden dauert.
Schon oft wurde meine Präsentation dadurch verzögert…
Bei Google ist es sogar noch schlimmer – ein echtes Rätsel: Eine Production-Version zu releasen dauert weniger als 2 Stunden, aber eine Closed Beta braucht 1–2 Tage.
Die Lösung
Um das zu lösen, habe ich das Channel-System in Capgo entwickelt.
npx @capgo/cli@latest bundle upload -c production wird an alle User verteilt (wenn der Production-Channel auf Default steht)
Wenn du das tust npx @capgo/cli@latest bundle upload -c development wenn die Version in einem anderen Channel landet, kann dies automatisiert werden in GitHub Action.
Dann hast du zwei Möglichkeiten, wie User die Updates aus dem Channel erhalten
Der superautomatische Weg
Das kann nützlich sein, wenn du kein eigenes Backend für das Channel-Management aufsetzen möchtest – so lässt es sich schnell implementieren.
Dafür musst du lediglich erlauben, dass einer deiner Channels auf „self“ gesetzt werden kann.

Füge dies dann in der code deiner Ionic App hinzu. Für die beste UX geschieht dies nach einem Klick auf einen Button wie „Beta-Teilnahme“.
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })
Manueller Weg
Ideal für dein internes Team und schnell umgesetzt. Lass User ihre deviceID aus der App kopieren und schick sie dir manuell. Dieser code hilft dir dabei:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Verstecke einen Button in deiner App oder zeige ihn nur angemeldeten Usern mit einer admin bestimmten Rolle an.
Gehe dann zur Web- oder Native App Capgo, logge dich als Admin ein, wähle deine App und öffne die Device-Liste.
Gib dann die deviceID in die Suchleiste ein, klicke auf das gefundene Ergebnis und dann auf den Channel-Link, um den development, bitte bitte deinen Teammate, die App erneut zu öffnen, 30 Sek. zu warten und sie dann zu schließen.
Er sollte deine Version erhalten.
Automatischer Weg
Das kann für Beta-Tester nützlich sein, ist aber aufwendiger zu implementieren.
Wie beim manuellen Weg musst du die deviceID abrufen.
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Diesmal musst du sie jedoch automatisch an dein Backend senden; wie du das umsetzt, überlasse ich dir.
Ich empfehle dir, sie in einer Datenbank zu speichern, das erleichtert dir später die Arbeit.
Danach musst du sie in deinem Backend auch an das Capgo Backend senden. Hier sind zwei code Beispiele:
NodeJS
import axios from 'axios'
await axios.post('https://api.capgo.app/device', {
app_id: 'YOUR_APP_ID',
device_id: 'DEVICE_ID',
channel: 'CHANNEL_NAME', // The name of the channel, or undefined if version_id provided
version_id: 'VERSION_NAME' // this is optional, if provide it will override the channel, that useful when you want to debug only one user.
}, {
headers: {
authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
}
})
Cloudflare
addEventListener('fetch', (event) => {
event.respondWith(
handleRequest(event.request).catch(
err => new Response(err.stack, { status: 500 })
)
)
})
async function handleRequest(request) {
const { pathname, method } = new URL(request.url)
const body = await request.json()
const newBody = JSON.stringify({
app_id: 'YOUR_APP_ID',
device_id: body.device_id,
channel: 'alpha'
})
const newUrl = new URL('https://api.capgo.app/device')
const options = {
headers: {
authorization: 'YOUR_API_KEY',
},
method: 'POST',
body: newBody
}
if (request.method === 'DELETE') {
// DELETE the channel link
options.method = 'DELETE'
return fetch(newUrl.toString(), options)
}
return fetch(newUrl.toString(), options)
}
Sende einfach deine device_id im Body per POST an die bereitgestellte URL, um sie hinzuzufügen, oder nutze die DELETE-Methode, um sie zu löschen.
Nach der Konfiguration kannst du einen Button in deiner App erstellen, um den Channel zu abonnieren, und in der Web App prüfen, ob dies gesetzt wurde.
Du kannst auch senden null um den Override zu entfernen
Wenn du programmatisch prüfen möchtest, welcher Override auf einem Gerät gesetzt ist, kannst du dieselbe URL aufrufen
import axios from 'axios'
const res = await axios.get('https://api.capgo.app/device?app_id=YOUR_APP_ID&device_id=DEVICE_ID', {
headers: {
authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
}
})
console.log('data', res.json())
Weiterlesen: So sendest du ein spezifisches Update an einen Nutzer oder eine Gruppe
Wenn Sie ... verwenden So sendest du ein spezifisches Update an einen Nutzer oder eine Gruppe nutzt, um das Channel-Routing und Staged Rollouts zu planen, verbinde es mit Channels für die Implementierungsdetails in Channels, Channels für die Implementierungsdetails in Channels, Channels 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.