跳转至正文

白标与多租户应用

用一个代码库发布所有租户的应用

让每个租户、品牌或门店拥有自己的 Capgo channel。更新某个租户的 Web 层时不影响其他租户,并使用 Capgo Build 构建品牌化原生壳。

1 套代码库
每个租户共享同一个 Capacitor App
每个租户 1 个 channel
独立的 bundle、历史记录与回滚
云端 build
Android flavors 与 iOS schemes

终端

Capacitor 应用

租户

通道

原生

Capgo 构建

问题

当每个客户都变成一个分支,白标应用就难做了

品牌变体迅速激增

每个客户都想要自己的 Logo、主题、功能集、内容和上线日期。各自开分支,这些需求就会变成每次发版都要承担的维护成本。

应用商店审核拖慢租户修复

某个租户的菜单错别字或 onboarding 修复,不该等新二进制包和应用商店审核——通常要 24–48 小时,有时更久。

全局发布太一刀切

一次全局更新可能同时搞砸所有品牌。每个品牌单独开分支又会拖慢整个团队。你需要为每个租户提供独立的发布通道。

常见配置

Capgo 应用中的白标方案示例

客户品牌定制的 SaaS 应用

每个企业客户都拥有专属的 Logo、主题、 onboarding 文案和功能集,并通过各自独立的 channel 获取更新。

加盟商或门店应用

每家餐厅、诊所、健身房或分店都可以通过 Live Update 获取本地菜单、素材和活动页面,无需重新发布二进制文件。

小程序市场

宿主应用列出工作区或小程序,并在运行时通过 setChannel() 将设备切换到匹配的 Capgo channel。

解决方案

单一 App Shell,每个租户拥有独立发布通道

Native shell 保持共享,每个租户的 Web 层通过各自的 channel 进行更新。

每个租户专属 channel

每个租户、加盟商或工作区都拥有一个 channel。你可以向单个租户或所有租户发布更新,并能独立回滚某个 channel 而不影响其他租户。

Channels 文档

运行时自行分配

开启自行分配后,App 会调用 setChannel() 将设备加入其租户的 Channel。Capgo 仍会在每次检查更新时验证 Channel。

setChannel() 参考

跨 Shell 的版本定向

租户通常运行不同的 Native 版本。可以按 Channel 阻止大版本更新,或设置最低 Native 版本,让 Bundle 只到达能运行它的 Shell。

版本定向文档

Capgo 为品牌化 Shell 构建

在云端构建每个 Android flavor 或 iOS scheme,并上传到应用商店。对于每周都会变化的 Web 层,使用 Live Updates。

构建选项

工作原理

白标团队如何用 Capgo 交付

一套 Capacitor 代码库,每个租户一个 channel。命令和 code 来自 Capgo CLI 及 updater 文档。

  1. 为每个租户创建 channel

    每个租户都有自己的 channel、bundle 和历史记录。支持自助分配,让应用能把设备切到该 channel。

    npx @capgo/cli@latest channel add acme com.example.app --self-assign
    npx @capgo/cli@latest channel add globex com.example.app --self-assign
    Channels 文档
  2. 上传每个租户的 bundle

    使用租户的主题和配置构建 web 层,然后只上传到该租户的 channel。其他租户的当前 bundle 保持不变。

    npx @capgo/cli@latest bundle upload --channel acme
    npx @capgo/cli@latest bundle upload --channel globex
    Rollback 文档
  3. 登录时将设备切换至所属租户

    登录后,调用 setChannel() 并传入该租户的 channel。选择会保存在设备上,并在下次更新检查时生效。

    import { CapacitorUpdater } from '@capgo/capacitor-updater'
    
    await CapacitorUpdater.setChannel({
      channel: tenant.channel,
      triggerAutoUpdate: true,
    })
    setChannel() 参考
  4. 在云端构建品牌化外壳

    当租户需要专属的应用商店详情、图标或权限时,使用 Capgo Build 构建对应的 flavor 或 scheme。无需自备 Mac。

    npx @capgo/cli@latest build request com.acme.app --platform android --android-flavor acme
    npx @capgo/cli@latest build request com.acme.app --platform ios --ios-scheme Acme
    构建选项

使用 Capacitor 构建的应用

区域媒体与运营商应用共用一套核心,但需要本地控制

区域性体育、娱乐及电信品牌可以复用统一的应用基础,同时针对不同品牌或国家灵活调整排期、营销活动、支持服务及特定市场的内容。

Tigo Sports Guatemala 应用图标 体育

Tigo Sports Guatemala

区域性体育媒体应用,需要对赛程和本地内容进行市场管控。

Google Play 安装量
160万
应用商店评分
3.3
TV SPIELFILM - TV-Programm 应用图标 娱乐

TV SPIELFILM - 电视节目表

内容展示会根据市场和节目时段而变化的娱乐指南。

Google Play 安装量
12.1M
应用商店评分
4.4
Mi Orange 应用图标 工具

我的橙色

在共享账户模式下,仍需本地化产品及支持内容的运营商 App。

Google Play 安装量
930 万
应用商店评分
4.2

客户证言

使用 Capgo 交付的团队怎么说

5.0/5 开发者团队评分 9,400+ 团队 查看评价

no-tone @ Webincode

开发者,Webincode

“能把特定 Device ID 加入指定分组,并只向这些分组推送更改,太救命了。”

Nate van Jole

CTO, 私有

“配置不到一天就完成了。基于 Channel 的发布让我能先在自己的设备上测试,再推给生产用户。”

Sergiu S 的肖像

Sergiu S

drivolino GmbH 首席开发者

“Capgo Capacitor Updater 插件彻底改变了我们的更新发布方式。过去需要几天的工作,现在只需几分钟。”

常见问题

白标常见问题

团队在单个 Capgo 环境上运行多个品牌前常问的问题。

每个品牌都需要一个独立的 Capgo App 吗?

只有当每个品牌在应用商店都有独立的 App ID 时才需要。一个商店 App 服务多个租户时,就是一个 Capgo App,每个租户一个 channel。独立的品牌商店 App 则是独立的 Capgo App,各自拥有自己的 channel。

Channels 文档

用户可以在 App 内切换租户吗?

可以。如果租户的 channel 允许自行分配,只需在 App 中调用 setChannel() 即可。在当前插件版本中,该选择会存储在设备上,并在下次检查更新时生效。

setChannel() 参考

如果部分租户还在用较旧的 native 版本怎么办?

使用版本定向(version targeting)。在 channel 上拦截大版本更新,或为 bundle 设置最低 native 版本,让旧版 shell 仍能运行可用的 bundle。

版本定向文档

我们能否在不影响其他租户的情况下,单独回滚某个租户?

可以。每个 channel 都会保留独立的 bundle 历史记录。您可以将某个租户的 channel 回滚到之前的 bundle,而其他 channel 则保持不变。

Rollback 文档

哪些内容仍需要通过应用商店发布?

应用名称、图标、权限、native plugins 以及 native code 都包含在二进制文件中。Capgo Build 可以构建每个 flavor 或 scheme,并将其上传至 App Store Connect 和 Google Play。

Capgo Build 文档

在您自己的应用中尝试租户 channel

在 14 天试用期间,请创建两个租户 channel,分别为其 upload 一个 bundle,并使用 setChannel() 在测试设备上进行切换。