Contents

조회 수 11767 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

실제 코드에 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



?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
597 Develop [unix] Java 애플릿용 HTML 자동 생성 hooni 2014.02.19 8217
596 Develop [c] 그래픽 차트 라이브러리.. 나중에 확인 해볼 거.. file hooni 2013.04.23 8225
595 Develop [c] 문자열 정렬 함수 qsort() hooni 2003.04.23 8232
594 Develop [php] 마시마로 캐릭터 방명록 file hooni 2003.04.23 8239
593 Develop [c] selec()를 이용한 입출력 다중화 file hooni 2013.04.23 8259
592 Develop [c] 이진트리(binary tree)의 운행.. hooni 2003.04.23 8268
591 Develop [c++] 현승이가 준 메신저 소스.. ㅋㅋ file hooni 2013.04.23 8275
590 Develop [c++] 레지스트리 편집하는 부분..ㅡㅡ; file hooni 2013.04.23 8277
589 Develop [js] 쿠키(cookie)에 대한 설명과 예제.. hooni 2003.04.23 8321
588 Develop [c] 콘솔에서 패스워드 입력시 문자 보이지 않게 하는 코드 file hooni 2013.04.23 8329
587 Develop [js] selectbox 선택 후 input 박스에 적용 hooni 2013.04.23 8331
586 Develop [c] 암호 알고리즘 소스.. file hooni 2013.04.23 8342
Board Pagination Prev 1 ... 44 45 46 47 48 49 50 51 52 53 ... 98 Next
/ 98