Expo 应用内更新实现指南 Expo 提供了两种主要的应用内更新方案,适用于不同的使用场景: 1\. Expo 托管更新 (OTA Updates) 适用于使用 Expo 托管服务的项目:
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);
}
}2\. 使用 EAS 更新 (推荐) 对于使用 EAS Build 的项目,Expo 提供了更强大的更新系统:
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);
}
}配置要点 app.json/app.config.js 中配置更新策略:
{
"expo": {
"updates": {
"enabled": true,
"checkAutomatically": "ON_LOAD", // 或 "ON_ERROR", "ON_RECOVERY", "WIFI_ONLY"
"fallbackToCacheTimeout": 0
}
}
}发布更新:
# 发布到默认频道
expo publish
# 或使用 EAS 更新
eas update --branch production --message "修复了一些bug"最佳实践 在应用启动时检查更新 (App.js 或根组件中) 考虑用户的网络环境,大更新可提示用户连接WiFi 提供跳过更新的选项(对于非关键更新) 记录更新失败情况以便排查问题
注意事项 原生代码变更仍需通过应用商店更新 测试时可以使用 expo publish --release-channel test 发布到测试频道 更新大小限制通常为50MB(取决于Expo服务配置) 如需更复杂的更新策略,可以考虑实现自定义更新UI和逻辑。 [1]: https://blog.laialex.com/emdash/api/media/asset/med0220/2025-07-10T01%3A07%3A06.png [2]: https://blog.laialex.com/emdash/api/media/asset/med0218/2025-07-10T01%3A05%3A53.png [3]: https://blog.laialex.com/emdash/api/media/asset/med0219/2025-07-10T01%3A06%3A35.png
Discussion
No comments yet