Contents

Develop
2013.11.20 13:43

[ios] In App Purchase 개발

조회 수 9290 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
간단 설명~
코드 이해 한 상태에서 가져다 쓰기 편한 내용..

1. 프레임워크 등록
무엇보다도 먼저, 자신의 App에 프레임워크를 등록해주어야 한다.
왼쪽 'Group & Files'에서 'Frameworks'에서 오른쪽 버튼을 누르고, 'Add...'-'Existing Frameworks'를 선택한다.
그리고, 'StoreKit.framework'를 선택하여, 해당 프레임워크를 추가한다.


2. 헤더 등록
In App Purchase를 이용하기 위해서는 기본적으로 다음과 같은 헤더파일들을 추가해주어야 한다.
#import <StoreKit/SKProductsRequest.h>
#import <StoreKit/SKProduct.h>
#import <StoreKit/SKPaymentQueue.h>
#import <StoreKit/SKPaymentTransaction.h>


3. 스토어 설정 및 Observer 등록
먼저, 스토어를 사용할 수 있는지 확인해야 하고, 사용 가능하다면 Observer를 등록해야 한다.
// 스토어가 사용 가능하다면
if ([SKPaymentQueue canMakePayments]){
    NSLog(@"Start Shop!");

    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    // Observer를 등록한다.
}
else
{
    NSLog(@"Failed Shop!");
}

옵져버를 등록할때, 해당 인스턴스는 SKPaymentTransactionObserver Protocol을 구현해야 한다.
그중 update만을 구현해도 사용하는데 문제 없다.


3. 옵져버 update만들기
옵져버로 등록된 클래스에 update를 등록해 준다.
- (void)paymentQueue:(SKPaymentQueue *)queue
    updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:				
		[self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
		[self restoreTransaction:transaction];
            default:
                break;
        }
    }
}

해당 트랜젝션의 결과에 따라서 각각 구분하도록 프로그래밍이 되어 있는데,
각 함수들은 다음과 같이 만들면 된다.

- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
    NSLog(@"SKPaymentTransactionStateRestored");
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
    NSLog(@"SKPaymentTransactionStateFailed");	
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
    NSLog(@"SKPaymentTransactionStatePurchased");
    NSLog(@"Trasaction Identifier : %@", transaction.transactionIdentifier);
    NSLog(@"Trasaction Date : %@", transaction.transactionDate);
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

이런식으로 구성하면 된다.


4. 아이템정보 가져오기
특정 아이템 정보를 가져오기 위해서는 SKProductRequest를 사용한다.
SKProductsRequest *productRequest =
    [[SKProductsRequest alloc]
        initWithProductIdentifiers:[NSSet setWithObject:@"testitem_01"]];
productRequest.delegate = self;
	
[productRequest start];

여기서 initWithProductIdentifiers 에는 아이템 등록할때 넣었던 'Product ID'를 넣을 수 있으며,
배열로 여러개 동시에 넣을수도 있다.

델리게이트는 SKProductRequestDelegate Protocol을 구현해야 한다.

위의 요청이 성공하게 되면, responseRequest를 호출하게 되는데, 다음과 같이 받을 수 있다.
- (void)productsRequest:(SKProductsRequest *)request
    didReceiveResponse:(SKProductsResponse *)response
{
	NSLog(@"SKProductRequest got response");
	if( [response.products count] > 0 ) {
		SKProduct *product = [response.products objectAtIndex:0];
		NSLog(@"Title : %@", product.localizedTitle);
		NSLog(@"Description : %@", product.localizedDescription);
		NSLog(@"Price : %@", product.price);
	}
	
	if( [response.invalidProductIdentifiers count] > 0 ) {
		NSString *invalidString =
		    [response.invalidProductIdentifiers objectAtIndex:0];
		NSLog(@"Invalid Identifiers : %@", invalidString);
	}
}


5. Item 결제 요청 하기
원하는 아이템을 결제요청은 SKPayment를 이용한다.
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];

이렇게 해주면, 그 뒤는 애플에서 알아서 처리하도록 되어 있다.
결제가 끝나면, 지정해준 Observer의 update함수가 호출된다.

[출처] http://creative-xenos.tistory.com/entry/In-App-Purchase-%EA%B0%9C%EB%B0%9C


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
397 Develop [c++] 현승이가 준 P2P 프로그램 소스 ㅋㅋ file hooni 2013.04.23 12099
396 Develop [php] 심플한 게시판 ㅋㅋ 1 file hooni 2013.04.23 13031
395 Develop [jsp] RSS(xml) 파싱해서 보여주기 ㅎㅎ file hooni 2013.04.23 13233
394 Develop [php] 한샘 전자발주 시스템.. file hooni 2013.04.23 12020
393 Develop [c#] 파일(File) 쓰기 ㅎㅎ hooni 2013.04.23 13315
392 Develop [js] 자바스크립트를 동적으로 로딩하기 hooni 2013.04.23 13603
391 Develop [unix] 날짜 관련 쉘 명령어 (특정일 또는 +-시간, 날짜 계산된 값) hooni 2013.04.23 14880
390 Develop [vb] 문자열에서 태그 제거함수 (Visual Basic) file hooni 2013.04.23 22673
389 Develop [c#] 정규표현식을 이용한 문자열에서 태그 제거함수 file hooni 2013.04.23 17870
388 Develop [c] 포인터 학습용 예제 소스 코드 file hooni 2013.04.23 21079
387 Develop OGNL(Object Graph Navigation Language) hooni 2013.04.23 15777
386 Develop URI 인코딩, URL 인코딩 file hooni 2013.04.23 18899
Board Pagination Prev 1 ... 33 34 35 36 37 38 39 40 41 42 ... 71 Next
/ 71