Contents

Develop
2013.11.20 13:43

[ios] In App Purchase 개발

조회 수 9283 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
301 Develop [ios] 언어, 지역, 국가 설정 가져오기 hooni 2014.05.12 270388
300 Develop [ios] 여러 버전의 Xcode 사용하기 hooni 2022.05.28 796
299 Develop [ios] 오브젝티브C→스위프트, 코드 변환 손쉽게 file hooni 2015.08.07 1058
298 Develop [ios] 웹뷰 history.back() ㅋㄷ file hooni 2016.06.27 1999
297 Develop [ios] 유용한 매크로 hooni 2014.03.26 3687
296 Develop [ios] 자주 쓰는 패턴과 API hooni 2013.04.23 17720
295 Develop [ios] 참고할만한 좋은 예제 소스.. hooni 2013.04.23 27400
294 Develop [ios] 최상위 ViewController 가져오기 hooni 2015.10.12 1182
293 Develop [ios] 최신 UI 모음.. (나중에 정리할 것) secret hooni 2013.08.09 0
292 Develop [ios] 카메라 사용 권한 확인해서 분기하는 방법 hooni 2015.02.26 1942
291 Develop [ios] 카테고리 확장 메소드를 찾지 못하는 경우 file hooni 2014.08.08 2057
290 Develop [ios] 커스텀 폰트 사용하기 (Custom Fonts) file hooni 2014.04.30 3162
Board Pagination Prev 1 ... 41 42 43 44 45 46 47 48 49 50 ... 71 Next
/ 71