Prefazione
Quando inizi a sfruttare il sistema di update di Capgo, come faccio io con le mie app, ti verrà naturale chiederti: "E se volessi avere più controllo?"
È successo anche a me, ma essendo il creatore di Capgo, ho potuto approfondire la questione!
Essendo tutto open-source, puoi farlo anche tu :)
Il prossimo problema che ho incontrato nel processo di distribuzione delle app Capacitor è far testare gli update ai colleghi!
Con TestFlight il problema è semplice: aggiungere persone al team e fargli capire come ottenerla richiede un sacco di tempo!
E ovviamente, ogni volta che invii ad Apple, devi affrontare la revisione casuale di un bot che può impiegare dai 5 minuti alle 5 ore, non si sa mai.
Molte volte la mia presentazione è stata ritardata proprio da questo...
E con Google è anche peggio, il grande mistero della mia vita: rilasciare una versione in produzione richiede meno di 2 ore, ma rilasciare una beta chiusa richiede 1-2 giorni.
Soluzione
Per risolvere il problema, ho creato il sistema di Channel in Capgo.
npx @capgo/cli@latest bundle upload -c production aggiornerà tutti gli utenti (se il canale production è impostato come default)
Se lo fai npx @capgo/cli@latest bundle upload -c development allora la versione arriva su un canale diverso, e puoi automatizzarlo in azione GitHub.
In questo modo hai 2 modi per permettere agli utenti di ricevere gli update dal canale
Metodo super automatico
Può essere utile se non vuoi creare un tuo backend per impostare i canali: è rapido da implementare.
Con questo, l'unica cosa da fare è impostare uno dei tuoi canali su self.

Poi aggiungi questo nel code della tua app Ionic; per un'esperienza ottimale, usalo dopo che l'utente clicca su un pulsante come “registrati alla beta”
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })
Metodo manuale
Utile per il tuo team interno, è rapido da implementare. Permetti agli utenti di copiare il deviceID dalla tua app e inviartelo manualmente; questo code ti aiuterà a ottenerlo:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Nascondi un pulsante da qualche parte nella tua app, oppure mostralo solo agli utenti connessi con un admin ruolo, per esempio.
Poi vai su Capgo della web app o della native app, accedi come admin dell'app, seleziona la tua app e clicca sulla lista dei device.
Poi inserisci il deviceID nella barra di ricerca, clicca su quello trovato, poi clicca sul link Channel e scegli il development, chiedi al tuo collega di riaprire l'app, attendi 30 sec e apri e chiudi.
Dovrebbe ricevere la tua versione.
Metodo automatico
Può essere utile per i tuoi beta tester, ma richiede più tempo da implementare.
Come nel metodo manuale, devi recuperare il deviceID
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
Ma questa volta devi inviarlo automaticamente al tuo backend; decidi tu come farlo.
Ti suggerisco solo di salvarlo in un database, così ti semplificherai la vita in seguito.
Poi, dal tuo backend, dovrai inviarlo anche al backend di Capgo. Qui sotto due esempi code:
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)
}
E invia semplicemente il tuo device_id nel body all'URL deployato, con POST per aggiungere e con il metodo DELETE per eliminare.
Una volta configurato, prova ad aggiungere un pulsante nella tua app per l'opt-in al canale e controlla nella web app se è stato impostato.
Puoi anche inviare null per rimuovere l'override
Se devi verificare via codice quale override è impostato su un dispositivo, puoi consultare lo stesso URL
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())
Torna a Come inviare un update specifico a un utente o a un gruppo
Se stai usando Come inviare un aggiornamento specifico a un utente o a un gruppo per pianificare il routing dei canali e il rollout graduale, connettilo a Canali per i dettagli di implementazione nei Channels, Canali per i dettagli di implementazione nei Channels, Canali per i dettagli di implementazione nei Channels, Soluzione Beta Testing per il workflow di prodotto nella Soluzione Beta Testing, e Soluzione Version Targeting per il workflow di prodotto nella Soluzione Version Targeting.