79

アプリが携帯電話にローカルにデータを保存する場合、そのストレージはどのくらい永続的ですか? 正確な状況を詳しく説明します。

jQueryMobile と Phonegap を使用してアプリを構築しています。これは基本的にはブラウザ アプリですが、Phonegap を使用すると、パッケージ化してアプリ ストアで販売できるなど、さまざまな利点があります。

Phonegap は 2 つのストレージ方法を提供します。どちらの機能も、iOS、Android、Blackberry、およびその他の OS のネイティブ機能を調和させます。localStorage (プリミティブなキーと値のペア) と Web SQL データベースです。localStorage と Web SQL はどちらも、ブラウザーに属するストレージの形式です。そうは言っても、データがいつまで保存されるか、どのような状況で削除されるか、どのような状況で利用できないかなどはわかりません.

たとえば、アプリが localStorage または Web SQL を使用してデータを保存し、ユーザーが Android で別の標準ブラウザーに切り替えた場合、アプリは新しいブラウザーで開かれますか? これは、保存されたデータが利用できないことを意味しますか?

ユーザーがアプリを 1 年間使用しない場合 (私の場合は現実的なシナリオであり、必ずしも悪いシナリオではありません)、データは Cookie のように期限切れになるのでしょうか。他のアプリからのデータ?

または、次の場合など、データはさらに早く破棄されますか?

または、localStorage と Web SQL は、(Android で) [設定] > [アプリ] に移動し、アプリに関連付けられているユーザー データを積極的に削除するときにのみ削除する種類のストレージですか?

洞察をありがとう。古い W​​WW には有益な情報は何もありません。

アプリの更新の場合はどうなりますか。ローカル ストレージと Web ストレージは削除されますか、それとも残りますか?

4

8 に答える 8

58

ステップバイステップで答えさせてください

アプリがlocalStorageまたはWebSQLを使用してデータを保存し、ユーザーがAndroidで別の標準ブラウザーに切り替えた場合、アプリは新しいブラウザーで開かれますか?それは、保存されたデータが利用できないことを意味しますか?

データはブラウザの「キャッシュ」(正確にはキャッシュではありません)に保存されるため、ブラウザを変更したり、デフォルトのブラウザが削除または変更されるように設定したりすると、データが保存されます。

ユーザーがアプリを1年間使用しない場合(私の場合は現実的であり、必ずしも悪いシナリオではありません)、データはCookieのように期限切れになるか、大量のデータによってブラウザーのストレージからプッシュされますか?他のアプリからのデータ?

いいえ、データは使用されていなくてもそこにとどまります。したがって、ブラウザのキャッシュをクリアしても、キャッシュはそのまま残ります。

または、次のような場合など、データはさらに早く破棄されますか?-ユーザーがブラウザで別のサイトにアクセスした場合-ブラウザが手動で閉じられた場合-ブラウザプロセスが強制終了または終了した場合-など

いいえ、データは問題ありません。:-)

または、localStorageとWeb SQLは、(Androidで)[設定]> [アプリ]に移動し、アプリに関連付けられているユーザーデータを積極的に削除する場合にのみ削除する種類のストレージですか?

はい、データは、アプリから手動で削除するか、アプリをアンインストールした場合にのみ保存されます。それ以外の場合はすべて残ります。

編集:iOSの場合、デバイスのメモリが不足すると、OSはローカルストレージのデータを削除します。

于 2011-10-13T12:51:48.933 に答える
40

iOS 5.1以降、@ghostCoderの回答は無効になりました。Appleは、ローカルストレージの場所をいつでも空にできるキャッシュフォルダに移動することを決定しました。このディスカッションはここで追跡できます。

ローカルストレージに関するGoogleグループディスカッション

また、このブログでは、問題について詳しく説明しています。

http://www.marco.org/2011/10/13/ios5-caches-cleaning

ローカルストレージの場所を安全なApplication_Home>/Documentsの場所に手動で指定することができます。現在のローカルストレージの場所を特定するには、次のようなものを使用できます。

NSString* localStorageSubdir = (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/LocalStorage";
NSString* localStoragePath = [library stringByAppendingPathComponent:localStorageSubdir];
NSString* localStorageDb = [localStoragePath stringByAppendingPathComponent:@"file__0.localstorage"];

次のコードを使用すると、ローカルストレージに別の場所を設定できます。

NSString* bundleIdentifier = [[mainBundle infoDictionary] objectForKey:@"CFBundleIdentifier"];
NSString* libraryPreferences = @"Library/Preferences";
NSString* appPlistPath = [[bundlePath stringByAppendingPathComponent:libraryPreferences]    stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", bundleIdentifier]];

NSString *value;
NSString *key = @"WebKitLocalStorageDatabasePathPreferenceKey";
value = [appPlistDict objectForKey: key];
if (![value isEqual:ourLocalStoragePath]) {
    [appPlistDict setValue:yourPreferredLocalStoragePath forKey:key];
} 
于 2012-03-22T10:18:09.337 に答える
6

NativeStorage プラグインを試してください。https://www.npmjs.com/package/cordova-plugin-nativestorage .

これには、Android 共有設定や iOS NSUserDefaults などのプラットフォーム機能を実装する set、put、get 関数があり、データ ストアを可能な限り安全にします。

cordova plugin add cordova-plugin-nativestorage

NativeStorage.putObject("reference_to_value",<object>, <success-callback>, <error-callback>);

NativeStorage.getObject("reference_to_value",<success-callback>, <error-callback>);
于 2016-04-20T08:07:01.550 に答える
4

現在利用できる優れたソリューションは、Cordova Native Storage Pluginです。

信頼性を保証するために Android で SharedPreferences をネイティブに実装し、iOS で NSDefault をネイティブに実装することにより、iOS と Android でデータを保存するためのシンプルでありながらネイティブな永続的なメソッドを可能にします。

使用法:

インストール:

cordova plugin add cordova-plugin-nativestorage

値の保存:

NativeStorage.setItem("reference_to_value",<value>,<success-callback>, <error-callback>);

値の取得:

NativeStorage.getItem("reference_to_value",<success-callback>, <error-callback>);
于 2016-08-23T09:34:02.227 に答える
4

Androidでは、デフォルトで永続的なストレージです。ユーザーがアプリを更新しても、同じままです。

ユーザーは設定に移動して、キャッシュとデータをクリアできます。

iOSでも永続的なストレージですが、アプリの更新シナリオについてはわかりません。しかし、古いバージョン(5.1)ではそうではなく、6+では、コルドバ/フォンギャップによってすぐに有効になったフラグを介して永続的にできるようになりました。

于 2016-03-21T06:57:19.547 に答える
1

他のプラットフォームについて話すことはできませんが、私の 4.1 Android デバイスでは、localStorage を使用して jQuery Mobile でデータをローカルに保存しています。また、Android が私の知らないうちに毎週キャッシュをクリアすることがわかりました。Web SQL を試してみて、それがより良いかどうかを確認します。

于 2012-12-13T04:49:08.943 に答える
0

私はこれをオンラインで見つけましたng-persist

ユーザーがアプリを再インストールしても保持されるデータを (cordova を使用して) モバイル デバイスに保存します。

インストール

bower install ng-persist ngstorage --save

$persistコントローラーに注入する

.controller('MyCtrl', function($persist) {

    $persist
        .set(namespace, key, val)
        .then(function () {
            // saved
        });

    // read
    $persist
        .get(namespace, key, fallback)
        .then(function (val) {
            // val is either the value, if exists, or the fallback
        });

    // delete
    $persist
        .remove(namespace, key)
        .then(function () {
            // removed
        });

});
于 2016-02-19T12:37:25.620 に答える