您是否曾经希望能够直接将更改发送给特定用户,让他们能够立即查看和反馈?而无需要求他们下载并安装来自TestFlight或Google Play的新版本?
我曾经有客户要求我快速实施改进,但将结果传递给他们以验证意味着要将更新发送给所有用户(对于实验性更改而言风险较大)或创建一个专门为客户的单独版本(对我们双方来说是一项繁琐任务)。
缺乏的是灵活性。开发者希望能够为不同用户组提供不同的更新,例如非技术人员、QA或整个用户群(在适当时)。
生产版本无法切换到工作版本,收集反馈,然后返回生产。
That’s what 频道切换 使得
app 安装在用户设备上的可以在运行时切换更新频道,
Update channels are how Capgo targets updates to specific builds. Each build is associated with a channel, and that channel determines which updates it will receive.
了解更新频道 preview 更新频道是__CAPGO_KEEP_0__如何针对特定构建的更新目标的方式。每个构建都与一个频道相关联,而该频道决定它将接收哪些更新。 production例如,您可以在
Channels in Capgo allow you to:
- 用户。过去,切换频道需要安装不同的本机构建或通过控制台手动更改设备分配。
- __CAPGO_KEEP_0__中的频道允许您:
- 针对不同功能的特定用户群进行目标设置
- 创建beta测试计划
- 使用单个用户调试生产问题
如果您不熟悉更新频道, Capgo频道文档 对它们进行了更详细的介绍。
什么是频道浏览?
频道浏览允许安装的应用程序从不同更新流中拉取内容,而无需重新安装。已安装的应用程序可以在运行时切换更新频道,并且直到应用程序被卸载或切换到另一个频道为止,它将继续从新选择的频道接收更新。
在实践中,这意味着产品负责人或QA可以切换到 production 例如, preview 频道,尝试最新的更改。当他们完成测试时,他们切换回 production 再次。无需重新安装或创建单独的预览构建。
在背后,频道浏览通过让应用程序告诉更新客户端使用哪个频道来实现。该选择可以在运行时更改,并且直到它被清除或替换为止,才会持续有效。
How to Implement Channel Surfing
在开始尝试频道切换之前,需要先在项目中配置 Capgo Live Updates。具体步骤请参见 Capgo 快速入门指南.
频道切换所需的唯一设置是,在 Capgo 控制台中,允许设备自行关联每个频道 此外,不需要进行任何 code 配置修改
频道切换的核心是由一个 API 调用驱动的
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
该设置确定在查询 Capgo 更新时使用的频道 了解更多关于 setChannel API.
即刻频道切换 (v5.34.0+)
从插件版本 5.34.0、6.34.0、7.34.0 或 8.0.0 开始(取决于您的主版本) 频道切换的方式和速度都有了显著改进 setChannel() Instant Channel Switching (v5.34.0+)
- 后端验证 (只读): 发送一个请求到Capgo后端验证通道是否允许
- 本地存储更新: 如果验证通过,通道将保存到设备的本地存储
- 即刻生效: 下一次更新检查将立即使用新的通道
之前 setChannel() 将通道覆盖保存到后端数据库(如控制台或API更改)。设备需要等待后端复制(最多2分钟)才能识别新的通道。新行为只从后端读取(验证)并存储本地,导致通道切换即刻。
完整的通道切换流程
为了提供更好的用户体验,您通常希望做更多的事情,只是切换通道并等待下一次应用重启。一个常见的方法是立即检查更新,下载可用更新并重新加载应用程序,以便用户直接进入所选通道的更新。
典型的流程如下:
- 更改通道(
setChannel) - 检查更新(
getLatest) - 获取并应用更新(
download,set或next) - 如果需要重新加载应用(
reload)
完整示例:
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');
如何结构此流程取决于您。您可能会将这些步骤分散在多个交互中,或者一次性运行它们。无论如何结构流程,都要确保考虑到失败。网络问题或无效的频道都可能阻止更新被应用。
唯一的要求:启用自我赋值
这是启用频道浏览所需做的唯一事情。 在您的应用可以切换到使用 setChannel()的频道之前,必须在Capgo控制台中为该频道启用自我赋值:
- 前往 频道 在您的Capgo控制台中
- 点击您要管理的频道名称
- 启用 “Allow devices to self associate”
- 保存更改

完成。无需在应用程序中进行任何配置更改。无需设置。只需在您希望用户可以切换到的频道上启用自我分配。 defaultChannel 如果此设置被禁用,任何尝试使用此频道的调用都会失败,并且将触发事件。
列出可用频道 setChannel() __CAPGO_KEEP_0__ channelPrivate __CAPGO_KEEP_0__
__CAPGO_KEEP_0__
您可以获取自我分配的通道列表:
const { channels } = await CapacitorUpdater.listChannels();
console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI
仅返回自我分配已启用的通道:
获取当前通道
检查设备当前分配的通道:
const { channel } = await CapacitorUpdater.getChannel();
console.log('Current channel:', channel);
恢复默认通道
移除通道覆盖并恢复默认:
await CapacitorUpdater.unsetChannel({});
将设备从任何特定分配的通道中解除绑定,导致其回落到 defaultChannel 在您的配置或云端默认中。
如何测试通道漫游
要看到通道漫游的效果,您需要一个发布版 - 发布版的 @capgo/capacitor-updater API 是为发布版设计的。 在调试版中,应用通常从开发服务器加载 JavaScript,而不是正常的更新流程。
前提条件
The only requirement for channel surfing is enabling “允许设备自行关联” No config changes are needed in your app.
创建测试构建
Build your app as usual:
bun run build && npx cap sync
然后使用 Xcode 或 Android Studio 创建本机构建,或者使用您的 CI/CD pipeline。应用程序将在您的 Capgo 控制台中设置为云默认的通道上启动。
发布不同通道的更新
从那里,导航到应用程序中的通道浏览 UI 并触发通道切换。应用程序应从所选通道中获取更新并重新加载到新更新中。
# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview
# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production
构建通道切换器 UI
通道浏览通常是您希望将其限制于有限用户组,而不是向使用您的应用程序的所有用户公开。例如,您可能有一个按钮可供认证员工切换应用程序到预览通道。
以下是 React 组件的示例,用于通道切换器:
__CAPGO_KEEP_0__
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更新注意事项
这些并不是与频道浏览相关的,但在开始在运行时切换频道后,它们会变得很快变得明显。
运行时版本不匹配
在Capgo中,更新与原生应用版本绑定。如果更新的原生版本与安装的原生应用版本不匹配,更新将不会下载或应用。当频道浏览时,这通常会显示应用切换频道但没有应用更新,尽管在该频道上存在更新。
这通常意味着更新是从应用的不同原生版本发布的。确保频道的包与设备上安装的原生版本兼容。
删除或撤销更新
如果应用已经下载了频道的更新,删除该更新从Capgo控制台中不删除已经下载的更新。删除只会停止 将来 下载。
撤销一个坏的更新的最可靠方法是发布一个已知的好更新到同一个频道。这会在频道的历史中创建一个新的更新,客户端会将其视为最新版本并应用。
Capgo还提供了回滚机制,可以指示客户端重新应用一个以前稳定的更新或回退到构建中嵌入的更新。
数据迁移考虑因素
切换频道会改变应用程序运行的 JavaScript 包。如果您的应用程序依赖于迁移或数据形状,这些迁移或数据形状在不同频道之间不兼容,频繁切换可能会导致问题。
例如,如果 beta 更新应用了数据库迁移,生产版本可能无法理解新的模式。开发人员应确保更新在切换频道时保持安全,或者在需要时限制切换到一方向。
频道冲浪如何改善移动迭代
频道冲浪在需要快速在生产环境中查看更改时特别有用。
快速验证
想象一下,需要在广泛发布之前验证紧急修复。通过频道冲浪,改变可以被隔离到一小组指定用户,他们可以在发布到生产环境之前验证它。
利益相关者审查
产品负责人或 QA 可以切换到另一个更新频道的已安装生产构建,验证修复或功能,然后切换回原来的频道。
流程化测试
这使得非技术利益相关者能够参与审查和决策,同时保持流程的顺畅。一个生产构建变成了一个灵活的工具,用于测试、反馈和验证。
用例
- QA 测试: QA团队可以在不同功能分支之间切换
- Beta Programs: 用户可以预先获取最新功能
- Stakeholder Review: 产品负责人可以在发布前预览更改
- A/B Testing: 将用户分配到不同频道进行实验
- Debugging: 将特定用户切换到调试频道以诊断问题
Comparison: Channel Change Methods
| Method | Effect Time | __CAPGO_KEEP_0__ 频道分配 | 使用场景 |
|---|---|---|---|
setChannel() 从插件 |
即刻 | 仅设备(本地) | 在应用内用户触发的频道切换 |
| 设备控制台 | 至多 2 分钟 | 后端数据库 | 管理员针对特定设备的更改 |
| API 频道分配 | 至多 2 分钟 | 后端数据库 | 自动化后端集成 |
在构建频道切换UI时,为了获得最佳用户体验,请始终使用插件的 setChannel() 最佳实践
限制访问
- :频道浏览通常用于内部使用-不要将其暴露给所有用户处理错误
- :在切换频道时始终优雅地处理错误验证兼容性
- :确保不同频道的更新与安装的原生版本兼容文档频道
- __CAPGO_KEEP_0____CAPGO_KEEP_0__
- 监控使用情况__CAPGO_KEEP_0__
资源
结论
Channel surfing transforms how you can iterate on your Capacitor app. Instead of treating production builds as fixed endpoints, they become flexible tools for testing, validation, and rapid iteration.
随着最近插件版本中引入的即时频道切换功能,体验现在变得更加流畅 - 用户可以切换频道并立即从新频道接收更新,而无需等待任何时间间隔。
无论您是在与利益相关者验证bug修复、运行beta测试程序还是调试特定用户的问题,频道切换都为您提供了灵活性,能够在正确的时间向正确的用户发送正确的更新。
从 Channel Surfing 中继续进行 Capgo: 如何在运行时切换更新频道
如果您正在使用 Channel Surfing 中继续进行 Capgo: 如何在运行时切换更新频道 以计划频道路由和阶段性发布,连接它与 频道 频道 频道 频道 Beta 测试解决方案 用于 Beta 测试解决方案中的产品工作流程 用于 Beta 测试解决方案中的产品工作流程 用于 Beta 测试解决方案中的产品工作流程 版本目标解决方案 为版本目标解决方案中的产品工作流程