web-dev-qa-db-ja.com

Android and iOS?

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

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

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

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

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

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

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

洞察力をありがとう。昔のWWWには有益な情報はありません。

アプリの更新の場合に何が起こるか。ローカルストレージとWebストレージは削除されますか、それとも残りますか?

74
Wytze

段階的に答えさせてください

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

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

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

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

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

いいえ、データは大丈夫です。 :-)

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

はい。アプリから手動でデータを削除するか、アプリをアンインストールした場合にのみ、データが移動します。他のすべての場合はそのままです。

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

57
ghostCoder

IOS 5.1以降、@ ghostCoderの回答は無効になりました。 Appleはlocalstorageの場所をいつでも空にできるキャッシュフォルダーに移動することを決定しました。この議論はここで追跡できます。

Localstorageに関するGoogleグループディスカッション

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

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

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

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

次のコードを使用すると、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];
} 
38
dvtoever

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

Android共有設定およびiOS NSUserDefaultsなどのプラットフォーム機能を実装する関数を設定、配置、取得して、データストアを可能な限り安全にします。

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>);
6
user4466709

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

ユーザーは設定に移動し、キャッシュとデータをクリアできます。その場合、またはクリーンイットアプリのいずれかがそれを行う場合です。

iOSでも、永続的なストレージですが、アプリの更新シナリオについては知りません。しかし、古いバージョン(5.1)ではそうではありませんでしたが、6以降では、cordova/phonegapによって即座に有効にされたフラグを介して永続化できるようになりました。

4
aWebDeveloper

現在利用可能な優れたソリューションは、 The Cordova Native Storage Plugin です。

IOSのAndroidおよびNSDefaultにSharedPreferencesをネイティブに実装して、信頼性を保証することにより、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>);
4
Iceman

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

1
qJake

パフォーマンス、セキュリティ、および信頼性の点で、 [〜#〜] avoid [〜#〜] を使用してローカルストレージを使用し、 _Cordova-sqlite-storage_ 代わりに。

注意:

localStorageには使いやすいという利点がありますが、同期的に機能します。これは、UIスレッドをロックし、パフォーマンスを低下させる可能性があることを意味します。

localStorageのストレージ容量は限られていますが、通常は5MBです。

localStorageは、OS(Android、ios)によっていつでも消去できます。これは、データの永続性に関心がある場合、非常に深刻です。

一方で:

_Cordova-sqlite-storage_は非同期であり、UIスレッドをブロックしません。ネイティブデバイスストレージにデータを保存します。ストレージの容量に制限はありません。アプリをアンインストールしない限り、OSはデータを削除しません。

1
Akis Tofas

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

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

インストール

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
        });

});
0
niksmac