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
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
409 | Develop |
[c++] mfc로 만든 부엌 수납 시스템(2D기반 설계)
![]() |
hooni | 2013.04.23 | 7290 |
408 | Develop |
[c] 웹 메모장.. ㅋㅋ
![]() |
hooni | 2013.04.23 | 6850 |
407 | Develop | [java] RGB코드를 HEX코드로 변환하는 코드 ㅎㅎ | hooni | 2013.04.23 | 8031 |
406 | Develop | 라이브러리에 대한 설명 (static & dynamic library) | hooni | 2013.04.23 | 6969 |
405 | Develop | [c] 파일(File)의 연결과 연결 해제 (link, unlink, chown) | hooni | 2013.04.23 | 9558 |
404 | Develop | [js] 실행되는 디렉토리 확인하는 스크립트.. | hooni | 2013.04.23 | 6789 |
403 | Develop |
[c++] mfc 윈도우에서 ODBC 사용하여 MDB파일 읽기.. ㅋㅋ
![]() |
hooni | 2013.04.23 | 9150 |
402 | Develop | [c++] String Tokenizer (나중에 c 코드로 변경해서 사용할 것) | hooni | 2013.04.23 | 11731 |
401 | Develop |
[doc] mfc 매뉴얼 다운 받아서 완성하기.. ㅋㄷ
![]() |
hooni | 2013.04.23 | 7716 |
400 | Develop |
[c++] 채팅로봇 소스.. ㅋㄷㅋㄷ
![]() |
hooni | 2013.04.23 | 8906 |
399 | Develop | [c] 쓰레드에 대한 내용 퍼오기..ㅡㅡ; | hooni | 2013.04.23 | 8468 |
398 | Develop | [c++] mfc에서 윈도우 항상 위 속성 주기.. | hooni | 2013.04.23 | 11369 |