仅通过WiFi下载Apple托管的应用内购买内容

Joh*_*Mac 11 in-app-purchase ios

我有一个大型(> 1GB)应用程序内购买,我想使用Apple托管下载.Apple文档称,Apple托管的IAP内容对可以在蜂窝连接上下载的大小没有限制.我希望能够确保只有通过WiFi连接时才允许购买.

在下载过程中,用户可能会走出门并转换到手机.此时我想暂停或取消下载,直到WiFi再次可用.

我提出了一个TSI,Apple的回答是"我们的工程师已经审核了您的请求,并得出结论认为没有支持的方法来实现所需的功能"

在开始下载之前使用Reachability检查连接类型似乎是可行的,并在下载过程中使用观察者委托来确保手机没有切换到蜂窝电话.

这可行吗?有一个更好的方法吗?

此外,在下载过程中保持控制方面,从Apple文档中不清楚在后台运行的Apple托管下载是否在我的应用程序的进程中,或者它是否在进程外发生.换句话说,如果我的应用程序被终止,下载是保证停止还是继续在我的应用程序控制之外?

更新:有了一些经验,这个问题有点没有实际意义.连续下载数据要求手机具有WiFi连接和外部电源.如果没有这些,屏幕关闭后下载会暂停一段时间 - 我猜电话的电源管理.此外,IAP下载仍在进行中,即使您的应用程序崩溃也会继续(显式查杀应用程序会停止下载).当您的应用重新启动时,将调用StoreKit代理以完成下载和购买.

Leo*_*ica 5

你可以写一个"下载管理器",它会监视网络状态,调用pauseDownloads:resumeDownloads:对支付队列.看看这里如何观察网络变化.

关于进程中的下载与专用进程,我认为它在进程中发生.看一下API,我们被告知SKDownload只在事务状态是队列对象时排队对象SKPaymentTransactionStatePurchased,但是没有API我们可以获得所有购买状态的事务并且当前有排队的下载(就像我们在新NSURLSessionAPI中一样,其中一个模式处理外部守护进程中的下载).这个,以及在尝试下载时完全崩溃的应用程序的一些经验让我相信它正在进行中.在这些崩溃的应用程序中,我不得不恢复购买以便再次启动,这与StoreKit中公开的API兼容.


另一个建议是,如果你可以自己托管内容,你可以使用Apple的新NSURLSessionAPI,你可以明确告诉它只能通过WiFi下载.