React Native 热更新稳定性提升

CodePush 多环境配置

通过配置不同的部署环境(如Staging、Production)隔离测试与正式版本更新,避免相互干扰。在appcenter-cli中创建对应环境的Deployment Key,并在代码中动态加载不同环境的Key:

import codePush from 'react-native-code-push';

const getDeploymentKey = () => {
  if (__DEV__) return null; // 开发环境禁用热更新
  return Platform.OS === 'ios'
    ? 'YOUR_IOS_STAGING_KEY'
    : 'ANDROID_STAGING_KEY';
};

codePush.sync({
  deploymentKey: getDeploymentKey(),
  installMode: codePush.InstallMode.IMMEDIATE
});

版本灰度发布策略

采用分阶段发布机制控制风险。通过CodePush的rollout参数逐步扩大更新范围:

appcenter codepush release-react -a MyApp -d Staging --rollout 20%

先向20%用户推送更新,验证稳定性后逐步提高比例至100%。

强制回滚机制设计

在App启动时检查版本异常情况,自动回滚到上一稳定版本:

const MAX_RETRY_ATTEMPTS = 2;
let retryCount = 0;

function checkVersionHealth() {
  if (retryCount >= MAX_RETRY_ATTEMPTS) {
    codePush.rollback();
  } else {
    retryCount++;
  }
}

codePush.notifyAppReady().catch(checkVersionHealth);

更新前置检查流程

在下载更新包前执行设备环境检测,避免不兼容更新:

codePush.sync({
  updateDialog: true,
  installMode: codePush.InstallMode.ON_NEXT_RESTART,
  checkFrequency: codePush.CheckFrequency.ON_APP_START,
  mandatoryInstallMode: codePush.InstallMode.IMMEDIATE,
  deploymentKey: getDeploymentKey(),
  shouldAllowRestart: () => {
    return checkDeviceCompatibility(); // 自定义设备兼容性检查
  }
});

崩溃监控集成

结合Sentry/Crashlytics监控热更新后的崩溃率,当达到阈值时自动触发回滚:

import crashlytics from '@react-native-firebase/crashlytics';

codePush.getUpdateMetadata().then(update => {
  if (update) {
    crashlytics().setAttribute('codepushVersion', update.label);
  }
});

版本元数据记录

在客户端保存当前热更新版本信息,便于问题追踪:

const VersionTracker = {
  currentVersion: null,
  init: async () => {
    const metadata = await codePush.getUpdateMetadata();
    this.currentVersion = metadata?.label || 'binary';
  }
};

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐