Contents

Develop
2013.11.20 13:43

[ios] In App Purchase 개발

조회 수 9270 댓글 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


?

  1. [js] 이미지 사이즈를 동적으로 조절..

    Date2013.04.23 CategoryDevelop Byhooni Views7474
    Read More
  2. [c] 시어핀스키 가스킷..(p.582, A.2 - 두번째)

    Date2003.04.23 CategoryDevelop Byhooni Views7481
    Read More
  3. [php] 데이터를 엑셀,워드 형태로 변환할 때 헤더(ms-office)

    Date2013.04.23 CategoryDevelop Byhooni Views7488
    Read More
  4. [chm] 비주얼 C++ 팁 모음 문서

    Date2013.04.23 CategoryDevelop Byhooni Views7500
    Read More
  5. [php] 웹 응용프로그램(engines) 모음

    Date2013.04.23 CategoryDevelop Byhooni Views7518
    Read More
  6. [chm] 윈도우즈에서 디버깅 기법(Debugging Applications)

    Date2013.04.23 CategoryDevelop Byhooni Views7527
    Read More
  7. [c] IP 스푸핑(ip spoof) 소스 - 정리해야 함

    Date2003.04.23 CategoryDevelop Byhooni Views7545
    Read More
  8. HTTPS와 SSL 인증서

    Date2014.03.11 CategorySystem/OS Byhooni Views7548
    Read More
  9. [c++] 초간단 스택 두 가지 방식(class, struct)

    Date2013.04.23 CategoryDevelop Byhooni Views7554
    Read More
  10. [c] 정수를 2진수로 변환 (재귀,비트연산)

    Date2003.04.23 CategoryDevelop Byhooni Views7581
    Read More
  11. [api] 인스타그램 API Access_Token 발급 방법 (Instagram API)

    Date2018.04.05 CategoryDevelop Byhooni Views7586
    Read More
  12. [c] 소켓 스트림 서버/클라이언트 (UDP)

    Date2013.04.23 CategoryDevelop Byhooni Views7600
    Read More
Board Pagination Prev 1 ... 37 38 39 40 41 42 43 44 45 46 ... 98 Next
/ 98