跳过内容

常见问题

如果您在这里找不到答案,请问!您可以在GitHub上提交问题或在Capacitor社区论坛中提问。 Discord 工作。

什么是“code push”?

“code推送”是什么?

Code 推送,也被称为“即时更新”(Over-the-air updates,简称OTA),是一项云服务,允许Capacitor开发者在生产环境中将更新推送到他们的应用程序中。Capgo目前支持Android、iOS和Electron。

“Code 推送”是 React Native 社区中使用的部署功能的名称 微软Expo不支持Capacitor,两者都没有。

什么是 bundle 和 release 的区别?

标题:什么是 bundle 和 release 的区别?

我们使用“release”一词来指代为应用商店准备的二进制文件。在后续生成 bundle 时,Capgo需要知道已向应用商店发送的确切二进制文件。

我们使用“bundle”一词来指代可以应用到 release 以更新其为新code的补丁。 npx @capgo/cli@latest bundle upload 命令用于生成从新本地code的 bundle,然后将其发送给用户。

什么是路线图?

标题:什么是路线图?

我们的项目板也公开,位于: https://github.com/orgs/Cap-go/projects

我们的团队也在公共领域工作,所以你随时可以看到我们正在做什么。我们很高兴回答关于我们的路线图或优先事项的任何问题,通过 Github 问题或 Discord.

你能用 Capgo 和你的团队一起工作吗?

标题为“你能用 Capgo 和你的团队一起工作吗?”

是的!所有计划都支持无限开发者。我们只对每个组织的应用指标(MAU、存储和带宽)进行限制。

查看 Teams 更多信息。

Capgo 是否存储我的源代码 code?

标题为“Capgo 是否存储我的源代码 code?”

No. Capgo 服务器永远不会看到您的源代码 code. 当您运行 npx @capgo/cli@latest bundle upload, Capgo 将存储一个 zip 文件,包含最小化/编译后的 code - 与浏览器接收到的相同的 code,而不是您的源代码 code。

为了额外的安全性,您有两个选项:

  • 端到端加密: 在上传之前对您的包进行加密,保护它在存储和传输中,并防止第三方在没有您的私钥的情况下生成有效的加密更新。这不会使已部署的 Web 资产无法逆向工程,因为公共密钥已包含在分发的应用程序中。
  • 外部 URL 上传: 将包存储在您的服务器上,并仅向 Capgo 提供下载链接并提供 --external <url>

请参见我们的隐私政策: https://capgo.app/privacy

是的,Capgo旨在从CI系统中使用。我们已经发布了一个关于CI系统的指南 Android和Github ActionsiOS,以及 GitLab。其他CI系统应该类似。

如果您遇到任何问题,请不要犹豫联系GitHub问题或Discord。

如何与Firebase Remote Config或Launch Darkly相关?

标题为“如何与Firebase Remote Config或Launch Darkly相关?”

Code推送允许添加新的code/替换code在设备上。Firebase Remote Config和Launch Darkly都是配置系统。它们允许您更改应用的配置,而无需发布新版本。它们不打算取代code。

这个依赖包会占用多少空间?

标题:这个依赖包会占用多少空间?

我最近没有测量,但我预计code推送库将在Capacitor应用中添加少于1兆字节。我们知道我们可以通过优化来减小它,当这成为优先事项时。 如果大小是一个阻塞者,请告诉我们!

Capgo在iOS 18.4模拟器上是否可用?

标题:Capgo在iOS 18.4模拟器上是否可用?

不。由于影响iOS 18.4模拟器的上游问题,Capgo在该模拟器上不可靠。请在真机上测试或使用不同的iOS模拟器版本。

查看React Native问题中的详细信息: facebook/react-native#50510

是。code 无法限制应用程序的大小,可以更新任何大小的应用程序。 如上所述,__CAPGO_KEEP_0__ 可以更改您的应用程序中的任何 JS __CAPGO_KEEP_1__,无论大小如何。, Capgo can change any JS code in your application regardless of size.

我可以用 __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ push 做什么?

直接链接到我可以用 Capgo code push 做什么?

Section titled “What can I use Capgo code push for?”

紧急修复生产应用程序。

  • 将 bug 修复发送给您的应用程序的旧版本用户。
  • 不断发布(例如,每小时)。
  • 将 bug 修复发送给您的应用程序的旧版本用户。

注意,大多数应用商店禁止将改变应用行为的方式的code发送给用户。请参见 以下 更多信息。

MAU(每月活跃用户)指的是一个月内活跃的设备。在Capgo的背景下,这实际上指的是一个月内活跃的设备。我们将MAU定义为任何在过去30天内与我们的服务器联系过的设备。我们不计算在过去30天内没有联系过我们的服务器的设备。

重要从插件版本 v5.10.0, v6.25.0 开始 v7.25.0在这些版本之前,每次重新安装应用都会生成一个新的设备ID,并计入MAU。

当前版本:

  • 设备ID在应用重新安装时保持不变(在iOS中存储在Keychain中,Android中存储在EncryptedSharedPreferences中)
  • 更新应用程序不会创建新的设备ID
  • 在开发过程中,如果您正在使用较旧的插件版本(< v5.10.0 / v6.25.0 / v7.25.0),每次重新安装仍会创建新的MAU

注意:TestFlight下载和Android通道切换可能会根据您的配置生成新的设备注册

我们建议在首次设置后禁用开发设备和模拟器以减少设备重复

我们不能用 Capgo code 推送什么?

标题:我们不能用 Capgo code 推送什么?

如上所述,Capgo 不应用于违反应用商店政策。请参见 以下 更多信息,请参见。

也Capgo不支持更改本机code(例如在Android上使用Java/Kotlin或在iOS上使用Objective-C/Swift)。如果您尝试更新时更改了本机code,工具将在更新期间警告您。

是否可以通过Capgo更新capacitor.config.ts更改?

标题为“是否可以通过Capgo更新capacitor.config.ts更改?”的部分

否。更改 capacitor.config.ts 无法通过Capgo实时更新。Capacitor配置文件在本机构建时读取并编译到本机应用程序二进制文件中。这意味着任何Capacitor配置更改(例如插件配置、应用程序ID、服务器设置或本机插件选项)都需要通过App Store或Google Play进行新的本机发布。 capacitor.config.ts __CAPGO_KEEP_0__仅能更新在运行时加载的Web资产(HTML、CSS、JavaScript)。如果您需要更改__CAPGO_KEEP_1__配置,请务必:

Capgo can only update web assets (HTML, CSS, JavaScript) that are loaded at runtime. If you need to change your Capacitor configuration, you must:

  1. 本地 capacitor.config.ts 本地
  2. 重新构建原生应用(npx cap sync 原生构建后)
  3. 将新二进制文件提交到应用商店

Capgo 会自动将应用提交到应用商店吗?

是否Capgo 会自动将应用提交到应用商店?

目前,Capgo 不支持为您自动提交应用到应用商店。我们计划在未来添加此功能,但目前您需要继续使用现有的流程将应用提交到应用商店。

您可以使用我们的 CI指南 Android 来自动化此过程并 CI指南 iOS.

Capgo 在磁盘上存储什么和在哪里?

标题:“Capgo 在磁盘上存储什么以及在哪里?”

The Capgo updater (included in your application when you build your app) caches the latest downloaded bundle in the only directory that capacitor allow to load code. On Android, this is located in /data/user/0/com.example.app/code_cache/capgo_updater 尽管该路径的基础由 Android 系统提供,并且可以在运行时动态更改。 在 iOS 设备上,数据存储在 Library/Application Support/capgo.

Capgo 命令行工具(例如 npx @capgo/cli@latest bundle upload)在磁盘上安装在 npm 缓存中,您的登录信息存储在您的主目录中在 ~/.capgo.

这与 Capacitor 热重载有何关系?

标题:“这与 Capacitor 热重载有何关系?”

Capacitor 的热重载是开发时的特性。 Code 推送是用于生产的。

热重载是 Capacitor 的特性,允许您在开发期间在设备上更改 code。 它需要构建 Capacitor 应用程序以连接到您的本地机器的代理。

Code 推送是允许您在生产中更改 code 的特性。 我们将使用各种不同的技术来使其成为可能,具体取决于平台。

什么类型的Capgo code 支持?

标题:什么类型的Capgo code 支持?

Capgo 可以更改任何 JS code 在您的应用程序中。这包括应用程序 code 和生成的 code。您还可以更新依赖项, package.json 只要它们不需要原生 code 变更。

我们没有计划支持更改原生 code(例如 Android 上的 Java/Kotlin 或 iOS 上的 Objective-C/Swift),并且工具将警告您如果它检测到您已更改原生 code,因为它不会包含在捆绑包中。

这是否支持 Web?

标题:这是否支持 Web?

Code 推送不需要在 Web 上,因为 Web 已经以这种方式工作。当用户打开 Web 应用时,它将从服务器下载最新版本,如果需要。

如果您有code 推送与 Web 的用例,我们很想知道!

这是否在 iOS、Android、Mac、Windows、Linux 等上工作?

iOS、Android、Mac、Windows、Linux等设备上是否会工作?

是。

我们目前主要关注Android、iOS和Electron的支持,code在所有三个平台上都已推出生产版。

Capgo目前支持AndroidCapacitor级别22+和iOS 13.0+。

Capacitor currently supports Android API level 22+ and iOS 13.0+: __CAPGO_KEEP_1__支持哪些__CAPGO_KEEP_0__版本?

Capgo 目前仅支持 Capacitor 的最新稳定版本。我们也可以支持 Capacitor 的旧版本,但我们还没有建立必要的基础设施来维护这些旧版本。我们打算在未来支持更多的 Capacitor 版本,包括我们的企业客户的任何版本。 https://github.com/Cap-go/capgo/issues/1100

Capgo 跟踪 Capacitor 的稳定版本,并在稳定版本发布后几小时内进行更新。我们的更新系统是自动化的,更新时间约几分钟。我们还会进行额外的手动验证步骤,之后才会将更新发布到我们的服务器上。

如何与 App/Play Store 的审查流程或政策相关?

Section titled “如何与 App/Play Store 的审查流程或政策相关?”

开发者在选择使用这些商店时,必须遵守与商店提供商的协议。Code push 设计用于让开发者能够更新他们的应用程序,同时仍然遵守 iOS、Android 和 Electron 分发渠道的商店政策。与 React Native 类似,商业产品有很多种可以实现这一点(例如 Microsoft、Expo 等。 微软也发布了一份指南,说明他们的解决方案如何遵守应用商店的政策:, https://__CAPGO_KEEP_0__.com/microsoft/react-native-__CAPGO_KEEP_1__-push#store-guideline-compliance).

__CAPGO_KEEP_0__ https://github.com/microsoft/react-native-code-push#store-guideline-compliance

Code 推送是一种广泛使用的技术,应用商店中几乎所有的大型应用都使用code推送。需要注意的是,不要改变应用的行为方式。请参见 以下 更多信息。

是否Capgo符合Play商店的指南?

标题:是否Capgo符合Play商店的指南?

是。

Play商店对更新工具有两个限制。

  1. 更新必须使用解释器或虚拟机(Capgo使用JavaScript在WebView中)。 https://support.google.com/googleplay/android-developer/answer/9888379?hl=zh-Hans
An app distributed via Google Play may not modify, replace, or update itself
using any method other than Google Play's update mechanism. Likewise, an app
may not download executable code (such as dex, JAR, .so files) from a
source other than Google Play. *This restriction does not apply to code
that runs in a virtual machine or an interpreter* where either provides
indirect access to Android APIs (such as JavaScript in a webview or
browser).
Apps or third-party code, like SDKs, with interpreted languages (JavaScript,
Python, Lua, etc.) loaded at run time (for example, not packaged with the
app) must not allow potential violations of Google Play policies.
  1. 应用程序的更改不应欺骗性(例如,通过更新更改应用程序的目的)。 https://support.google.com/googleplay/android-developer/answer/9888077 请在应用中清晰地向用户说明您提供的内容,并避免通过使用 Capgo 进行重大行为变化而违背他们的期望。

Capgo 设计用于与 Google Play 商店指南兼容。然而 Capgo 是一种工具,像任何工具一样,可以被滥用。故意滥用 Capgo 以违反 Google Play 商店指南的行为是违反 Capgo 的 服务条款 并可能导致您的帐户被终止。

最后,code 推送服务在行业中广泛使用(我所知的大多数应用都使用它们),并且有多个其他 code 推送服务公开可用(例如 expo.dev 和 appcenter.ms)。这是一个被踩踏的道路。

微软还发布了一份关于其 React Native “codepush” 库如何遵守应用商店的指南的指南: https://github.com/microsoft/react-native-code-push#store-guideline-compliance

Capgo 是否遵守 App Store 指南?

《Capgo 是否遵守 App Store 指南?》

是。

类似于应用商店,App Store 提供了技术和政策限制。

3.2.2
... interpreted code may be downloaded to an Application but only so long as
such code:
(a) does not change the primary purpose of the Application by providing
features or functionality that are inconsistent with the intended and
advertised purpose of the Application as submitted to the App Store,
(b) does not create a store or storefront for other code or applications, and
(c) does not bypass signing, sandbox, or other security features of the OS.

Capgo 使用 JavaScript 在 WebView 中执行,以便于 iOS 的更新限制。只要您的应用程序不通过更新 (例如,通过更新更改应用程序的目的) 进行欺诈行为,通过 Capgo (或任何其他 code 推送解决方案) 进行更新是标准行业实践,并且符合 App Store 的指南。

故意利用 Capgo 违反 App Store 指南是违反 Capgo 的条款 服务条款 并可能导致您的帐户被终止。

微软还发布了一份关于其 React Native “codepush” 库如何符合应用商店的指南的指南: https://github.com/microsoft/react-native-code-push#store-guideline-compliance

我可以在我国家使用 Capgo 吗?

标题为“我可以在我国家使用 Capgo 吗?”

我们没有尝试限制任何国家对 Capgo 的访问。

我们了解到一些国家对从该国内部访问的 URL 有限制。Capgo目前使用Cloudflare Cloud进行托管,包括R2存储和Cloudflare工作者。

以下 URL 由 Capgo 使用:

  • https://api.capgo.app — 由 Capgo 使用 npx @capgo/cli 命令行工具用于与Capgo服务器进行交互,以及在用户设备上检查更新的Capgo更新器。
  • https://*.r2.cloudflarestorage.com — 由 Capgo 使用 npx @capgo/cli 命令行工具,用于上传和下载捆绑包。

如果所有这些 URL 都可以从您的国家访问,那么 Capgo 应该可以正常工作。

如果您的地区需要阻止访问这些 URL,请告知我们,我们可以与您合作找到解决方案。 代理服务器是其中一种选择。

可以自己托管Capgo吗?

您可以自己托管 Capgo?

是的,您可以自己托管 Capgo。该指南尚未编写,但 code 是开源的,并且可在 https://github.com/cap-go/capgo

code 是否需要互联网才能工作?

code 是否需要互联网才能工作?

是的。可以想象一下,运行一个服务器来分发更新独立于一般互联网,但某种形式的网络连接是必需的,以便将更新传输到设备。

Capgo 缺乏网络连接的影响如何?

Capgo 缺乏网络连接的影响如何?

Capgo 更新器(在您使用 Capgo 构建应用程序时包含在应用程序中)旨在对网络连接问题具有弹性。

Capgo 更新器在应用程序启动时会向 Capgo 服务器发送网络请求,请求更新。我们故意使用单独的线程,以避免阻塞应用程序可能正在做的事情。如果网络请求失败或超时,更新器将简单地尝试下次应用程序启动时再次检查。

Capgo 命令行工具(例如 npx @capgo/cli@latest bundle upload) 需要网络连接才能正常工作。如果您使用 Capgo 分发应用程序,请确保您的 CI 系统具有网络连接。

如果用户长时间未更新并错过了更新?

如果用户长时间未更新并错过了更新?

我们的实现始终发送一个针对请求更新的设备的更新,更新请求者始终到最新版本。因此,如果用户一段时间没有更新,他们将会“错过”中间更新。

更新服务器可以根据您的应用程序的需求,支持响应下一个增量版本或最新版本。请告知我们,如果替代更新行为对您很重要。

Capgo 是为 Capacitor 的插件,添加了 code 推送功能。 Capgo 不是 Capacitor 的替代品。您可以继续使用您已经熟悉的 Capacitor 工具。

我们跟踪最新的稳定版本的 Capacitor 并更新我们的 code 推送插件以与其兼容。

什么时候会有更新?

标题:什么时候会有更新?

默认情况下,Capgo 升级器在应用程序启动时检查更新。它在后台运行,不会阻塞 UI 线程。任何更新都将在用户使用应用程序时安装,并将在下次应用程序重启时应用。

也可以使用 Capgo 升级器手动运行, @capgo/capacitor-updater 包,通过它可以在任何时候触发更新,包括通过推送通知。

Capgo 升级器设计得如此,即使网络不可用,服务器下线或无法访问,应用程序也会继续正常运行。您如果选择从我们的服务器删除更新,所有客户端将继续正常运行。

我们添加了回滚补丁的功能。最简单的方法是简单地将之前的捆绑包附加到您的频道以撤销。

我需要保留我的 app_id 密钥吗?

标题:我需要保留我的 app_id 密钥吗?

不需要。 app_id 您的应用程序中包含此功能,且安全可公开发布。您可以将其添加到版本控制(即使公开)中,不必担心有人访问它。

有人知道您的 app_id 可以从 Capgo 服务器获取最新版本的应用程序,但他们无法推送应用程序更新或访问任何其他Capgo帐户方面。

什么信息发送到 Capgo 服务器?

标题:什么信息发送到 Capgo 服务器?

尽管 Capgo 连接到网络,但它不会发送任何个人可识别信息。包含 Capgo 不应影响您的 Play Store 或 App Store 声明。

应用程序从 Capgo 服务器发送的请求包括:

  • app_id(指定 capacitor.config.json)
  • channel(可选在 capacitor.config.json)
  • release_version(AndroidManifest.xml 中的 versionName 或 Info.plist 中的 CFBundleShortVersionString 或 capacitor.config.json 如果设置 CapacitorUpdater.version )
  • 版本号(由系统自动生成,例如 npx @capgo/cli@latest bundle upload)
  • 系统版本(例如 ‘11.2.1’)
  • platform (e.g. ‘android’, needed to send down the right patch) That’s it. The code for this is in updater/library/src/network.rs
  • 设备ID(在设备上首次运行时生成,用于去重和根据用户安装的设备数量进行计费(例如每月活跃用户),而不是总补丁或总补丁安装)
  • 自定义ID(可选,开发者在运行时设置,用于将设备与用户系统中的用户关联)

什么平台支持Capgo?

什么平台支持Capgo?

目前,Capgo支持Android、iOS和Electron。所有平台均已生产就绪。

使用Capgo支持iOS、Android或Electron可以独立决策。您可以根据需要为Android和App Store构建的ipa设置您的渠道策略,或者Electron渠道。

Capgo可以(相对容易地)支持桌面或嵌入式目标。如果这些对您很重要,请告知我们。

Capgo如何与Play测试跟踪或Apple TestFlight交互?

如何Capgo与Play测试跟踪或Apple TestFlight进行交互?

每个应用商店都有自己的机制来将应用分发给有限的用户组(例如“内部测试”、“封闭测试”等)。这些都是将用户分段并将特定版本的应用分发到每个组的机制。

遗憾的是,这些机制中并不是所有的机制都允许第三方检测应用是否安装在特定的测试跟踪中或通过TestFlight。因此,我们无法可靠地获得这些组的组成信息,也无法可靠地根据这些组来控制Capgo的补丁的访问。 https://stackoverflow.com/questions/53291007/can-an-android-application-identify-the-test-track-within-google-play https://stackoverflow.com/questions/26081543/how-to-tell-at-runtime-whether-an-ios-app-is-running-through-a-testflight-beta-i

如果您希望根据组来控制Capgo的可用性,有4种潜在的选项:

  1. 使用每组的单独通道。这是最直接的方法,但需要管理多个通道。您可能已经有dev通道和prod通道,具有不同的可用性。您可以更新dev通道、验证它,然后单独更新prod通道。我们建议使用分支/标签在您的版本控制中来帮助跟踪与每个发布相关的源代码。
  2. 跟踪您自己的可选用户,禁用自动更新,并仅为特定用户触发更新,通过 @capgo/capacitor-updater package。这项功能今天就可以使用,但您需要自己管理可选用户列表。
  3. Capgo允许在每个设备上创建自己的可选机制(类似于Test Tracks或TestFlight,只不过是平台无关的)。这使得您的QA团队可以在他们被推广到普通用户之前,优先测试您的应用程序。
  4. Capgo基于百分比的发布。这种方法不允许您选择要发送到哪些设备,但可以帮助您逐步发布并在出现问题时回滚。

如何升级或降级我的计划?

标题:如何升级或降级我的计划?

您可以在任何时候在您的控制台中升级或降级您的计划: https://console.capgo.app/settings/organization/plans

我的账单周期何时重置?

标题:我的账单周期何时重置?

Billing periods are reset automatically every month on the month you first subscribed to Capgo. For example, if you subscribed on the 15th of the month, your billing period will reset on the 15th of every month.

如何取消我的订阅?

标题:如何取消我的订阅?

你可以在你的控制台中随时取消订阅: https://console.capgo.app/settings/organization/plans

是否可以预付一年的费用?

标题:是否可以预付一年的费用?

您可以随时在您的控制台中: https://console.capgo.app/settings/organization/plans

统计和分析

统计和分析

您的控制台中的统计数据每天凌晨 UTC 时间更新。 统计数据基于 MAU 已安装在您的设备上的

如何生成设备 ID

如何生成设备 ID

设备 ID 在首次运行设备时生成,用于去重每台设备的安装和允许我们根据已安装的用户(例如每月活跃用户)而不是总数或总数的补丁来收费。

MAU 比安装数量更好的解决方案来定价 Capgo,因为它更准确地反映了每台设备的实际成本 Capgo。

设备 ID 持久性(更新于 v6.25.0 和 v7.25.0):

  • 当前行为: 设备 ID 现在在 app 重装时会持久化。它存储在设备的 Keychain (iOS) 或 EncryptedSharedPreferences (Android) 中,允许我们在卸载/重新安装后跟踪同一台设备。
  • 之前的行为 (在 v6.25.0/v7.25.0 之前): 由于苹果和谷歌商店的隐私政策原因,设备 ID 在每次 app 重装时都会重置,使得无法跟踪同一台设备的重装。

隐私规则由苹果和谷歌强制执行,Capgo 的实现遵循了他们设备识别的最佳实践。

设备 ID 将不会在设备列表中显示,直到他们安装了第一个补丁。

为什么我的设备号与 MAU 不同?

标题:为什么我的设备号与 MAU 不同?

当前设备列表并非像 MAU 那样频繁更新。

设备列表仅在设备安装更新时更新。

在每次应用启动时,MAU 都会更新。目前平台的限制是这样的。我们的分析平台不支持原始更新,因此我们使用传统数据库来存储设备列表。

为了限制数据库查询的数量,我们只在应用更新时更新行。

将来将移除此限制。

您可以为每个平台创建一个频道,并在每个频道中禁用平台特定的更新。

在 iOS 频道中禁用 Android 更新,在 Android 频道中禁用 iOS 更新。

然后将每个频道的包上传以便为每个平台有不同的更新。

如果您需要为两个平台有相同的更新,可以将一个包链接到多个频道。无需重复上传包。