2013-03-03 9 views
18

La mia domanda è essenzialmente un seguito o un chiarimento a this question.La memoria locale per un'app Phone Phone su un dispositivo Android è separata dal browser integrato?

Ho un'app per Android costruita con Javascript e Adobe's Phonegap Build service e sto utilizzando "memoria locale" per archiviare i dati sul dispositivo.

Da quell'altra domanda, ho appreso che i dati memorizzati nell'archivio locale sono essenzialmente "permanenti", in quanto rimarranno sul dispositivo indefinitamente, a meno che l'utente non agisca su di esso cancellando manualmente la cache per l'app o eliminando il app (e forse altre circostanze insolite con cui sono disposto a convivere).

Tuttavia, parte dello accepted answer mi ha confuso perché ha iniziato a confondere le linee tra parlare del browser del telefono e parlare di un'app Phone Phone.

Ciò che non mi è chiaro è se un'app su Android che utilizza PhoneGap utilizza la cache stessa come browser integrato del telefono. Phonegap è essenzialmente un'estensione della struttura del browser esistente o è un browser separato autonomo e autonomo?

In modo critico, se un utente cancella la cache nel proprio browser, avrà un impatto su un'app installata basata su PhoneGap?

+0

L'archiviazione di app è chiusa solo all'applicazione cache/contenuto/dati. Se pulisci la cache del tuo browser, non farà nulla sulla memoria locale del tuo database sulla tua applicazione. Ma se cancelli la tua cache/dati in Gestione applicazioni (ad esempio su Android) perdi i tuoi dati. Entrambe le cose mantengono spazi diversi e separati dove conservare. – ManuParra

risposta

19

Poiché PhoneGap utilizza Webiview per il rendering della tua app: WebView and Phonegap.

E Per motivi di sicurezza, ciascuna applicazione che utilizza WebView ha una propria cache e una cronologia. "Nessun utente o sistema operativo desidera che tali dati siano accessibili da applicazioni di terze parti". Quindi, in poche parole, la vostra applicazione manterrà la sua storia e dei dati nella sua cartella di cache e sarà cancellata in uno dei seguenti casi:

  • utente li cancellato manualmente.
  • L'utente ha utilizzato la schermata delle impostazioni dell'app e le ha cancellate.
  • App disinstallata.

Per saperne di più. prendere guardare la cache WebView: Cookie and window management

+0

Quindi se trasferisco il browser Web predefinito di Android a Firefox, l'app PhoneGap accederà comunque al mio LocalStorage? – Hugolpz

+1

Sì, l'app per browser deve essere completamente isolata dalla propria app. –

2

No, la cache creato all'interno del browser in-app può essere eliminato solo con i metodi:

window.localStorage.removeItem("key"); 

o

window.localStorage.clear(); 

o applicazione di disinstallazione

o azione manuale (cancella dati/cache) nel gestore applicazioni.

Ma la risposta migliore è fare un esperimento da soli e vedere cosa succede.

1

Con questa impostazione nel vostro mainActivity (che si estende Droidgap.)

super.appView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

Stiamo facendo la nostra applicazione per non memorizzare cache.

2

Sì, è separato ma ci sono momenti in cui è necessario passare una variabile di qualche tipo al browser In App. Rende la codifica molto più facile passare un oggetto ls da una webview corrente a un'altra come in iOS.

Ecco quello che ho fatto in PhoneGap

uso l'InAppBrowser executeScript() per passare una copia del localStorage visualizzazioni corrente a un altro.

//add the listener to detect when the page loads after inappbrowser is called into view 
ref.addEventListener('loadstop', function(){ 
    ref.executeScript({code: 'SetInAppBrowserLocalStorage(\''+localStorage+'\');'}); 
}); 

//In your inAppBrowser page you create a function that will get called on loadStop 
//This will pass "all" the contents of the main webviws localStorage to the webview 
//created by InAppBrowser 
function SetInAppBrowserLocalStorage(localStorageThatWasPassed){ 
    localStorage = localStorageThatWasPassed; 
}; 

Si potrebbe anche cancellare il localStorage creato da SetInAppBrowserLocalStorage() prima dell'uso lascia che vista pure.

Testato e funzionante al 100%:) ... fatemi sapere se avete bisogno di più aiuto

*** AGGIORNAMENTO *****

funziona questo ancora ... ma non sempre più. Dopo molti test mi rendo conto che questa non è semplicemente la strada da percorrere. A volte i dati semplicemente non vengono trasmessi abbastanza velocemente quando viene creata l'istanza inappbrowser. Ho parlato con i ragazzi di cordova tramite il tracker dei problemi e mi hanno detto che non era un modo sicuro di fare le cose ... ho capito ... ma la mia risposta a loro era cosa se volessi passare le variabili ls tra le pagine nella mia app..questo non sono nemmeno accessibili da internet ... Onestamente non capisco perché gli elementi ls non possano essere accessibili globalmente nell'app come è in iOS e nel resto del web. Se qualcuno ha una soluzione migliore mi piacerebbe sentirne parlare.

+0

e il contrario? possiamo passare variabili da inappbrowser al genitore? –

+0

Sì. Puoi passare i dati come parametri URL con un trucco intelligente che ho imparato da qui: https://groups.google.com/forum/#!msg/phonegap/REjk8GrlWrQ/hTWfzIpuke0J – greaterKing