Покупка в приложении: прислушайтесь к кнопке "отмена"?
Я пытаюсь понять, как я могу слушать кнопку "Отмена", которая появляется в предупреждении" подтверждение", показанном, когда пользователь пытается что-то купить. Вы знаете, официальная версия, сделанная Apple, выглядит примерно так: "подтвердите покупку в приложении. Вы хотите купить один $ продукт за $цену? [Отмена] [Покупка] "
Если я правильно понимаю свой код, то оповещение инициируется примерно следующим образом:
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Так что в принципе я хотел бы что-то сделать, если они нажмут отмена. Спасибо
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; } } }