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 時間設定のユーザーで領収書が検証されないという問題がありました。これをさらに特殊なケースにするために、GMT の午後に購入が行われた場合にのみ、12 時間勤務のユーザーの領収書の検証が失敗します。 これは確かにサンドボックスでテストする価値があります

DateFormatter領収書の検証で/を使用する場合は、必ず 24 時間形式を使用するようNSDateFormatterにロケールをen_GB24 時間形式 (例: ) に設定してください。

たとえば、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 に答える