OTA 更新是什么

OTA(Over-the-Air)更新 是一种通过网络直接向用户设备推送应用程序更新的方式,用户不需要通过应用商店下载新的版本。在 React Native 和 Expo 中,OTA 更新允许开发者在不重新提交应用到 App Store 或 Google Play 的情况下,对应用的 JavaScript 代码、配置文件、图片资源等进行更新。

OTA 更新的关键特点:

  1. 即时性:用户只需要打开应用,更新内容会自动下载并应用。无需通过应用商店下载完整的应用更新。
  2. 无需重新发布:开发者可以跳过应用商店审核流程,直接发布 JavaScript 层面的更改。
  3. 增量更新:通常只是更新应用的某些部分,比如修复了一个 JavaScript bug,或者修改了界面样式。

如何在 Expo 中使用 OTA 更新

Expo 默认支持 OTA 更新,当你通过 expo publish 命令发布新版本时,Expo 会自动处理:

  • 将应用的 JavaScript 代码和资源打包并上传到云端。
  • 当用户打开应用时,Expo SDK 会自动检查是否有新的更新可用,并在后台下载更新。

使用 OTA 更新的步骤:

  1. 检查更新
    Expo SDK 会自动检查更新,并在用户下次打开应用时下载。如果你需要手动控制更新行为,可以使用 expo-updates 模块中的 checkForUpdateAsyncfetchUpdateAsync 来手动检查和下载更新。

发布应用
你可以使用 expo publish 命令来发布 OTA 更新:

expo publish

这会将你的最新代码发布到 Expo 的更新服务器上。

OTA 更新的限制

  1. 只能更新 JavaScript 层:OTA 更新只能用于更新 JavaScript 代码和静态资源(如图片、字体等),不能更新原生代码。如果你对应用中的原生模块进行了更改,仍然需要通过 App Store 或 Google Play 发布新版本。
  2. 应用商店审核政策:虽然 OTA 更新加速了开发迭代,但需要注意的是,有些应用商店(如 iOS App Store)对 OTA 更新有严格规定,如果 OTA 更新涉及较大的功能变更,可能会违反其审核政策。
  3. 更新策略:Expo 提供了多种更新策略:
    • 即时更新:用户一启动应用就会加载更新。
    • 后台更新:更新会在后台下载,下次启动应用时生效。

在裸工作流中使用 OTA 更新

如果你从 Expo 托管工作流 Eject 到了裸工作流,仍然可以使用 expo-updates 模块来实现 OTA 更新。需要在原生项目中做一些配置,并确保你遵循正确的发布和更新流程。

优缺点总结:

优点:

  • 快速迭代:可以在不重新发布应用的情况下,快速修复问题或推出新功能。
  • 用户体验更好:用户无需去应用商店手动下载更新,更新过程在后台自动完成。

缺点:

  • 原生代码无法通过 OTA 更新:如果你对原生代码做了修改(如添加了新的原生模块),必须通过应用商店重新发布完整的应用版本。
  • 有可能违反应用商店政策:对于较大或显著的更新,应用商店可能要求重新审核。

总结

OTA 更新 是 React Native 和 Expo 的强大功能,能显著加快开发迭代速度,用户无需重新安装应用即可获取最新的应用更新。然而,这种更新方式的局限性在于它无法修改原生代码。如果你想更新原生模块或需要进行更大规模的变动,仍需通过应用商店发布新的版本。