在我的应用程序中,如果该应用程序处于活动状态,则可以很好地下载由Apple托管的内容。但是,如果它回到后台并且经过了足够的时间,则当它再次变为活动状态时,SKDownload
仍然处于active
状态,但是没有进度报告。我已验证交易尚未完成。
有人知道为什么会这样吗?我的设备处于Wi-Fi上,我可以验证下载状态,因为我将SKDownload
保存到实例变量中。因此,如果仅仅是后台不接收下载进度的问题,我仍然可以从myDownload.progress
中读取当前值。但是,进度与以前完全一样,并且没有更新。
这对我来说是个大问题,因为如上所述,我确实将SKDownload
存储到变量中。我这样做是为了防止重复下载开始。我的资产大于150MB,因此用户很可能不了解下载资产可能需要花费多长时间,并会尝试通过再次还原/“购买”项目来尝试进行第二次下载。因此,我将正在运行的下载存储到变量中,当新事务完成时,我检查下载是否已在运行。这是一个很棒的设计,因为它可以确保下载在最短的时间内完成。如果应用长时间在后台运行,然后出现此状态,则会出现唯一的问题:
鉴于上述保护措施,该问题很明显,因为下载未在运行,并且由于该应用发现重复的活动下载而无法开始新的下载。
我尝试恢复下载,但没有执行任何操作(我想是因为状态没有暂停)。
我找到了解决此问题的方法,但对我来说似乎是一个hack:
applicationWillEnterForeground
中再次添加商店交易观察者(!!!)。 2是最有趣的部分。我有一个单例,负责处理所有与商店相关的通知。我在didFinishLaunchingWithOptions
中将其添加为事务观察器,而仅在willTerminate
中将其删除。我验证了应用程序进入前台状态后,单例是相同的。但是,除非我再次将其添加为商店观察者,否则不会看到恢复下载。超级有趣。