【问题标题】:How to load an update in an iPhone application如何在 iPhone 应用程序中加载更新
【发布时间】:2011-12-16 12:01:29
【问题描述】:

我正在开发一个带有 inApp 付款的 iPhone 应用程序:每当用户支付一小笔款项时,他都会收到应用程序的更新。 “更新”是冒险游戏中的一种新“章节”,它由文本和 xml 文件、图像、声音等组成,通常是“资产”。下载资源后,它们会在应用程序内形成新章节(或阶段或步骤)的内容。

我正在寻找有关如何加载所有这些数据的建议:例如,设备在下载时可能会意外停止工作(电池电量不足等),或者由于某种原因可能会断开连接。这样,更新的完整性就会丢失。我进行了一些研究,并找到了使用 md5 校验和或套接字的解决方案,但在开始任何事情之前,我也想在这里问一下。例如,我想知道下载一个大的 zip 文件是个好主意,还是下载小的未压缩文件更好。

感谢任何建议。谢谢。

【问题讨论】:

    标签: iphone objective-c cocoa-touch download


    【解决方案1】:

    我有一个类似的设置,我所做的是维护一个已安装项目的数据库。我还有一个单独的可用项目列表,它会定期从我的服务器更新。

    当用户购买时,该项目会从“可用”列表复制到“已安装”列表,状态为“已购买”。然后进入下载队列。

    下载后,状态变为“已下载”,部分安装完成。然后状态最终更新为“已安装”。

    我通过让应用程序在启动(或无背景)时检查“已安装”列表中不具有“已安装”状态的任何项目来防止中断。根据状态,我要么重新下载,要么重新安装。

    至于文件完整性,我只是检查一个已知的标头,但 md5 或其他校验和会更好。

    更新:我的应用只下载一个文件(sqlite 数据库),所以如果它被中断,它必须从头开始。我在 NSURLConnection 支持的 Web 服务器上启用了 deflate,因此压缩是透明地完成的。但我确信您对使用 zip 文件的兴趣主要是为了使下载更简单。我也曾考虑过使用 zip 文件,但我找不到一种简单的方法来提取它。

    【讨论】:

    • 这很有趣。几个问题:当您开始下载时,您是否有某种标志(例如在文本文件或数据库中)记录应用程序的状态?我这样说是因为,如果我不小心关闭了我的 iPhone,当我重新启动 iPhone 并启动应用程序时,我可能想再次开始下载(如果没有告诉我我正在下载,我将如何重新开始?)。另一件事:临时断开连接需要处理吗?
    • 我依靠已安装项目的列表来查看是否有不完整的项目。每当应用程序恢复时,我都会检查这一点。如果连接以任何方式终止,我将重新开始下载。 HTTP 支持恢复下载,但我不想处理这个问题。
    【解决方案2】:

    我觉得你可以把游戏发布时使用的所有资源都放上去,有些章节是锁定的,当用户通过App Purchase购买章节时,你解锁了章节。 所以当用户购买章节时,用户不需要下载任何文件。

    【讨论】:

    • 不,这不是一个选项,因为章节的内容是由第三方添加的,并且可以随时更改。感谢您的温柔回复。
    【解决方案3】:

    您可以这样做:当他们付款时,他们购买了安装应用程序下一部分的权利。这并不意味着它会自动安装。

    您应该做的是在应用程序内的列表中列出下载,以便每当他们访问此列表时,应用程序都会使用 wifi 连接来测试他们是否有权安装这部分应用程序。如果是这样,程序会检查现有安装,或者您可以重写文件或其他任何内容。

    例如:

    锁显示用户尚未支付这些费用。如果此图像在您的应用程序中,则在加载之前,它会检查数据库或计算机中的其他内容,以检查用户是否已购买该阶段,如果是,则返回是或否。

    当您单击一个按钮时,它不会播放舞台,它实际上会下载文件。所以我把它命名为 stage 很糟糕,它应该命名为“Download stage 1”或类似的名称。


    编辑: 这完全取决于应用程序、文件的大小等。在大多数情况下,我只会使用未压缩的文件以方便用户使用,但如果它们是非常大的文件,则应该使用压缩文件。我个人从未使用过压缩文件,但我认为必须在 iphone 中提取文件会给某些用户带来问题。

    【讨论】:

    • 我一定在问题中写错了。我不想知道如何组织整个应用程序。我想知道执行文件下载的最佳方式。
    • @AsTheWormTurns 修改后的答案
    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 2010-09-08
    • 2011-12-13
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多