Expo 应用内更新实现指南 Expo 提供了两种主要的应用内更新方案,适用于不同的使用场景:

  1. Expo 托管更新 (OTA Updates) 适用于使用 Expo 托管服务的项目:

javascript import * as Updates from 'expo-updates';

async function checkForUpdate() { try { const update = await Updates.checkForUpdateAsync(); if (update.isAvailable) { await Updates.fetchUpdateAsync(); // 可以立即重载应用或通知用户稍后重载 Updates.reloadAsync(); } } catch (e) { // 处理错误 console.error('更新检查失败:', e); } } 2025-07-10T01:07:06.png 2. 使用 EAS 更新 (推荐) 对于使用 EAS Build 的项目,Expo 提供了更强大的更新系统:

javascript import { Updates } from 'expo';

async function checkEASUpdate() { try { const { isAvailable, manifest } = await Updates.checkForUpdateAsync();

if (isAvailable) {
  // 显示更新提示
  Alert.alert(
    '更新可用',
    '发现新版本,是否立即更新?',
    [
      { text: '稍后', style: 'cancel' },
      { text: '更新', onPress: async () => {
        await Updates.fetchUpdateAsync();
        Updates.reloadAsync();
      }}
    ]
  );
}

} catch (error) { console.error('更新检查错误:', error); } } 2025-07-10T01:05:53.png 配置要点 app.json/app.config.js 中配置更新策略:

json { "expo": { "updates": { "enabled": true, "checkAutomatically": "ON_LOAD", // 或 "ON_ERROR_RECOVERY", "WIFI_ONLY" "fallbackToCacheTimeout": 0 } } } 发布更新:

bash

发布到默认频道

expo publish

或使用 EAS 更新

eas update --branch production --message "修复了一些bug" 2025-07-10T01:06:35.png 最佳实践 在应用启动时检查更新 (App.js 或根组件中)

考虑用户的网络环境,大更新可提示用户连接WiFi

提供跳过更新的选项(对于非关键更新)

记录更新失败情况以便排查问题

注意事项 原生代码变更仍需通过应用商店更新

测试时可以使用 expo publish --release-channel test 发布到测试频道

更新大小限制通常为50MB(取决于Expo服务配置)

如需更复杂的更新策略,可以考虑实现自定义更新UI和逻辑。

分类: 知识 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录