Насколько постоянным является локальное хранилище на Android и iOS?

Когда мое приложение хранит данные локально на телефоне, насколько постоянным является это хранилище? Я уточню точную ситуацию:

Я создаю приложение с jQueryMobile и Phonegap. Это, по сути, приложение для браузера, но использование Phonegap позволяет мне его упаковывать и продавать в магазинах приложений, среди прочих преимуществ.

Phonegap предлагает два способа хранения, обе из которых гармонизируют собственные функции iOs, Android, Blackberry и некоторых других ОС: localStorage (это примитивные пары ключ-значение) и база данных Web SQL. И localStorage, и веб-SQL - это формы хранения, принадлежащие браузеру. Сказав это, я не могу узнать, как долго данные будут храниться, при каких обстоятельствах он будет удален, при каких обстоятельствах он может быть недоступен и т.д.

Например, если приложение хранит данные с localStorage или веб-SQL, и пользователь переключается на другой стандартный браузер на своем Android, приложение будет открыто с новым браузером и означает ли это, что сохраненные данные недоступны?

Если пользователь не использует приложение в течение года (что в моем случае является реалистичным и не обязательно плохим сценарием), будут ли данные истекли, как файлы cookie, или, возможно, были вытолкнуты из хранилища браузера потоп данных из других приложений?

Или данные будут уничтожены еще раньше, например, когда: - пользователь посещает другой сайт в браузере - браузер закрыт вручную - процесс браузера убит или умирает - etc

Или localStorage и web SQL - вид хранилища, который вы удаляете только тогда, когда (в Android) вы переходите в "Настройки" > "Приложения" и активно удаляете пользовательские данные, связанные с приложением?

Спасибо за любые идеи. Там нет ничего информативного на ol 'WWW.

Что происходит в случае обновления приложения. Локальное и веб-хранилище будет удалено или останется?

Ответ 1

Позвольте мне шаг за шагом ответить

если приложение хранит данные с localStorage или веб-SQL, а пользователь переключается на другой стандартный браузер на Android, будет приложение будет открыто с новым браузером, и это означает, что сохраненный данные недоступны?

Данные сохраняются в кеше (это не совсем кеш) браузера, поэтому, если вы изменили браузер или задали настройки, чтобы удалить или изменить браузер по умолчанию, данные будут идти.

Если пользователь не использует приложение в течение года (что в моем случае является реалистичный и не обязательно плохой сценарий), будут ли данные истек, как файл cookie, или, возможно, был вытолкнут из браузера хранения путем потопа данных из других приложений?

Нет, данные будут оставаться там независимо от того, как долго он не используется. Поэтому, даже если вы очистите кеш браузера, он все равно будет там.

Или данные будут уничтожены еще раньше, например, когда: - пользователь посещает другой сайт в браузере - браузер закрыт вручную - браузерный процесс убит или умирает - etc

Нет, данные остаются в силе.: -)

Или localStorage и web SQL - вид хранилища, который вы только удалите, когда (в Android) вы перейдете в "Настройки" > "Приложения" и активно удалите пользовательские данные, связанные с приложением?

Да, данные выводятся только в том случае, если вы вручную удалили его из своего приложения или удалили приложение. Он останется во всех остальных случаях.

EDIT: В случае iOS ОС удалит данные в локальном хранилище, когда в устройстве будет нехватка памяти.

Ответ 2

В ответ на iOS 5.1 @ghostCoder ответ больше не действителен. Apple решила переместить локальное хранилище в папку кеша, которую можно опорожнить в любое время. Вы можете отслеживать эту дискуссию здесь:

Обсуждение групп Google в Localstorage

Также этот блог объясняет проблему более подробно:

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

Ответ 3

Попробуйте плагин 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>);

Ответ 4

В android это постоянное хранилище по умолчанию. Даже если пользователь обновляет приложение, он остается прежним.

Пользователь может перейти к настройкам и очистить кэш и данные, и в этом случае он будет работать, или, если скажет, что это делает это приложение для чистых приложений.

Даже в iOS это постоянное хранилище, но не знает о сценарии обновления приложения. Но в более старой версии (5.1) это было не так, и в 6+ они сделали, что это можно сделать постоянным через флаг, который был быстро включен с помощью cordova/phonegap.

Ответ 5

Хорошее решение, которое доступно сейчас, Корневой накопитель Cordova.

Он позволяет использовать простой, но естественный устойчивый метод для сохранения данных в iOS и Android путем естественного внедрения SharedPreferences в Android и NSDefault в iOS, чтобы гарантировать надежность.

Использование:

Установка:

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

Ответ 6

Я не могу говорить на других платформах, но на моем Android-устройстве 4.1 я использую localStorage для хранения некоторых данных локально с помощью jQuery Mobile, и я обнаружил, что Android очистит мой кеш каждую неделю или около того без моего знание. Я собираюсь дать Web SQL попробовать и посмотреть, что лучше.

Ответ 7

Я нашел это онлайн 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
        });

});

Ответ 8

Было бы лучше с точки зрения производительности, безопасности и надежности AVOID использовать локальное хранилище и использовать Cordova-sqlite-storage.

Некоторые примечания:

localStorage имеет то преимущество, что он прост в использовании, но работает синхронно. Это означает, что он может блокировать поток пользовательского интерфейса и вызывать низкую производительность.

localStorage имеет ограниченный объем хранения, обычно его 5 МБ.

localStorage может быть уничтожен ОС (android, ios) в любое время. Это действительно серьезно, если вы заботитесь о сохранности данных.

С другой стороны:

Cordova-sqlite-storage является асинхронным и не блокирует поток пользовательского интерфейса, он сохраняет ваши данные на собственном носителе устройства, объем хранения не ограничен, ОС не удалит какие-либо данные, если вы не удалите приложение.