我正在开发一款带有inApp付款的iPhone应用程序:每当用户支付少量款项时,他都会收到应用程序的更新。 “更新”是冒险游戏中的一种新的“章节”,它由文本和xml文件,图像,声音等组成,通常是“资产”。下载资产时,它们构成应用程序内新章节(或阶段或步骤)的内容。
我正在寻找有关如何加载所有这些数据的建议:例如,设备在下载时可能会意外停止工作(电量不足等),或者由于某种原因可能会断开连接。这样,更新的完整性将会丢失。我研究了一下,找到了带有md5校验和或套接字的解决方案,但在开始之前我也想在这里问一下。例如,我想知道下载一个大的zip文件是不是一个好主意,或者下载小的未压缩文件会更好。
任何建议表示赞赏。谢谢。
答案 0 :(得分:1)
我有类似的设置,我所做的是维护安装的项目数据库。我还有一个单独的可用项目列表,它会定期从我的服务器更新。
当用户购买一个项目时,该项目将从“可用”列表复制到“已安装”列表,状态为“已购买”。然后它进入下载队列。
下载后,状态将移至“已下载”并完成一些安装。然后状态最终更新为“已安装”。
我可以通过让应用程序检查“已安装”列表中没有“已安装”状态的任何项目启动(或取消反对)来防止中断。根据状态,我要么重新启动下载,要么重做安装。
至于文件完整性,我只检查一个已知的头,但md5或其他校验和会更好。
更新:我的应用只下载一个文件(sqlite数据库),所以如果它被中断,它必须从头开始。我在NSURLConnection支持的Web服务器上启用了deflate,因此压缩是透明完成的。但我确信您对使用zip文件的兴趣主要是为了简化下载。我曾经考虑过一次使用zip文件,但是我找不到一种简单的方法来提取它。
答案 1 :(得分:0)
我认为您可以在发布游戏时放置游戏使用的所有资源,并且某些章节被锁定,当用户通过App Purchase购买章节时,您将解锁该章节。 因此,当用户购买章节时,用户无需下载任何文件。
答案 2 :(得分:0)
你能做的就是:当他们付钱时,他们会购买安装应用程序下一部分的权利。这并不意味着它会自动安装。
你应该做的是在应用程序内的列表中进行下载,以便每当他们访问此列表时,应用程序使用wifi连接进行测试,他们有权安装应用程序的这一部分。如果是这样,程序将检查现有安装,或者您可以重新编写该文件或其他任何内容。
例如:
锁定显示用户尚未支付这些费用。如果此图像在您的应用程序中,在加载之前,它会检查数据库或计算机中的某些内容,以检查用户是否已购买该阶段,如果是,则返回Yes或Nay。
每当您点击某个按钮时,它都不会播放该舞台,它实际上会下载该文件。因此,在我的部分命名它是不好的,应该命名为#34;下载第1阶段"或类似的东西。
编辑: 这完全取决于应用程序,文件的大小等。在大多数情况下,我只会有未压缩的文件,以使用户更容易,但如果它们是非常大的文件,您应该使用压缩文件。我个人从未使用压缩文件,但我认为必须在iphone中提取文件会给某些用户带来问题。