expo应用内更新
Expo 应用内更新实现指南 Expo 提供了两种主要的应用内更新方案,适用于不同的使用场景:
- 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);
}
}
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);
}
}
配置要点
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"
最佳实践
在应用启动时检查更新 (App.js 或根组件中)
考虑用户的网络环境,大更新可提示用户连接WiFi
提供跳过更新的选项(对于非关键更新)
记录更新失败情况以便排查问题
注意事项 原生代码变更仍需通过应用商店更新
测试时可以使用 expo publish --release-channel test 发布到测试频道
更新大小限制通常为50MB(取决于Expo服务配置)
如需更复杂的更新策略,可以考虑实现自定义更新UI和逻辑。
本文系作者 @alex 原创发布在Alex站点。未经许可,禁止转载。
暂无评论数据