Develop
2013.11.20 11:50
[ios] iOS In App Purchase 코드 부분 샘플 1
조회 수 11767 댓글 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
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
909 | Develop | '2014 모바일 개발 트렌드' 발표자료입니다. | hooni | 2014.10.02 | 986 |
908 | Develop | [ios] iOS 8 개발자가 우선 알아야 할 3가지 | hooni | 2014.10.02 | 907 |
907 | Develop | [js] jQuery 셀 병합 1 | hooni | 2014.09.23 | 3499 |
906 | Etc | IoT가 만드는 미래와 플랫폼 경쟁력 | hooni | 2014.09.23 | 0 |
905 | System/OS | SVN(Subversion) 설치와 설정 (sasl 인증 적용 포함) | hooni | 2014.09.11 | 5677 |
904 | System/OS | [linux] yum 업데이트 시 커널 제외하기 | hooni | 2014.09.11 | 1264 |
903 | Develop | [ios] Xcode cannot run using the selected device | hooni | 2014.08.14 | 1796 |
902 | Develop | [ios] Objective-C 에서 자주 사용하는 수학 함수와 유용한 Define | hooni | 2014.08.08 | 1865 |
901 | Develop | [ios] 카테고리 확장 메소드를 찾지 못하는 경우 | hooni | 2014.08.08 | 2001 |
900 | Develop | [ios] @property의 속성 (strong, weak, copy) 사용 경우 | hooni | 2014.08.08 | 1664 |
899 | Algorithm | OCB5 Injection 앗싸뵹! ㅋㅋ | hooni | 2014.07.01 | 808 |
898 | Develop | [ios] TextField 특정 문자만 사용하도록 하기 | hooni | 2014.06.30 | 2684 |