2016-12-31 4 views
0

Я делаю гибридное приложение с пешеходным переходом + кордорой, используя pouchDB в качестве хранилища. проблема в том, что при установке новой версии (на android) браузера indexedDB/webSQL полностью перезаписывается, поэтому все пользовательские данные ... есть ли способ обновить гибридное приложение на android/ios, сохраняющее пользовательские данные? благодаряcrosswalk + cordova indexedDB, перезаписываемый при обновлении приложения

+1

Вы просто обновляете приложение или удаляете/переустанавливаете? У меня есть приложение в производстве почти год, и у меня никогда не было этой проблемы. – RamblinRose

+0

приложение еще не находится в магазине Android, поэтому я переустанавливаю его на этапе разработки. как работает обновление? это не переустановка? – user1658162

ответ

2

IndexedDB привязан к базовому URL

если изменить название приложения или базовый URL (содержание Src) в config.xml, вы не сможете получить доступ к предыдущему.

Я, например, использую библиотеку localforage и плагин corova sqlite для сглаживания ошибок браузера и деталей реализации. IOS может вызвать некоторые головные боли, быть предупреждены

Моей запись содержимого в config.xml:

<content src="index.html" /> 

Моих отношении связанных плагин запись 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> 

Вот моя функция DB инициализации в приложении Javascript (это возвращает обещание):

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 можно найти здесь: https://github.com/localForage/localForage.git

Смежные вопросы