Qual é a permanência do armazenamento local no Android e no iOS?

Quando meu aplicativo armazena dados localmente em um telefone, qual é a permanência desse armazenamento? Eu elaborarei a situação exata:

Eu estou construindo um aplicativo com jQueryMobile e Phonegap. É essencialmente um aplicativo de navegador, mas usar o Phonegap me permite empacotá-lo e vendê-lo nas lojas de aplicativos, entre outras vantagens.

Phonegap oferece duas formas de armazenamento, ambas funções harmonizam funções nativas de iOS, Android, Blackberry e alguns outros sistemas operacionais: localStorage (que é pares primitivos de valor-chave) e um database Web SQL. O localStorage e o web SQL são formas de armazenamento que pertencem ao navegador. Tendo dito isso, não consigo descobrir por quanto tempo os dados ficarão armazenados, sob quais circunstâncias serão excluídos, sob quais circunstâncias eles podem não estar disponíveis, etc.

Por exemplo, se o aplicativo armazena dados com localStorage ou web SQL e o usuário alterna para um navegador padrão diferente no Android, o aplicativo será aberto com o novo navegador e isso significa que os dados armazenados não estão disponíveis?

Se o usuário não usar o aplicativo por um ano (o que no meu caso é um cenário realista e não necessariamente ruim), os dados expirarão como um cookie ou talvez tenham sido retirados do armazenamento do navegador por um dilúvio de dados de outros aplicativos?

Ou os dados serão destruídos ainda mais cedo, como quando: – o usuário visita outro site no navegador – o navegador é fechado manualmente – o processo do navegador é morto ou morre – etc

Ou o localStorage e o web SQL são o tipo de armazenamento que você exclui somente quando (no Android) você acessa Configurações> Aplicativos e remove ativamente os dados do usuário associados ao aplicativo?

Obrigado por qualquer insight. Não há nada informativo por aí na WWW.

O que acontece no caso da atualização do aplicativo. O armazenamento local e da web será excluído ou permanecerá?

Deixe-me responder passo a passo

se o aplicativo armazenar dados com localStorage ou web SQL e o usuário alternar para um navegador padrão diferente no Android, o aplicativo será aberto com o novo navegador e isso significa que os dados armazenados não estarão disponíveis?

Os dados são salvos no ‘cache’ (não é exatamente o cache) do navegador, portanto, se você alterar o navegador ou definir as configurações para que o navegador padrão seja removido ou alterado, os dados serão enviados.

Se o usuário não usar o aplicativo por um ano (o que no meu caso é um cenário realista e não necessariamente ruim), os dados expirarão como um cookie ou talvez tenham sido retirados do armazenamento do navegador por um dilúvio de dados de outros aplicativos?

Não, os dados permanecerão lá, independentemente de quanto tempo não sejam usados. Portanto, mesmo que você limpe o cache do navegador, ele ainda estará lá.

Ou os dados serão destruídos ainda mais cedo, como quando: – o usuário visita outro site no navegador – o navegador é fechado manualmente – o processo do navegador é morto ou morre – etc

Não, os dados ficam bem. 🙂

Ou o localStorage e o web SQL são o tipo de armazenamento que você exclui somente quando (no Android) você acessa Configurações> Aplicativos e remove ativamente os dados do usuário associados ao aplicativo?

Sim, os dados são válidos apenas se você os excluir manualmente do aplicativo ou desinstalar o aplicativo. Ele ficará em todos os outros casos.

EDIT: No caso do iOS, o sistema operacional irá remover os dados no armazenamento local quando houver falta de memory no dispositivo.

A partir do iOS 5.1 @ a resposta do ghostCoder não é mais válida. A Apple decidiu mover o local de armazenamento local para uma pasta de cache que pode ser esvaziada a qualquer momento. Você pode acompanhar esta discussão aqui:

Discussão dos Grupos do Google no Localstorage

Também este blog explica o problema com mais detalhes:

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

É possível apontar manualmente seu local de armazenamento local para um local seguro de Application_Home> / Documents . Para determinar seu local atual de armazenamento local, você pode usar algo assim:

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

O código a seguir permite que você defina outro local para o seu armazenamento local:

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

Experimente o plugin NativeStorage. https://www.npmjs.com/package/cordova-plugin-nativestorage .

Ele definiu, colocou e obtém funções que implementam resources de plataforma como as preferências compartilhadas do Android e os NSUserDefaults do iOS, o que torna o armazenamento de dados o mais seguro possível.

 cordova plugin add cordova-plugin-nativestorage NativeStorage.putObject("reference_to_value",, , ); NativeStorage.getObject("reference_to_value",, ); 

Uma boa solução disponível agora é o plugin Cordova Native Storage .

Ele permite que um método persistente simples, mas nativo, salve dados no iOS e no Android, implementando nativamente o SharedPreferences no Android e o NSDefault no iOS para garantir a confiabilidade.

Uso:

Instalação:

 cordova plugin add cordova-plugin-nativestorage 

Armazenando valores:

 NativeStorage.setItem("reference_to_value",,, ); 

Recuperando valores:

 NativeStorage.getItem("reference_to_value",, ); 

No android , é um armazenamento permanente por padrão. Mesmo que o usuário atualize seu aplicativo, ele permanecerá o mesmo.

O usuário pode ir para as configurações e limpar o cache e os dados, caso em que vai ou se diz que um dos aplicativos clean-it faz isso.

Mesmo no iOS , é um armazenamento permanente, mas não conhece o cenário de atualização do aplicativo. Mas na versão mais antiga (5.1) não foi e em 6 + eles fizeram que ele pode ser tornado permanente através de uma bandeira que foi prontamente ativada por cordova / phonegap.

Eu não posso falar por outras plataformas, mas no meu dispositivo Android 4.1, estou usando o localStorage para armazenar alguns dados localmente com o jQuery Mobile, e descobri que o Android limpará meu cache toda semana, sem meu conhecimento. Vou testar o Web SQL e ver se isso é melhor.

Eu encontrei este ng-persist on ng-persist line

Armazene dados em dispositivos móveis (usando cordova) que persista mesmo se o usuário reinstalar o aplicativo

Instalar

bower install ng-persist ngstorage --save

Injetar $persist em seu controlador

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

Seria melhor, em termos de desempenho, segurança e confiabilidade, EVITAR o uso do armazenamento local e usar o Cordova-sqlite-storage .

Algumas notas:

localStorage tem a vantagem de ser fácil de usar, mas funciona de maneira síncrona. Isso significa que ele pode bloquear o thread da interface do usuário e causar desempenho lento.

localStorage tem uma quantidade limitada de armazenamento, geralmente seus 5mb.

localStorage pode ser eliminado pelo sistema operacional (android, ios) a qualquer momento. Isso é realmente sério se você se preocupa com a persistência de dados.

Por outro lado:

Cordova-sqlite-storage é asynchronous e não bloqueará o thread da UI, salvará seus dados no armazenamento nativo do dispositivo, a quantidade de armazenamento não será limitada, o SO não excluirá nenhum dos seus dados, a menos que você desinstale o aplicativo.

Intereting Posts