Develop
2013.11.20 11:50
[ios] iOS In App Purchase 코드 부분 샘플 1
조회 수 11806 댓글 0
실제 코드에 IAP 삽입 방법.
일단 cocos2d cclayer로 store.h/m을 만든다.
store.h 파일 내용
#import <StoreKit/StoreKit.h> /* 아래 delegate를 지정해야 함. SKProductsRequestDelegate : 상품정보 획득에 사용 SKPaymentTransactionObserver : 상품 구매에 관련(구입성공,실패,재구입 등 구매 트랜잭션) */ //@interface store : CCLayer @interface store : UIViewController <SKProductsRequestDelegate, SKPaymentTransactionObserver> { SKProductsRequest *request; SKPayment *payment; NSMutableArray *productDetailsList; NSMutableArray *productIdentifierList; } ...
store.m 파일 내용
-(id) init{ if( (self=[super init])) { [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; //이게 없으면 작동안함 productDetailsList = [[NSMutableArray alloc] init]; productIdentifierList = [[NSMutableArray alloc] init]; [productIdentifierList addObject:@"인앱ID1"]; [productIdentifierList addObject:@"인앱ID2"]; [productIdentifierList addObject:@"인앱ID3"]; [productIdentifierList addObject:@"인앱ID4"]; [productIdentifierList addObject:@"인앱ID5"]; [productIdentifierList addObject:@"인앱ID6"]; //인앱ID는 등록하신 ID 그냥 갔다쓰면 됨(그대로쓰면 됨) //이부분은 솔직히 넣야되는지 없어도 되는지 잘모르겠.. if ([SKPaymentQueue canMakePayments]) { NSLog(@"GOOD"); } else { NSLog(@"NOPE"); } //이부분은 인앱 구매사용가능한 상태면 GOOD, 아니면 NOPE //그다음에 메뉴 버튼 만들고 셀렉터를 원하는 것으로 골라서하면 됨. //셀렉터를 buy라고 그냥 정하고 진행하겠음. } return self; } -(void)buy{ request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithArray:productIdentifierList]]; request.delegate = self; [request start]; payment = [SKPayment paymentWithProductIdentifier:@"인앱ID1"]; [[SKPaymentQueue defaultQueue] addPayment:payment]; [request release]; //이렇게 하면 인앱ID1에 대하여 결제가 이루어짐. } //요기부터 아래는 그냥 넣으세요 -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { { [productDetailsList addObjectsFromArray: response.products]; //[productDisplayTableView reloadData]; NSLog(@"products count = %d", [response.products count]); NSLog(@"SKProductRequest got response"); for (SKProduct *product in response.products) { NSLog(@"Title : %@", product.localizedTitle); NSLog(@"Description : %@", product.localizedDescription); NSLog(@"Price : %@", product.price); } NSLog(@"response.invalidProductIdentifiers count = %d", [response.invalidProductIdentifiers count]); for (int i=0; i<[response.invalidProductIdentifiers count]; i++) { NSString *invalidString = [response.invalidProductIdentifiers objectAtIndex:i]; NSLog(@"Invalid Identifiers : %@", invalidString); //이건뭐 제대로 안된경우에 로그로 알려줌 } } } -(void)purchasedTransaction:(SKPaymentTransaction *)transaction{ NSLog(@"구매성공"); //구매성공이면 로그로 구매성공이라고 뜨구요 [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; //이 부분에 원하는 코드를 넣으면 구매되고 나서 적용되니까 알아서 사용 } -(void)restoreTransaction:(SKPaymentTransaction *)transaction{ NSLog(@"재구매"); [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; //이 부분은 재구매 할 때라고 하는데 제대로 작용하는지는 모름 } -(void)failedTransaction:(SKPaymentTransaction *)transaction{ NSLog(@"구매실패"); [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; //구매 실패 할 경우를 구현하면 됨. } //이건 그냥 넣으시구요 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ for(SKPaymentTransaction *transaction in transactions){ switch(transaction.transactionState) { case SKPaymentTransactionStatePurchased: //구매완료. [self purchasedTransaction:transaction]; break; case SKPaymentTransactionStateFailed: //구매실패. [self failedTransaction:transaction]; break; case SKPaymentTransactionStateRestored: //재구매, [self restoreTransaction:transaction]; break; default: break; } } } - (void) dealloc//디얼록하실때 제대로 안해주시면 누수현상나요~ { [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; //이부분부터 꼭 넣어야 함. [productDetailsList release];//요것도 [productIdentifierList release];//요것도 [super dealloc]; }
위에 productDetailsList , productIdentifierList 이런 것들은 넣지 않아도 되겠지만 혹시 모르니까..
[출처] http://cafe.naver.com/mcbugi/200626
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
253 | Develop |
[c] 단기과정[01/14] 피보나치, 파스칼.. 파일입출력
![]() |
hooni | 2003.04.23 | 7118 |
252 | Develop |
[c] 단기과정[01/14] 파일 입출력
![]() |
hooni | 2003.04.23 | 6863 |
251 | Develop |
[c] 단기과정[01/10] 과제.. swap(any data, ..)
![]() |
hooni | 2003.04.23 | 6936 |
250 | Develop | [c] 단기과정[01/08] 배열, 포인터 | hooni | 2003.04.23 | 7269 |
249 | Develop |
[c] 단기과정[01/08] 과제.. 파스칼 삼각형
![]() |
hooni | 2003.04.23 | 7299 |
248 | Develop | [c] 단기과정[01/08] (다차원 + 배열)포인터, void 포인터 | hooni | 2003.04.23 | 7804 |
247 | Develop | [c] 단기과정[01/07] 제어문, 피보나치수열 | hooni | 2003.04.23 | 7442 |
246 | Develop | [c] 단기과정[01/06] sizeof, 실수표현, 메모리, 연산자 | hooni | 2003.04.23 | 6963 |
245 | Develop |
[c] 다중연결 서버 만들기 #4 - thread 사용
![]() |
hooni | 2013.04.23 | 23757 |
244 | Develop |
[c] 다중연결 서버 만들기 #3 - poll() 사용
![]() |
hooni | 2013.04.23 | 6371 |
243 | Develop |
[c] 다중연결 서버 만들기 #2 - select() 사용
![]() |
hooni | 2013.04.23 | 9380 |
242 | Develop |
[c] 다중연결 서버 만들기 #1 - fork() 사용
![]() |
hooni | 2013.04.23 | 12951 |