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