ほとんどのアプリケーションは、ローカルデータを保存したり読み出したりする必要があります。具体的なユースケースに応じて、いくつかのアプローチが考えられます。
Need your local data encrypted? Ionic provides an out of the box security suite for Capacitor apps that includes Authentication, Biometrics, and Secure Storage. Learn more.
Capacitor のアプリケーションは主に Web ビューやブラウザで動作するため、ストレージ用の Web API は Capacitor の開発者が利用できます。ただし、これらの API には、いくつかの大きな注意点があります。
ローカルストレージは、ユーザー ID などの一時的なデータに使用できますが、一過性のものであることを考慮する必要があります。これは、デバイスの容量が不足している場合、OS がウェブビューからローカルストレージを再利用するためです。同じことが、少なくとも iOS の IndexedDB にも言えます(Android では、 persisted storage APIで IndexedDB を persisted としてマークすることができます)。詳しくは、 data storage eviction policies をご覧ください。
Capacitor には、ネイティブの Storage API が付属しており、上記の退避の問題を回避することができますが、少量のデータを対象としています。
Storage API は、高度なクエリをサポートしないシンプルなキー/バリュー API を提供します:
import { Storage } from '@capacitor/storage';
// JSON "set" example
async setObject() {
await Storage.set({
key: 'user',
value: JSON.stringify({
id: 1,
name: 'Max'
})
});
}
// JSON "get" example
async getObject() {
const ret = await Storage.get({ key: 'user' });
const user = JSON.parse(ret.value);
}
大規模なデータを保存し、ハイパフォーマンスな方法でアクセスするには、いくつかのオプションがあります。
最も広くサポートされているオプションは SQLite です。 capacitor-sqlite や cordova-plugin-sqlite など、Capacitor で動作するはずのコミュニティで管理されている SQLite プラグインが多数あります。
また、Capacitor チームは、暗号化をサポートし、デバイス上の secure key management APIs と統合した enterprise SQLite storage solution を提供しています。