应用程序进入后台后出现SKDownload问题

时间:2018-10-11 00:59:38

标签: ios swift in-app-purchase iap-hosted-content skdownload

在我的应用程序中,如果该应用程序处于活动状态,则可以很好地下载由Apple托管的内容。但是,如果它回到后台并且经过了足够的时间,则当它再次变为活动状态时,SKDownload仍然处于active状态,但是没有进度报告。我已验证交易尚未完成。

有人知道为什么会这样吗?我的设备处于Wi-Fi上,我可以验证下载状态,因为我将SKDownload保存到实例变量中。因此,如果仅仅是后台不接收下载进度的问题,我仍然可以从myDownload.progress中读取当前值。但是,进度与以前完全一样,并且没有更新。

这对我来说是个大问题,因为如上所述,我确实将SKDownload存储到变量中。我这样做是为了防止重复下载开始。我的资产大于150MB,因此用户很可能不了解下载资产可能需要花费多长时间,并会尝试通过再次还原/“购买”项目来尝试进行第二次下载。因此,我将正在运行的下载存储到变量中,当新事务完成时,我检查下载是否已在运行。这是一个很棒的设计,因为它可以确保下载在最短的时间内完成。如果应用长时间在后台运行,然后出现此状态,则会出现唯一的问题:

  1. 下载报告处于活动状态
  2. 相应的交易尚未完成
  3. 由于某些原因,下载无法继续进行

鉴于上述保护措施,该问题很明显,因为下载未在运行,并且由于该应用发现重复的活动下载而无法开始新的下载。

我尝试恢复下载,但没有执行任何操作(我想是因为状态没有暂停)。

更新1

我找到了解决此问题的方法,但对我来说似乎是一个hack:

  1. 应用程序进入后台时暂停下载
  2. applicationWillEnterForeground中再次添加商店交易观察者(!!!)。
  3. 恢复已暂停的下载

2是最有趣的部分。我有一个单例,负责处理所有与商店相关的通知。我在didFinishLaunchingWithOptions中将其添加为事务观察器,而仅在willTerminate中将其删除。我验证了应用程序进入前台状态后,单例是相同的。但是,除非我再次将其添加为商店观察者,否则不会看到恢复下载。超级有趣。

0 个答案:

没有答案