Contents

Develop
2013.11.20 13:43

[ios] In App Purchase 개발

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