重写React Native应用并保留包名升级后AsyncStorage数据是否保留?
问题结论
只要你的新应用包名(安卓为applicationId、iOS为Bundle Identifier)、打包签名证书和旧版完全一致,原应用存储在AsyncStorage中的数据会完全保留,用户升级后不需要重新登录。
原理说明
AsyncStorage是React Native封装的持久化存储方案,底层依赖系统原生的App专属沙盒存储能力:
- 安卓端数据存储在App内部沙盒的私有文件目录,不会随Apk替换被清除
- iOS端数据存储在App沙盒的Library目录,属于系统默认保留的用户数据范畴
安卓和iOS系统判定应用属于升级覆盖安装的核心依据就是包名+签名完全匹配,符合条件的升级只会替换App的可执行代码和静态资源,不会修改沙盒内的用户存储数据。
注意事项(避免数据丢失)
- 严格保证新旧版的包名/Bundle ID完全一致,字符大小写、符号都不能有差异
- 必须使用和旧版完全相同的签名证书打包,签名不一致的应用无法覆盖安装
- 若重写时更换了AsyncStorage依赖库,比如从旧的
@react-native-community/async-storage升级到新的@react-native-async-storage/async-storage,默认存储数据是兼容的,不需要额外做迁移操作,除非你主动修改了存储key的前缀配置 - 不要在新版应用的初始化逻辑中添加全局清空AsyncStorage的代码
内容的提问来源于stack exchange,提问作者Viet Anh Nguyen
相关产品推荐
相关产品推荐

