2016-12-31 3 views
0

Ich mache eine Hybrid-App mit Zebrastreifen + Cordova mit PouchDB als Speicher. Das Problem ist, dass, wenn ich eine neue Version (auf Android) installieren Browser IndexedDB/WebSQL wird vollständig überschrieben, so dass alle Benutzerdaten ... gibt es eine Möglichkeit, eine Hybrid-App auf Android/iOS zu aktualisieren, die Benutzerdaten zu halten? dankcrosswalk + cordova indexedDB auf App-Update überschrieben

+1

Aktualisieren Sie einfach die App oder deinstallieren/Neuinstallation? Ich habe seit fast einem Jahr eine App in Produktion und dieses Problem hatte ich noch nie. – RamblinRose

+0

Die App ist noch nicht im Android Store, also installiere ich neu in der Entwicklungsphase. Wie funktioniert das Update? es ist nicht eine Art Neuinstallation? – user1658162

Antwort

2

IndexedDB ist an Ihrer Basis URL gebunden

wenn Sie App-Name oder der Stamm-URL (Inhalt src) in config.xml ändern, werden Sie nicht in der Lage sein, die vorherige zuzugreifen.

Ich, zum einen, verwende die LocalForage-Bibliothek und Cordova SQLite-Plugin, um Browser-Bugs und Implementierungsdetails zu glätten. iOS können einige Kopfschmerzen verursachen,

in config.xml Eintrag Mein Inhalt gewarnt:

<content src="index.html" /> 

Mein relevanten Plugin verwandte Einträge in config.xml:

<plugin name="cordova-plugin-sqlite-2" spec="~1.0.4" /> 
    <plugin name="cordova-plugin-crosswalk-webview" spec="~2.1.0"> 
     <variable name="XWALK_VERSION" value="21+" /> 
     <variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+" /> 
     <variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect" /> 
     <variable name="XWALK_MODE" value="embedded" /> 
     <variable name="XWALK_MULTIPLEAPK" value="false" /> 
    </plugin> 

Hier ist meine DB init-Funktion in der Javascript-App (es gibt ein Versprechen zurück):

function initDB() { 

    let driver = [localforage.INDEXEDDB, localforage.WEBSQL] 
    //force shim 
    if (platform() === constants.PLATFORM_IOS) { 
     if (window.sqlitePlugin) { 
      //WEBSQL shim throgh sqlite2 
      window.openDatabase = window.sqlitePlugin.openDatabase 
     } 
     driver = localforage.WEBSQL 
    } 


    let opts = { 
     driver: driver, 
     name: constants.DBName + '_forage', 
     version: constants.appVersion, 
     size: 4980736 
    } 

    localforage.config(opts) 


    let stores = { 
     state: localforage.createInstance({storeName: 'state'}), 
     api_cache: localforage.createInstance({storeName: 'apiCache'}) 
    } 

    const keys = Object.keys(stores) 

    let p = new Promise((res, rej)=> { 
     let r = 0; 

     function check() { 
      r++ 
      if (r === keys.length) { 
       res(stores) 
      } 
     } 
     keys.forEach(k=>stores[k].ready(check)) 

    }) 

    return p 

} 

loc alforage finden Sie hier: https://github.com/localForage/localForage.git

Verwandte Themen