返回知识库

手机 App · 上架与更新

版本更新App Updates

App 新版过审后由用户自己更新,旧版本会长期存在,所以接口要兼容旧版。强制更新要自己做最低版本检查;热更新能快速换掉 JS 和资源,但改不了原生代码,也不能用来改变 App 的主要功能。

12 部手机上的版本墙

按钮大致按顺序点:先热更新修 JS,再试热更新加原生功能,然后发 1.3、过一周、删旧字段、设最低版本。每一步看哪些手机变了色。

任务打卡 App 1.2 的支付有 bug。下面是 12 位用户手机上的版本。用热更新、发新版和后端开关处理它,看每台手机怎么变。

改 App
后端
在 1.3:0 / 12支付失败:7崩溃:0停在更新页:0
  • 用户 11.0旧版,但能用
  • 用户 21.0旧版,但能用
  • 用户 31.1旧版,但能用
  • 用户 41.1旧版,但能用
  • 用户 51.1旧版,但能用
  • 用户 61.2支付失败
  • 用户 71.2支付失败
  • 用户 81.2支付失败
  • 用户 91.2支付失败
  • 用户 101.2支付失败
  • 用户 111.2支付失败
  • 用户 121.2支付失败

现在:7 台 1.2 的手机支付失败。下一步:先试「热更新修复支付(只改 JS)」。

知识点:App 的更新在用户手里

版本墙上已经演过,这里只给命名。

  • 发版 ≠ 都更新了:新版过审上架后,用户自己更新或等自动更新,旧版本会长期存在。
  • 接口要向后兼容:后端改字段前,先确认还有多少人在用旧版;旧字段要留到旧版用户足够少。
  • 强制更新:App 启动时问后端「最低支持版本」,低了就挡在更新页。安卓可用 Google Play 的应用内更新;iOS 没有现成接口,要自己做。
  • 热更新:Expo 等方案能在下次打开时换掉 JS、样式和图片,修 bug 很快;原生代码改动必须发新版。
  • 平台规则划了线:Apple 允许下载解释执行的代码,但不能改变 App 的主要用途;Google Play 禁止绕过商店更新自身或下载可执行代码。

什么时候用、怎么用

线上出 bug,先判断它在 JS 里还是原生里,再决定怎么推。

  • 信号:线上 bug 要马上修、准备改接口字段、某个旧版有安全或资金问题。
  • 只改 JS 或文案:热更新,记得先在测试渠道验证再推给所有人。
  • 动了原生模块、权限或配置:发新版过审;接口同时兼容新旧两版。
  • 最短路径:让 AI 上线时就带上「最低版本检查」和热更新能力 → 修 bug 前先问 AI 改动是否涉及原生代码 → 改接口前看版本分布。

正反例:同一个支付 bug

bug 一样,差别只在怎么让用户拿到修复。

正例JS 层的 bug 用热更新,接口保留旧字段

当天修好 1.2 用户的支付;1.3 照常过审;后端等旧版用户很少了才删字段。

反例发了 1.3 就删接口旧字段

一半用户还在旧版,打开就崩;只好紧急恢复字段,再上强制更新把所有人挡在更新页。

快速自测

AI 说「新加的蓝牙计步功能已经通过热更新推送给所有用户了」。你最该怀疑什么?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。