序言
当你开始享受 Capgo 的更新系统时,就像我对我的应用程序一样,你会开始感到“如果我想要更多?”的感觉
我也感到了这种感觉,但由于我是 Capgo 的制造者,所以我能够进行查看!
由于所有内容都是开源的,所以你也有这个权力 :)
在 Capacitor 应用分发过程中,我遇到的下一个痛点是让其他团队成员测试更新!
使用 TestFlight,问题变得简单,邀请人们加入你的团队并让他们了解如何获取它的过程是耗时的!
每次向 Apple 发送更新时,你都有一个随机的机器人审查过程,可能需要 5 分钟或 5 小时,你永远不知道。
我经常因为这个原因推迟了我的演讲……
而对于 Google 来说,这甚至更糟糕,我的生活中最大的谜团是,发布生产版本只需要不到 2 小时,但发布闭 beta 版本需要 1–2 天。
解决方案
为了解决这个问题,我在 Capgo 中创建了 Channel 系统。
npx @capgo/cli@latest bundle upload -c production 如果你设置了生产频道为默认频道,那么版本将更新到所有用户。
如果你这样做了,那么版本将落在一个不同的频道上,这可以在 __CAPGO_KEEP_0__ 中自动化。 npx @capgo/cli@latest bundle upload -c development 在 __CAPGO_KEEP_0__ 中,可以自动化频道更新的过程。 在 GitHub 中,可以自动化频道更新的过程。.
然后您有两种方式让用户从频道获取更新
超级自动方式
当您不想为频道设置创建自己的后端时,这可以很快实现。
只需允许其中一个频道自行设置即可。

然后在您的Ionic应用程序的code中添加此项,为了获得最佳体验,请在用户点击“注册beta”按钮后使用。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })
手动方式
这对于您的内部团队来说很快可以实现。 允许用户从应用程序中复制设备ID并将其发送给您手动,这code将有助于您获取它:
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
在应用程序中隐藏一个按钮,或者只向已连接的用户显示按钮,例如,通过角色。 admin 然后在Web应用程序或原生应用程序__CAPGO_KEEP_0__中连接,作为应用程序管理员,选择您的应用程序,单击设备列表。
Then Go to the Web app or native app Capgo, connect as app admin, select your app, click on the device list.
允许用户从应用程序中复制设备ID并将其发送给您手动,这__CAPGO_KEEP_0__将有助于您获取它: development请让您的团队成员再次打开应用程序,等待 30 秒,然后打开关闭。
他应该获得您的版本。
自动方式
这对您的 beta 测试者来说可能很有用,但这需要更长的时间来实现。
与手动方式相同,您必须获取设备 ID
import { CapacitorUpdater } from '@capgo/capacitor-updater'
const deviceId = await CapacitorUpdater.getDeviceId()
但这次您必须自动将其发送到您的后端,我让您决定如何做。
我只会建议您将其存储在数据库中,这将使您的生活更轻松。
然后在您的后端,您必须将其发送到 Capgo 后端。以下是两个 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)
}
然后只需将您的设备 ID 发送到请求正文中,到已部署的 URL 中使用 POST 方法添加和 DELETE 方法删除。
在此配置后,请尝试在您的应用程序中添加一个按钮以选择频道,并在 Web 应用程序中检查是否已设置。
您也可以发送 null 删除覆盖
如果您需要程序检查设备上的覆盖设置,
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())