스토어 킷의 클래스
SKProductsRequest : 삼풍 정보를 얻기 위해서 애플 앱스토어에 요청을 보낸다.
SKProductsResponse : 검색된 결과를 저장하는 클래스 SKProduct의 배열을 담고있다.
SKProduct: 상품 하나에 대한 정보를 저장한다. 가격, 설명 등이 주된 내용이다.
SKPayment: SKProduct를 구입하기 위해서 이클래스를 생성한다.
SKPaymentQueue: 결제를 요청하기 위해서 SKPaymentQueue 객체에 SKPayment를 넣어준다.
SKPaymentTransaction: 결제 결과를 담고 있는 클래스이다.
다양한 구매등록방법
웹서버 동기화, 로컬파일 생성, 사용자 기본값에 기록, 키체인 추가
//1. 프레임워크 추가
StoreKit.framework
//2. 헤더파일 추가
#import <StoreKit/StoreKit.h>
//3. 델리게이트 추가
SKProductsRequestDelegate, SKPaymentTransactionObserver
//4. 감시 객체 등록
- (void)viewDidUnload {
//앱에서 아이템을 구매하려면 먼저 트랜잭션 옵져버를 추가해야한다.
//옵져버가 있어야 실제 구매를 시작할 때 구매GUI사용 할수있음.
SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
[queue removeTransactionObserver:self];
}
- (void)viewDidLoad {
SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
[queue addTransactionObserver:self];
}
//5. 구매처리
-(IBAction)actionNoAD
{
if ([SKPaymentQueue canMakePayments])
{ // 스토어가 사용 가능하다면
NSLog(@"Start Shop!");
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // Observer를 등록한다.
}
else
{
NSLog(@"Failed Shop!");
}
//상품 요청을 생성하고 실행한다.
SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.corealism.FamilyMapCh.ddd"]];
productRequest.delegate = self;
[productRequest start];
}
//6. SKProductsRequest 델리게이트 구현
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"SKProductRequest got response");
if ( [response.products count] ==0 )
{
UIAlertView* askView = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Buy", @"buy items")
message:NSLocalizedString(@"Can't retrieve product information.", @"buy items")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Okay", @"confirm action")
otherButtonTitles:nil
];
[askView show];
[askView release];
return;
}
if( [response.products count] > 0 )
{
SKProduct *product = [response.products objectAtIndex:0];
NSLog(@"Title : %@", product.localizedTitle);
NSLog(@"Description : %@", product.localizedDescription);
NSLog(@"Price : %@", product.price);
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
if( [response.invalidProductIdentifiers count] > 0 )
{
NSString *invalidString = [response.invalidProductIdentifiers objectAtIndex:0];
NSLog(@"Invalid Identifiers : %@", invalidString);
}
}
//7.SKPaymentTransactionObserver 델리게이트 구현
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchasing:
NSLog(@"SKPaymentTransactionStatePurchasing");
break;
case SKPaymentTransactionStatePurchased:
NSLog(@"SKPaymentTransactionStatePurchased");
NSLog(@"Trasaction Identifier : %@", transaction.transactionIdentifier);
NSLog(@"Trasaction Date : %@", transaction.transactionDate);
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"SKPaymentTransactionStateFailed");
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"SKPaymentTransactionStateRestored");
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
default:
break;
}
}
}
//8. 과거에 구매한 내역
-(void) onRestror
{
SKPaymentQueue *queue =[SKPaymentQueue defaultQueue];
[queue restoreCompletedTransactions];
}
//9. 구매 등록
//사용자 설정을 변경한다.
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Puchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
//구매버튼 숨김
self.navigationItem.leftBarButtonItem=nil;