스토어 킷의 클래스 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;
'영삼이의 IT정보' 카테고리의 다른 글
맥용 SVN 서버 설치 (0) | 2012.06.12 |
---|---|
Tabbar 아이콘 (0) | 2012.06.11 |
iOS 키보드 (0) | 2012.06.10 |
아이폰 OS 개발 자료 총정리 (2) | 2012.06.04 |
UIImageJPEGRepresentation (0) | 2012.06.04 |