สำหรับการทำ Transaction ในการ purchase item ต่างๆ และเมื่อ storekit ขึ้นหน้าจอให้ confirm การ purchase จะมีสอง
ปุ่มให้เลือกคือ Cancel และ Buy จำการ cancel Transactionstate ที่ได้จะเป็น SKPaymentTransactionStateFailed ซึ่งเรา
สามารถที่จะทำการตรวจสอบว่า transaction state นั้นการจากการ fail หรือ cancel โดย user โดยเช็คได้ดังนี้
transaction.error.code != SKErrorPaymentCancelled
โ่ค้ดเเบบสมบูรณ์
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}
- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
if (transaction.error.code != SKErrorPaymentCancelled)
{
// Optionally, display an error here.
if([self.delegate respondsToSelector:@selector(failedTransaction:)])
[self.delegate failedTransaction:transaction];
}else {
if([self.delegate respondsToSelector:@selector(canceledTransaction:)])
[self.delegate canceledTransaction:transaction];
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
if([self.delegate respondsToSelector:@selector(completeTransaction:)])
[self.delegate completeTransaction:transaction];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
if([self.delegate respondsToSelector:@selector(restoreTransaction:)])
[self.delegate restoreTransaction:transaction];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
No comments:
Post a Comment