7

こんにちは、Inapp-Purchase に復元機能を実装する必要があります。これは、メソッドを呼び出している「復元」ボタンを作成するためです。

-(void)restorePurchasedProductsWithProductId:(NSString*)prodID
{
    _productIdsArray = [[NSMutableArray alloc] init];
    productID = [prodID retain];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

Apple IDのパスワードを入力するポップアップが表示されます。その後、何も起こりません。

私はそれが呼ぶどこかで読みました

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

だから私はこれが好きだった

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    NSLog(@"paymentQueue");
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"restored");
                [self restoreTransaction:transaction];
                break;
            default:
                break;

        }
    }
}

しかし、問題は、上記のメソッドがこれも呼び出していないことです

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

または

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error

必要なプロトコルも含めました。

これらのデリゲート メソッドが復元プロセスを呼び出さない理由を教えてください。テストアカウントで試しています。

4

2 に答える 2

12

支払いキューのオブザーバーとして実装paymentQueueRestoreCompletedTransactionsFinished:および登録されているクラスを確認する必要があります。paymentQueue: restoreCompletedTransactionsFailedWithError:

このコードを に記述した場合は、UIViewControllerこれを に追加してみてくださいviewDidLoad:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

とでviewDidDisappear

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
于 2012-10-08T10:46:41.703 に答える
1

私も同様の問題に直面しています。

調査と修正の後、次のことに気付きました。

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]

メソッドはすぐには実装されません。

通常、私は transaction.transactionReceipt をチェックしてサーバーに送信し、結局トランザクションを終了するためにコールバックを送信します。最後に、終了トランザクションをすぐに呼び出さない問題を理解しました。コードを変更すると、アプリが動作します。

興味深いのは、サンドボックス環境でテストすると、すべて正常に動作することです。ただし、AppStore アプリではうまく動作しませんでした。この変更を行ったとき、私の問題は解決しました。

于 2014-04-22T11:49:44.167 に答える