处理SKDownload
更新时,我不确定如何对.failed
状态做出反应。
我在Apple 的开发者论坛中看到了发布的指南,但这意味着我必须等到用户退出并重新启动应用程序才能重新开始下载。
稍后当用户重新启动应用程序并在启动时调用 addTransactionObserver 方法时,事务观察器将检测到不完整的Transaction 并通过 updatedTransactions 委托方法通知应用程序。该应用程序可以再次重试下载托管内容。
与此相反,在本教程中,我被指示做相反的事情,并完成交易以让用户通过恢复购买来尝试再次下载。
即使下载失败,也有很多方法可以改善用户体验... ...我们可以完成交易,用户可以使用恢复按钮下载文件。
如果我们给用户选项,那么交易不应该完成,直到我们确定我们不再使用它(例如,如果您计划稍后恢复下载,那么不要完成交易)。
这意味着我可以恢复失败的下载。那可能吗?
我的paymentQueue: updatedDownloads
方法如下:
public func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) {
downloads.forEach ({ (download) -> Void in
switch download.state {
case .active:
// Update the UI to allow user to pause/cancel download
case .cancelled:
// Update UI to show download cancelled
queue.finishTransaction(download.transaction)
case .failed:
let description = download.error?.localizedDescription
// <-------------------- retry the download? What should I do here?
case .finished:
// Update the UI to reflect download complete
queue.finishTransaction(download.transaction)
case .paused:
// Update the UI to allow user to resume download
case .waiting:
// Begin download immediately, on advice of: https://stackoverflow.com/a/23602553/3718806
queue.start([download])
}
})
}
我希望我的用户能够重新尝试失败的下载,而无需重新启动应用程序。
我怎样才能做到这一点?