Capacitor 数据存储方案
大多数应用都需要持久化存储和读取本地数据。根据具体使用场景,开发者可采取以下几种方案。
需要本地数据加密?Ionic 为 Capacitor 应用提供开箱即用的安全套件,包含身份验证、生物识别和安全存储功能。了解更多
为什么不能直接使用 LocalStorage 或 IndexedDB?
由于 Capacitor 应用主要运行在 WebView 或浏览器环境中,开发者确实可以使用 Web 存储 API。但使用这些 API 时需要注意几个关键限制。
LocalStorage 适用于存储少量临时数据(如用户ID),但必须将其视为瞬态存储,这意味着应用需做好数据可能丢失的准备。这是因为当设备存储空间不足时,操作系统会回收 WebView 的本地存储空间。IndexedDB 至少在 iOS 上也有类似问题(在 Android 上可通过持久存储 API 将 IndexedDB 标记为持久存储)。更多关于浏览器数据存储回收策略的说明。
Capacitor 偏好设置 API
Capacitor 原生提供了偏好设置 API,可规避上述回收问题,但仅适用于少量数据存储。
该 API 提供简单的键值对存储,不支持高级查询:
import { Preferences } from '@capacitor/preferences';
// JSON 存储示例
async setObject() {
await Preferences.set({
key: 'user',
value: JSON.stringify({
id: 1,
name: 'Max'
})
});
}
// JSON 读取示例
async getObject() {
const ret = await Preferences.get({ key: 'user' });
const user = JSON.parse(ret.value);
}
大数据量或高性能存储方案
如需存储大量数据并实现高性能访问,有以下几种选择。
最广泛支持的方案是 SQLite。社区维护的多个 SQLite 插件都兼容 Capacitor,包括 capacitor-sqlite 和 cordova-plugin-sqlite。
Capacitor 团队还提供企业级 SQLite 存储解决方案,支持数据加密并与设备上的安全密钥管理 API集成。