NativeScriptのクライアントサイドストレージ探し
なぜクライアントサイドストレージを探すのか
動的なアプリであれば、APIを利用してバックエンドから情報をもらってきたり、逆にこちらから情報を与えたり消したりなど、HTTPSなどの通信手段でやり取りをしている。が、通信なしで、アプリ側だけで(つまりスマホのストレージだけで)保存したいデータが出てきた。そしてそれはアプリを一度閉じても、残っていてほしい。(補足:vueを使っている方は、アプリ起動中のstoreであればvuexでできる)
私の場合は、ログイン済みのユーザーを識別するために、ユーザー固有のAPIヘッダー情報を、スマホ内に記憶させたい。
クライアントサイドストレージの詳細は以下を参照にしていただきたい。私もまだよくわかっていない。
mdn - クライアント側ストレージ
利用環境
Nativescript-vueを使って、iOSとAndroidの両方で使えるアプリを開発中。
- nativescript-vue 2.9.0
- @nativescript/core 8.2.4
- @nativescript/webpack 5.0.6
Nativescriptのプロジェクト内コードから、ストレージをいじれるプラグインを探す。
探してみた所感まとめ
初学者なのもあり、セキュアに使えるか、シンプルにつかえるか、という2点を重視してまとめた。
今の所、私の場合はnativescript-secure-storageを使うのが良さそうに思っているが、更新が2年前で止まっており、現在も問題なく使えるか不明。やってみたら、こちらに追記したいと思っている。
→2022/11/7追記 nativescript-secure-storage
は、使っているSAMKeychainというのがもうメンテナンスされていないためか、シミュレータだと動くが、実機では動かなかった。
関連issue Is it still safe to use this? SAMKeychain is deprecated and Hawk library seems to be dying.
なので使わないほうがいい
2022/11/7更新
プラグイン名 | セキュアさ | シンプルさ | 備考 |
---|---|---|---|
ApplicationSettings | ?? | ◎ | 公式のやり方なので挙動が安定していそう |
CouchDB利用 | ?? | △ | データベースの基礎が必要になりそう、NativeScriptチームのtriniwizさんがつくっているので、安定していそう |
nativescript-sqlite | ○ | ○ | 商用利用版(有料)にすると暗号化できる |
nativescript-localstorage | ? | ○ | 有料(サブスク) |
nativescript-secure-storage | ◎ | ◎ | Outdated、動かない |
あまり分からず調べているので、誤っている部分や、追加すべき情報があれば、ご指摘いただけると助かります。
ApplicationSettings
で作った
2022/11/7追記:結局nativescript-secure-storage
が使えず、他にいい方法がないか、NativeScriptのDiscordで聞いてみたが、初学者でも使えるような代物は返ってこなかった。
諦めて、一番安定して動きそう、かつ、シンプルな、ApplicationSettings
で実装した。
不安要素としてセキュアであるのか、があるのだが、同じようなログイン情報保持目的で使っている方々もいたので、まあいいか(というか他に代替手段がない)と思って使った。
ApplicationSettings loses setting despite using flush()
Nativescript application settings will not persist username and password
利用の具体例
Client-Side Storage in NativeScript Applications
細かい利用方法(少し古いので、すべてのmethods
が動くかは不明)
NativeScript Core - ApplicationSettings
上記に載っているget
,set
,remove
関連のmethodsはiOS、Androidともに問題なく動くので、実用に耐えうると思う。
注意)const appSettings = require("tns-core-modules/application-settings")
で呼び出すと書いてあるが、tns-core-modules
は滅びて、@nativescript/core
に統合されたので、const appSettings = require('@nativescript/core/application-settings')
と書く。
Discussion