Покупка в приложении: прислушайтесь к кнопке "отмена"?


Я пытаюсь понять, как я могу слушать кнопку "Отмена", которая появляется в предупреждении" подтверждение", показанном, когда пользователь пытается что-то купить. Вы знаете, официальная версия, сделанная Apple, выглядит примерно так: "подтвердите покупку в приложении. Вы хотите купить один $ продукт за $цену? [Отмена] [Покупка] "

Если я правильно понимаю свой код, то оповещение инициируется примерно следующим образом:

SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
[[SKPaymentQueue defaultQueue] addPayment:payment];

Так что в принципе я хотел бы что-то сделать, если они нажмут отмена. Спасибо

2 2

2 ответа:

Реализовать метод paymentQueue:updatedTransactions: из протоколаSKPaymentTransactionObserver . Там вы можете проверить transactionState и error каждого объекта transaction.

Я использовал что-то вроде этого:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                if (transaction.error.code == SKErrorPaymentCancelled) {
                    /// user has cancelled
                    [self finishTransaction:transaction wasSuccessful:NO];
                }
                else if (transaction.error.code == SKErrorPaymentNotAllowed) {
                    // payment not allowed
                    [self finishTransaction:transaction wasSuccessful:NO];
                }
                else {
                    // real error
                    [self finishTransaction:transaction wasSuccessful:NO];
                    // show error
                }
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
                break;
            default:
                break;
        }
    }
}

Используйте что-то вроде этого:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                if (transaction.error.code == SKErrorPaymentCancelled) {
                    /// user has cancelled
                    [self finishTransaction:transaction wasSuccessful:NO];
                }
                else if (transaction.error.code == SKErrorPaymentNotAllowed) {
                    // payment not allowed
                    [self finishTransaction:transaction wasSuccessful:NO];
                }
                else {
                    // real error
                    [self finishTransaction:transaction wasSuccessful:NO];
                    // show error
                }
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
                break;
            default:
                break;
        }
    }
}