3

和标题说的差不多。该代码适用于我在沙盒环境中的所有开发设备以及我的大多数用户。但是,有一些用户报告说下载过程不会超出等待状态 (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;
    }
}

任何帮助将非常感激。

4

2 回答 2

3

您可以尝试通过调用开始在 SKDownloadStateWaiting 中的下载

[[SKPaymentQueue defaultQueue] startDownloads:[NSArray arrayWithObject:download]];

当我的应用程序尝试恢复较早的事务时,它总是会获得处于永久“等待”状态的下载。我编辑了 paymentQueue updatedDownloads 函数,这样每当调用处于等待状态的下载时,它就会将该下载传递给 startDownloads,这似乎解决了这个问题。

于 2014-05-12T06:40:36.610 回答
0

值得检查您的用户在他们的设备上是否有 12 小时 (AM/PM) 或 24 小时时间设置,特别是如果您在本地执行收据验证并确保某些日期字段存在/有效(例如,购买日期)。我遇到的问题是收据没有与具有 12 小时时间设置的用户进行验证。为了使这种情况更加极端,只有在格林威治标准时间下午进行购买时,用户 12 小时时间的收据验证才会失败。 这当然是一个值得在沙盒中测试的东西

如果您在收据验证中使用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
}()
于 2016-12-13T16:40:37.553 回答