Expo的OTA (Over-the-Air) 更新功能允许开发者在不重新提交应用商店的情况下推送应用更新。这是一个强大的功能,可以显著加快迭代速度。
OTA更新原理:
Expo OTA通过将JavaScript bundle和资源文件上传到Expo服务器,然后在应用启动时检查并下载更新来实现。
工作流程:
- 开发者使用
eas update命令上传更新 - Expo服务器存储更新并分配唯一版本号
- 应用启动时检查服务器是否有新版本
- 如果有新版本,下载并应用更新
- 用户下次打开应用时看到更新内容
EAS Update使用方法:
- 安装EAS CLI:
bashnpm install -g eas-cli
- 配置项目:
basheas build:configure
- 创建更新:
bash# 创建并发布更新 eas update --branch production --message "Fix login bug" # 指定运行时版本 eas update --branch production --runtime-version 1.0.0 # 预览更新 eas update --branch preview --message "Test new feature"
- 查看更新历史:
bash# 查看所有更新 eas update:list # 查看特定分支的更新 eas update:list --branch production
- 回滚更新:
bash# 回滚到上一个版本 eas update:rollback --branch production # 回滚到特定版本 eas update:rollback --branch production --target-message "Previous stable version"
配置app.json:
json{ "expo": { "updates": { "url": "https://u.expo.dev/your-project-id" }, "runtimeVersion": { "policy": "appVersion" } } }
运行时版本策略:
Expo支持多种运行时版本策略:
- appVersion策略(推荐):
json{ "runtimeVersion": { "policy": "appVersion" } }
- 使用应用版本号作为运行时版本
- 简单直接,适合大多数场景
- nativeVersion策略:
json{ "runtimeVersion": { "policy": "nativeVersion" } }
- 使用原生代码版本
- 更精确的控制
- customVersion策略:
json{ "runtimeVersion": { "policy": "customVersion", "customVersion": "1.0.0" } }
- 自定义版本号
- 最大的灵活性
更新分组:
可以创建不同的更新分支来管理不同环境的更新:
bash# 生产环境更新 eas update --branch production # 预览环境更新 eas update --branch preview # 开发环境更新 eas update --branch development
客户端配置:
typescriptimport * as Updates from 'expo-updates'; // 检查是否有更新 async function checkForUpdates() { try { const update = await Updates.checkForUpdateAsync(); if (update.isAvailable) { await Updates.fetchUpdateAsync(); Updates.reloadAsync(); } } catch (error) { console.error('Error checking for updates:', error); } } // 手动触发更新检查 checkForUpdates(); // 监听更新事件 Updates.addListener(event => { if (event.type === Updates.UpdateEventType.UPDATE_AVAILABLE) { console.log('Update available:', event); } });
限制和注意事项:
-
只能更新JavaScript和资源:不能更新原生代码
-
应用商店审核:某些应用商店对OTA更新有政策限制
-
版本兼容性:更新必须与当前运行时版本兼容
-
网络依赖:用户需要网络连接才能接收更新
-
回滚机制:需要实现回滚策略以应对问题更新
最佳实践:
-
渐进式发布:先在小范围用户中测试更新
-
版本管理:保持清晰的版本号和更新日志
-
错误监控:监控更新后的错误率
-
用户通知:在更新前通知用户
-
回滚准备:随时准备回滚到稳定版本
-
测试覆盖:在发布前充分测试更新
常见问题:
-
更新不生效:检查运行时版本是否匹配
-
更新失败:查看服务器日志和客户端错误
-
性能影响:监控更新下载对应用性能的影响
-
安全考虑:确保更新传输使用HTTPS加密
Expo OTA更新是快速迭代应用的重要工具,合理使用可以大大提升开发效率和用户体验。