프레임 워크 등록
프로젝트 세팅의 Build Phases탭의 Link Binary With Libraries에서 StoreKit.framework
를 선택하여 해당 프레임 워크를 추가 합니다.
헤더 등록
IAP를 사용하기 위해서는 프레임워크의 헤더들을 등록 하셔야 합니다.
#import <StoreKit/SKProductsRequest.h>
#import <StoreKit/SKProduct.h>
#import <StoreKit/SKPaymentQueue.h>
#import <StoreKit/SKPaymentTransaction.h>
스토어 설정 및 옵저버 등록
//스토어 사용 가능 여부 체크
if ([SKPaymentQueue canMakePayments]) {
//옵저버 등록
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
옵저버를 등록할때 SKPaymentTransactionObserver Protocol을 구현이 필요합니다. (update만 필수)
옵저버 Update 프로토콜
- (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) restoreTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"SKPaymentTransactionStateRestored");
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"SKPaymentTransactionStateFailed");
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"SKPaymentTransactionStatePurchased");
NSLog(@"Trasaction Identifier : %@", transaction.transactionIdentifier);
NSLog(@"Trasaction Date : %@", transaction.transactionDate);
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
아이템 정보 가져오기
SKProductsRequest *productRequest = [[SKProductsRequest alloc]
initWithProductIdentifiers:[NSSet setWithObject:@"아이템아이디"]];
productRequest.delegate = self;
[productRequest start];
init시 아이템아이디
배열로 동시에 여러개를 넣을수 있습니다.
SKProductsRequest에 대한 Delegate 추가
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"SKProductRequest got response");
if( [response.products count] > 0 ) {
SKProduct *product = [response.products objectAtIndex:0];
NSLog(@"Title : %@", product.localizedTitle);
NSLog(@"Description : %@", product.localizedDescription);
NSLog(@"Price : %@", product.price);
}
if( [response.invalidProductIdentifiers count] > 0 ) {
NSString *invalidString = [response.invalidProductIdentifiers objectAtIndex:0];
NSLog(@"Invalid Identifiers : %@", invalidString);
}
}
아이템 결제 요청
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
이 후에는 애플에서 자동으로 로그인처리 및 결재 처리가 됩니다. 결제가 완료 되면 옵저버의 Update 함수가 호출 됩니다.