相当于标题所说的内容。该代码适用于沙盒环境中的所有开发设备以及我的大多数用户。但是,有一些用户报告说下载过程没有超出等待状态(SKDownloadStateWaiting),即使是一直到夜晚也是如此。有些人设法在几次尝试后完成下载(完全关闭应用程序并完成恢复购买功能),因此它看起来确实是完全随机的。
以下是我用来管理下载的代码:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads
{
SKDownload *download = [downloads objectAtIndex:0];
SKPaymentTransaction *transaction = download.transaction;
// Keep track of download status
switch (download.downloadState) {
case SKDownloadStateActive:
// Present time remaining and percentage
break;
case SKDownloadStateWaiting:
// Present "Waiting..." label
break;
case SKDownloadStateFinished:
[self purchaseNonconsumableAtURL:download.contentURL forProductIdentifier:productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKDownloadStateFailed:
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKDownloadStateCancelled:
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
default:
break;
}
}
非常感谢任何帮助。
答案 0 :(得分:3)
您可以尝试通过调用
开始SKDownloadStateWaiting中的下载[[SKPaymentQueue defaultQueue] startDownloads:[NSArray arrayWithObject:download]];
我的应用程序总是会获得永久性的等待下载"当它试图恢复早期交易时的状态。我编辑了paymentQueue updatedDownloads功能,这样无论何时下载它处于等待状态的下载,它都会将该下载传递给startDownloads,这似乎解决了这个问题。
答案 1 :(得分:0)
值得检查您的用户是否在其设备上设置了12小时(上午/下午)或24小时,特别是如果您在本地执行收据验证并确保某些日期字段存在/有效(例如,购买日期) )。我的收据没有经过12小时时间设置的用户验证,我遇到了问题。为了使这更具优势,12小时时间用户的收据验证只有在GMT下午进行购买时才会失败。 这肯定值得在沙盒中进行测试。
如果您在收据验证中使用DateFormatter
/ NSDateFormatter
,请确保将区域设置设置为使用24小时时间(例如en_GB
)以确保其使用24小时时间格式。
例如,在Swift 3中,我的收据验证器的时间格式化程序属性将是这样的:
private let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_GB")
formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
return formatter
}()