Vorwort
Wenn du, wie ich mit meinen Apps, das Update-System von Capgo zu schätzen beginnst, kommt dir irgendwann der Gedanke: „Was wäre, wenn ich mehr könnte?“
Mir ging es genauso, aber da ich der Macher von Capgo bin, konnte ich mir das Ganze genauer ansehen!
Da alles Open Source ist, hast du diese Möglichkeit auch :)
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 in dein Team zu holen und ihnen klarzumachen, wie sie es bekommen, kostet viel Zeit!
Und natürlich läuft bei jedem Submit an Apple dieser zufällige Review-Prozess durch einen Bot, der mal 5 Minuten oder mal 5 Stunden braucht – man weiß es nie.
Dadurch wurde meine Präsentation schon oft verzögert…
Bei Google ist es sogar noch schlimmer – das große Rätsel meines Lebens: Eine Production-Version zu releasen dauert unter 2 Stunden, ein Closed-Beta-Release aber 1–2 Tage.
Lösung
Um das zu lösen, habe ich das Channel-System in Capgo gebaut.
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 landet die Version in einem anderen Channel, das lässt sich automatisieren in GitHub Action.
Dann hast du 2 Wege, wie User die Updates aus dem Channel bekommen
Der vollautomatische 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.
Bei dieser Variante musst du nur einen deiner Channels so einstellen, dass er auf 'self' gesetzt werden kann.

Füge dies dann in der code deiner Ionic-App hinzu. Am besten nutzt du es, nachdem der User auf einen Button wie „Für Beta registrieren“ geklickt hat.
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 deiner App kopieren und sie dir manuell schicken; dieser code hilft dir dabei:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Verstecke einen Button irgendwo in deiner App oder zeige ihn nur eingeloggten Usern mit einer admin Rolle an, zum Beispiel.
Gehe dann zur Web-App oder Native App Capgo, logge dich als App-Admin ein, wähle deine App und öffne die Geräteliste.
Gib dann die deviceID in die Suchleiste ein, klicke auf das gefundene Gerät, klicke auf den Channel-Link und wähle 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 deine Beta-Tester nützlich sein, ist aber aufwendiger umzusetzen.
Wie beim manuellen Weg musst du die deviceID ermitteln.
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Aber dieses Mal musst du es automatisch an dein Backend senden – wie du das genau umsetzt, überlasse ich dir.
Ich empfehle dir, sie in einer Datenbank zu speichern, um dir später die Arbeit zu erleichtern.
Dein Backend muss sie dann 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 die device_id einfach per POST im Body an die deployte URL, um sie hinzuzufügen, oder per DELETE zum Löschen.
Nach der Konfiguration kannst du einen Button in deiner App zum Opt-in für den Channel einbauen und prüfen, ob dies in der Web-App übernommen wurde.
Du kannst auch senden null um das Override zu entfernen
Wenn du programmatisch prüfen musst, welches Override auf einem Gerät gesetzt ist, kannst du dieselbe URL abrufen
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: Wie du ein bestimmtes Update an einen Nutzer oder eine Gruppe sendest
Wenn du es nutzt Spezifische Updates an einzelne User oder Gruppen senden 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.