Contents

조회 수 11794 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
841 Develop '2014 모바일 개발 트렌드' 발표자료입니다. file hooni 2014.10.02 1132
840 Develop Aspect Oriented Programming in Objective-C hooni 2015.05.18 939
839 Develop DDay Memo 1.9.4 소스코드 secret hooni 2015.10.03 0
838 Develop GCM 사용하기 2 (단말에 GCM 구현하기) file hooni 2013.07.06 23407
837 Develop GCM 사용하기 3 (JSP로 GCM 푸시 서버 만들기) 4 file hooni 2013.07.06 25419
836 Develop git 브런치 배우기 (링크) hooni 2013.07.09 20695
835 Develop GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스 file hooni 2014.10.14 1259
834 Develop How to Test SMTP AUTH using Telnet hooni 2018.04.05 1582
833 Develop JSON, BSON 변환 file hooni 2013.04.23 11868
832 Develop Laravel 5 Failed opening required bootstrap/../vendor/autoload.php hooni 2018.01.24 1827
831 Develop Mac OS 에 Jenkins 설치하기 (Homebrew) 2 file hooni 2017.03.15 8384
830 Develop macOS에 node, npm 설치하기 (homebrew) file hooni 2021.11.06 1450
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71