Как постоянное локальное хранилище на Android и iOS?
когда мое приложение хранит данные локально на телефоне, как постоянные хранилища? Я уточню точную ситуацию:
Я создаю приложение с jQueryMobile и Phonegap. Это, по сути, приложение для браузера, но использование Phonegap позволяет мне упаковать его и продать в магазинах приложений, среди других преимуществ.
Phonegap предлагает два способа хранения, оба из которых функции гармонизируют собственные функции iOs, Android, Blackberry и некоторых других ОС: localStorage (который является примитивные пары ключ-значение) и веб-база данных SQL.
Как localStorage, так и web SQL являются формами хранения, принадлежащими браузеру. Сказав это, я не могу узнать, как долго данные будут храниться, при каких обстоятельствах они будут удалены, при каких обстоятельствах они могут быть недоступны и т. д.
например, если приложение хранит данные с помощью localStorage или web SQL, а пользователь переключается на другой стандартный браузер на своем Android, будет ли приложение открыто с помощью нового браузер и означает ли это, что сохраненные данные недоступны?
Если пользователь не использует приложение в течение года (что в моем случае является реалистичным и не обязательно плохим сценарием), будут ли данные истекли, как cookie, или, возможно, были вытеснены из хранилища браузера потоком данных из других приложений?
или данные будут уничтожены еще раньше, например, когда:
- пользователь посещает другой сайт в браузере
- браузер закрывается вручную
- убить процесс браузера или умирает
- и т. д.
или localStorage и web SQL - это хранилище, которое вы удаляете только тогда, когда (в Android) вы переходите в Настройки > Приложения и активно удаляете пользовательские данные, связанные с приложением?
Спасибо за любые идеи. Там нет ничего информативного на ol ' WWW.
Что происходит в случае обновления приложения. Локальное и веб-хранилище будет удалено или останется?
8 ответов:
позвольте мне ответить шаг за шагом
Если приложение хранит данные с помощью localStorage или web SQL, а пользователь переключается на другой стандартный браузер на своем Android, будет приложение будет открыто с новым браузером и означает ли это, что сохраненный данные недоступны?
данные сохраняются в "кеше" (это не совсем кеш) браузера, поэтому, если вы измените браузер или установите настройки так, чтобы браузер по умолчанию был удален или изменен, данные пойдут.
Если пользователь не использует приложение в течение года (что в моем случае является реально и не обязательно плохой сценарий), данные есть истек, как куки, или, возможно, был вытеснен из браузера хранение потоком данных из других приложений?
нет, данные будут оставаться там независимо от того, как долго он не используется. Так что даже если вы очистите кэш браузера, он все еще будет там.
или данные быть уничтожены еще раньше, например, когда: - пользователь посещает другой сайт в браузере - браузер закрывается вручную - процесс браузера убит или умирает-и т. д
нет, данные остаются в порядке. : -)
или localStorage и web SQL - это тип хранилища, который вы только удалить при (в Android) вы идете в Настройки > Приложения, и активно удалить данные пользователя, связанные с приложением?
да, данные идут только если вы либо вручную удалите его из своего приложения или удалите свое приложение. Он останется во всех остальных случаях.
изменить: В случае iOS, ОС будет удалять данные в локальном хранилище, когда есть нехватка памяти в устройстве.
С iOS 5.1 @ghostCoder ответ больше не действителен. Apple решила переместить местоположение localstorage в папку кэша, которая может быть очищена в любое время. Вы можете отслеживать это обсуждение здесь:
Обсуждение групп Google на Localstorage
также этот блог объясняет проблему более подробно:
http://www.marco.org/2011/10/13/ios5-caches-cleaning
можно вручную указать ваш localstorage расположение в сейф Application_Home> / Documents расположение. Чтобы определить ваше текущее местоположение localstorage вы можете использовать что-то вроде этого:
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]; }
попробуйте плагин 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>);
хорошее решение, которое доступно сейчас Cordova Native Storage Plugin.
Это позволяет простой, но родной персистентный метод для сохранения данных в 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>);
On android это постоянное хранилище по умолчанию. Даже если пользователь обновляет приложение, оно остается прежним.
пользователь может перейти к настройкам и очистить кэш и данные в этом случае он идет или если говорят, что один из чистых-это приложение делает это.
еще на iOS это постоянное хранилище, но не знаю о сценарии обновления приложения. Но в более старой версии (5.1) этого не было и в 6+ они сделали, что это можно сделать постоянным через флаг, который был быстро включено cordova / phonegap.
Я не могу говорить за другие платформы, но на моем устройстве 4.1 Android я использую localStorage для хранения некоторых данных локально с помощью jQuery Mobile, и я обнаружил, что Android будет очищать мой кэш каждую неделю или около того без моего ведома. Я собираюсь дать веб-SQL попробовать и посмотреть, если это лучше.
Я нашел это в интернете
ng-persist
хранить данные на мобильных устройствах (с помощью cordova), которые сохраняются, даже если пользователь переустановит приложение
установить
bower install ng-persist ngstorage --save
Inject
$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 }); });
было бы лучше с точки зрения производительности, безопасности и надежности избежать использование локального хранилища и использование
Cordova-sqlite-storage
.некоторые замечания:
localStorage
имеет то преимущество, что он прост в использовании, но он работает синхронно. Это означает, что он может блокировать поток пользовательского интерфейса и привести к снижению производительности.
localStorage
имеет ограниченный объем памяти, как правило, его 5 Мб.
localStorage
может быть уничтожается ОС (android, ios) в любое время. Это действительно серьезно, если вы заботитесь о сохранности данных.С другой стороны:
Cordova-sqlite-storage
является асинхронным, и он не будет блокировать поток пользовательского интерфейса, он сохраняет ваши данные на собственном устройстве хранения, объем хранения не ограничен, ОС не будет удалять любые ваши данные, если вы не удалите приложение.
Comments