【问题标题】:How to retrieve an SKDownload of an already purchased content如何检索已购买内容的 SKDownload
【发布时间】:2013-07-19 07:14:59
【问题描述】:
存在托管内容时,应用购买流程的标准是:
进行交易
当交易进入“已购买”状态时,检索 SKDownload 并开始下载
下载完成后,我们可以将交易声明为“完成”
这很好。
想象一下,我们想要恢复所有购买的内容,这是因为我们删除并重新安装了我们的应用程序,或者仅仅是因为我们将它安装在另一台设备上。现在,WWDC 2012 会议证实了这一点,当您恢复所有购买时,您将获得要恢复的内容的完整列表,但您可能不想下载所有内容。在这种情况下,您应该让用户选择要下载的内容,然后将所选产品的 SKDownload 排队;一旦下载终止并且内容安装成功,您就可以宣布交易完成。
会议视频没有说明的是您应该如何处理被拒绝或延迟的下载。据我所知,没有办法将 SKDownload 保存在某处并稍后检索它,也没有 API 可以向 iTunes 询问这样的事情“给我这个已购买产品的 SKDownload”。
因此,根据我的说法,有两种选择可以绕过这种情况:
您将要求再次恢复未购买的东西;这并不优雅,但它有效
你开始这个过程,然后你暂停它;这将在稍后恢复。但是这个解决方案有几个缺点:您无法控制系统如何管理 SKDownload,如果在一定时间后它可能会取消。我从未尝试过这个解决方案。
其他人是否遇到过这个问题并找到了更好的解决方案?向 Apple 提出增强请求有意义吗?
【问题讨论】:
标签:
ios
in-app-purchase
iap-hosted-content
skdownload
【解决方案1】:
我总是按照您的建议去做,只是“重新购买”购买的物品,以便它通过正常的购买流程。在完成下载之前,您无法将交易标记为已完成。因此,如果您暂停它并且应用程序在您的应用程序再次启动时死机,队列将关闭并尝试完成购买,这将再次启动您的下载逻辑。这似乎更烦人,因为当我打开应用完成购买时,用户不断弹出这个东西。
SKDownload 文档说;
您的应用从不直接创建 SKDownload 对象。相反,在处理完付款后,您的应用会读取交易对象的下载属性以检索与交易关联的 SKDownload 对象数组。