您是否曾经希望能够直接将更改发送给特定用户进行他们的即时审阅和反馈 - 而不必要求他们下载和安装来自TestFlight或Google Play的新版本?
我曾经有客户要求改进,我能够快速实施,但将结果传递给他们以验证意味着将更新发送给所有用户(对实验性更改来说风险很大)或为客户创建一个单独的构建(对我们来说都是一个麻烦”。
开发者想要能够为不同用户组提供不同的更新,例如非技术人员、QA或整个用户基数在适当时。
没有办法让生产构建在工作中切换到版本、收集反馈,然后返回到生产。
这就是 频道浏览 使
频道浏览
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 。在过去,切换频道需要安装不同的本机构建或通过控制台手动更改设备分配。 production频道在 __CAPGO_KEEP_0__ 中允许您:
Channels 在 Capgo 中允许您:
- 通过将用户分配到不同的频道来进行A/B测试
- 逐渐推出新功能
- 创建beta测试计划
- 使用单独用户来调试生产问题
- 如果您不熟悉更新频道,__CAPGO_KEEP_0__ 频道文档
提供了更多详细信息。 Capgo频道文档 Run A/B tests by assigning users to different channels
什么是频道切换?
频道切换允许安装的应用程序从不同的更新流中拉取而无需重新安装。安装的应用程序可以在运行时切换更新频道,并且它将继续从新选择的频道接收更新,直到应用程序被卸载或切换到另一个频道。
在实践中,这意味着产品负责人或QA可以切换到 production 频道,尝试最新的更改。当他们完成测试时,他们切换回 preview 频道。没有重新安装或单独的预览构建的需要。 production 在背后,频道切换通过让应用程序告诉更新客户端使用哪个频道来实现的。这个选择可以在运行时更改,并且直到它被清除或替换为止保持有效。
如何实现频道切换
在尝试频道切换之前,您的项目需要配置为__CAPGO_KEEP_0__ Live Updates。要设置,请遵循
Capgo快速入门指南 频道切换所需的唯一设置是在Capgo控制台中为每个要切换到的频道启用“允许设备自我关联”。.
此外,不需要Capgo进行任何更改或配置修改。 code
At its core, channel surfing is driven by a single API call:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
当查询Capgo更新时,使用此设置的频道。 Learn more about the setChannel API.
即刻频道切换 (v5.34.0+)
从插件版本 5.34.0、6.34.0、7.34.0 或 8.0.0 开始 (根据您的主要版本) setChannel() 在 Capgo 中,频道切换的方式与传统的方式有很大不同,而且速度也更快。
- 后端验证(只读): 发送一个请求到Capgo后台验证通道是否允许
- 本地存储更新如果验证通过,频道将会被保存到设备的本地存储中
- 即刻生效下一次更新检查将立即使用新的频道
之前 setChannel() 保存的频道覆盖写入到后端数据库(如控制台或API更改)。设备需要等待后端复制(最多2分钟)才能识别新频道。新行为只从后端读取(用于验证)并在本地存储,使频道切换立即生效。
完整频道切换流程
为了提供更好的用户体验,您通常希望做更多的事情,只是切换频道并等待下一次应用重启。一个常见的方法是立即检查更新、下载可用更新并重新加载应用,以便用户直接进入所选频道的更新。
一个典型的流程如下:
- 切换频道(
setChannel) - 检查更新(
getLatest) - 获取并应用更新(
download,set或者next) - 上下文:HTML文本片段来自更长的Capgo UI字符串(父键`alternatives_cta_questions`)。页面/区域:Capacitor live-update alternatives比较页面。角色:长期营销或法律段落。见于:页面alternatives.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`alternatives_cta_questions`(Alternatives CTA Questions)。 | HTML文本片段来自更长的Capgo UI字符串(父键`appflow_cta_questions`)。页面/区域:Appflow比较/迁移营销复制。角色:长期营销或法律段落。见于:页面alternatives/ionic-appflow.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`appflow_cta_questions`(Appflow CTA Questions)。 | HTML文本片段来自更长的Capgo UI字符串(父键`capwesome_cta_questions`)。页面/区域:Capawesome比较页面。角色:长期营销或法律段落。见于:页面alternatives/capawesome.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`capwesome_cta_questions`(Capwesome CTA Questions)。 | HTML文本片段来自更长的Capgo UI字符串(父键`consulting_faq_subtitle`)。页面/区域:咨询服务页面。角色:段落标题或标语。见于:页面consulting.astro。保留Capgo产品/品牌和开发者术语的准确性。消息键`consulting_faq_subtitle`(Consulting FAQ Subtitle)。 | 页面/区域:Appflow比较/迁移营销复制。角色:短UI标签或导航项。见于:页面alternatives/ionic-appflow.astro,页面ionic-enterprise-plugins.astro,页面解决方案/ionic-enterprise-plugins.astro。消息键`appflow_plugins_or`(Appflow Plugins Or)。
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控制台中的部分
- 频道
- “允许设备自我关联” 保存更改
- 频道

就完成了。无需在您的应用程序中进行任何配置更改。无需 defaultChannel 设置。只需在您希望用户能够切换到的频道上启用自我分配。
如果此设置被禁用,则任何尝试使用此频道的调用都会失败,并且 setChannel() 事件将触发。 channelPrivate 列出可用的频道
您可以获取自我分配的频道列表:
这只会返回自我分配已启用的频道。
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,而不是使用正常的更新流程。
前提条件
通道漫游的唯一要求是启用 “允许设备自我关联” 在您希望允许切换的每个通道上。无需在您的应用中进行任何配置更改。
创建测试版本
按照正常流程构建您的应用:
bun run build && npx cap sync
然后使用 Xcode 或 Android Studio 创建您的本机构建,或者使用您的 CI/CD pipeline。应用程序将在您的 Capgo 控制台中设置的云默认频道启动。
发布到不同频道的更新
一旦应用程序安装完成,发布到不同频道的更新如下:
# 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 并触发频道切换。应用程序应从所选频道获取更新并重新加载到新更新中。
构建频道切换器 UI
频道浏览通常是您希望限制到特定用户组,而不是向所有使用您的应用程序的用户暴露的。例如,您可能有一个按钮可供认证员工切换到预览频道。
以下是 React 组件的示例,用于频道切换器:
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测试: 用户可以选择进入beta频道获取早期访问
- 利益相关者审查: 产品负责人可以预览发布前更改
- A/B测试: 分配用户到不同频道进行实验
- Debugging: Switch a特定用户到调试频道以诊断问题
比较:频道切换方法
| Method | 效果时间 | Persisted Where | 应用场景 |
|---|---|---|---|
setChannel() : 从插件 |
: 立即 | : 只在设备上 (本地) | 用户在应用内触发的频道切换 |
| 仪表盘设备覆盖 | 最多2分钟 | 后端数据库 | 管理员针对特定设备的更改 |
| API频道分配 | 最多2分钟 | 后端数据库 | 自动化后端集成 |
在构建频道切换UI时,为了获得最佳用户体验,请始终使用插件的 setChannel() 最佳实践
method.
- 限制访问: 通常情况下,频道切换功能是内部使用的,不要将其暴露给所有用户
- 处理错误在频道切换时,始终优雅地处理错误
- 验证兼容性确保不同频道的更新与安装的原生版本兼容
- 文档频道每个频道都有其特定的用途,需要清晰的文档记录
- 监控使用情况: 跟踪设备在哪些频道上运行以便调试
資源
结论
频道切换变革了您可以对 Capacitor 应用进行迭代的方式。 不再将生产构建视为固定的终点,它们变成了测试、验证和快速迭代的灵活工具。
随着最近插件版本中引入的即时频道切换功能,体验现在变得更加流畅 - 用户可以切换频道并立即从新频道接收更新,而无需等待任何时间。
无论您是否正在与利益相关者验证 bug 修复、运行 beta 程序还是调试特定用户的问题,频道切换都给您了灵活性来将正确的更新发送给正确的用户在正确的时间。
继续阅读频道切换的 Capgo: 如何在运行时切换更新频道
如果您正在使用 频道切换的 Capgo: 如何在运行时切换更新频道 来规划频道路由和分阶段发布,连接它与 频道 为Capgo频道切换机制的详细信息 频道 为Capgo频道切换机制的详细信息 频道 为Capgo频道切换机制的详细信息 context:Capgo发布频道功能名称。页面/区域:Capgo解决方案营销页面。角色:短UI标签或导航项。见于页面解决方案/白标签.astro。消息键`solutions_white_label_visual_cell2_value` (解决方案白标签视觉单元2值)。 Beta测试解决方案 为Beta测试解决方案中的产品工作流程 版本目标解决方案