【问题标题】:Phonegap (1.4.1) Storage not working anymore with iOS 5.1Phonegap (1.4.1) 存储不再适用于 iOS 5.1
【发布时间】:2012-03-29 02:28:09
【问题描述】:

我使用 Phonegap 为 Android 和 iOS 开发了一个应用程序。这两个应用程序都已成功运行并在商店中可用。现在我为更新添加了一些更改。如果我在以前的版本中存储了数据(使用 SQLite 数据库)并更新到新版本,那么 IOs 5.1 上的 Storage Api 将不再工作。

如果我打电话

 var db = window.openDatabase("mydb", "1.0", "", 5000000);

什么都没有发生。

它在 Android 上运行良好,如果我进行新安装,或者如果我的应用程序的先前版本中没有数据已经​​存储在数据库中,它也可以运行。我正在使用其他 Phonegap 功能,例如 Notification 或 localStorage,它们运行良好。

任何帮助将不胜感激,因为我真的没有想法了:)

【问题讨论】:

    标签: iphone ios sqlite ios5 cordova


    【解决方案1】:

    Webkit 存储和 iOS 5.1 的两个问题都得到了修复

    1. 存储从 /Webkit 移动到 /Cache
    2. 在 iOS 5.1 下的应用更新(WebKit 错误)时,存储未调整为更新的文件夹结构

    https://issues.apache.org/jira/browse/CB-330

    这个解决方案似乎比仅仅更改调用私有 API 的 Webkit 数据的位置更安全。当应用程序运行时,会使用 Webkit 存储位置。在恢复或终止时,所有数据都会备份到文档文件夹中。时间戳确保 ab 旧备份不会覆盖较新的存储数据(如果应用崩溃...)。

    最好的:使用旧版 iOS 版本的用户使用带有该修复程序的应用程序,不会因任何 iOS 更新而遭受损失。这就是为什么一个人不应该等待......

    【讨论】:

      【解决方案2】:

      奇怪了,应该可以工作了……顺便说一句,在iOS5.1中,WebSQL被认为是可以随时删除的临时数据……

      可以通过调用私有 API 来更改 WebKit 数据的位置。您应该能够将位置设置为像 Documents 这样的安全文件夹。我还没有测试这个解决方案,但是看看这个帖子:http://stackoverflow.com/questions/4527905/how-do-i-enable-local-storage-in-my-webkit-based-application

      我认为更安全的方法是使用带有 phonegap 插件的 SQLite(与 WebSQL 相同)。该插件将数据库保存在 Document 文件夹中,这意味着数据库没有被删除,而是由 iCloud 保存。

      这里是原生 SQLite phonegap 插件:https://github.com/davibe/Phonegap-SQLitePlugin 关于这个插件,WebSQL API 有一些区别,这里是一个适配器: https://gist.github.com/2009518

      您还应该将旧的 WebSQL db 文件(存储在 Library/WebKit 或 Caches 目录中)迁移到 Document 文件夹。这是执行此操作的代码: https://gist.github.com/2009491

      在最新版本的 Cordova 中还实施了一个修复:https://issues.apache.org/jira/browse/CB-330(它会备份 Document 文件夹中的 DB 文件)

      如果数据很重要,您应该将其保存到服务器。我写了一个小库来将 SQlite DB 同步到服务器: https://github.com/orbitaloop/WebSqlSync

      【讨论】:

      • 嗨塞缪尔,感谢您的回复。我正在为 Android 开发 Java,使用 Phonegap:Build 为 iOS 获取我的 .ipa。因此,为了使用这个插件,我必须在 Mac 上使用 XCode 进行开发,而我目前还没有。我仍然尝试找到一个仅使用 javascript 的解决方案,但如果我在接下来的几天内找不到,我将尝试使用该插件。
      • 这是怎么归属的? Java 和 Phonegap:构建?
      • @Anna0815 :我们在这里谈论的是 iOS。我认为Android也有一个phonegap/cordova SQLite插件,但不是很有用,因为我认为Android没有这个问题。对于 Phonegap:build,在 Cordova 1.6 中实现了一个修复:issues.apache.org/jira/browse/CB-330
      【解决方案3】:

      在此创建了一个 Jira 问题:localStorage / SQLDatabase Error after App update

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        相关资源
        最近更新 更多