我有一个大型(> 1GB)应用程序内购买,我想使用Apple托管下载 . Apple文档称,Apple托管的IAP内容对可以在蜂窝连接上下载的大小没有限制 . 我希望能够确保只有通过WiFi连接时才允许购买 .
在下载过程中,用户可能会走出门并转换到手机 . 此时我想暂停或取消下载,直到WiFi再次可用 .
我提出了一个TSI,Apple的回答是“我们的工程师已经审核了您的请求,并得出结论认为没有支持的方法来实现所需的功能”
在开始下载之前使用Reachability来检查连接类型似乎是可行的,并且在下载期间使用观察者委托来确保手机没有切换到蜂窝电话 .
这可行吗?有一个更好的方法吗?
此外,在下载过程中保持控制方面,从Apple文档中不清楚在后台运行的Apple托管下载是否在我的应用程序的过程中,或者它是否在进程外发生 . 换句话说,如果我的应用程序被终止,下载是保证停止还是继续在我的应用程序控制之外?
Update: 在一些经验的帮助下,这个问题有点没有实际意义 . 连续下载数据要求手机具有WiFi连接和外部电源 . 如果没有这些,屏幕关闭后下载会暂停一段时间 - 我猜电话的电源管理 . 此外,IAP下载仍在进行中,即使您的应用程序崩溃也会继续(显式查杀应用程序会停止下载) . 当您的应用重新启动时,将调用StoreKit代理以完成下载和购买 .
1 回答
您可以编写"download manager"来监控网络状态,并在支付队列中调用
pauseDownloads:
和resumeDownloads:
. 看看here如何观察网络变化 .关于进程中的下载与专用进程,我认为它发生在进程中 . 看一下API,我们被告知只有在事务状态是
SKPaymentTransactionStatePurchased
时才排队SKDownload
对象,但是没有API我们可以获得所有购买状态的事务并且当前有排队的下载(就像我们在新的NSURLSession
API中一样) ,其中一种模式处理外部守护进程中的下载) . 这个,以及在尝试下载时完全崩溃的应用程序的一些经验让我相信它正在进行中 . 在这些崩溃的应用程序中,我不得不恢复购买以便再次启动,这与StoreKit中公开的API兼容 .另一个建议是,如果您可以自己托管内容,可以使用Apple的新
NSURLSession
API,您可以明确告诉它只能通过WiFi下载 .