영삼이의 IT정보2012. 6. 10. 19:27

스토어 킷의 클래스

SKProductsRequest : 삼풍 정보를 얻기 위해서 애플 앱스토어에 요청을 보낸다.

SKProductsResponse : 검색된 결과를 저장하는 클래스 SKProduct의 배열을 담고있다.

SKProduct: 상품 하나에 대한 정보를 저장한다. 가격, 설명 등이 주된 내용이다.

SKPayment: SKProduct를 구입하기 위해서 이클래스를 생성한다.

SKPaymentQueue: 결제를 요청하기 위해서 SKPaymentQueue 객체에 SKPayment를 넣어준다.

SKPaymentTransaction: 결제 결과를 담고 있는 클래스이다.


다양한 구매등록방법

웹서버 동기화, 로컬파일 생성, 사용자 기본값에 기록, 키체인 추가


//1. 프레임워크 추가

StoreKit.framework


//2. 헤더파일 추가

#import <StoreKit/StoreKit.h>


//3. 델리게이트 추가

SKProductsRequestDelegate, SKPaymentTransactionObserver


//4. 감시 객체 등록


- (void)viewDidUnload {

     //앱에서 아이템을 구매하려면 먼저 트랜잭션 옵져버를 추가해야한다.

     //옵져버가 있어야 실제 구매를 시작할 때 구매GUI사용 할수있음.

     SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];

     [queue removeTransactionObserver:self];

}


- (void)viewDidLoad {

     SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];

     [queue addTransactionObserver:self];

}


//5. 구매처리


-(IBAction)actionNoAD

{

    if ([SKPaymentQueue canMakePayments])

    {     // 스토어가 사용 가능하다면

        NSLog(@"Start Shop!");

         

        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];     // Observer를 등록한다.

    }

    else

    {

        NSLog(@"Failed Shop!");

    }

   

     //상품 요청을 생성하고 실행한다.

    SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.corealism.FamilyMapCh.ddd"]];

    productRequest.delegate = self;

    

    [productRequest start];

   

}




//6. SKProductsRequest 델리게이트 구현 


- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

     NSLog(@"SKProductRequest got response");

     if ( [response.products count] ==0 )

     {

          UIAlertView* askView = [[UIAlertView alloc]

                                        initWithTitle:NSLocalizedString(@"Buy", @"buy items")

                                        message:NSLocalizedString(@"Can't retrieve product information.", @"buy items")

                                        delegate:self

                                        cancelButtonTitle:NSLocalizedString(@"Okay", @"confirm action")

                                        otherButtonTitles:nil

                                        ];

          [askView show];

          [askView release];

          return;

     }

   

     if( [response.products count] > 0 )

    {

          SKProduct *product = [response.products objectAtIndex:0];

          NSLog(@"Title : %@", product.localizedTitle);

          NSLog(@"Description : %@", product.localizedDescription);

          NSLog(@"Price : %@", product.price);

       

        SKPayment *payment = [SKPayment paymentWithProduct:product];

        [[SKPaymentQueue defaultQueue] addPayment:payment];

     }

    

     if( [response.invalidProductIdentifiers count] > 0 )

    {

          NSString *invalidString = [response.invalidProductIdentifiers objectAtIndex:0];

          NSLog(@"Invalid Identifiers : %@", invalidString);

     }

}



//7.SKPaymentTransactionObserver 델리게이트 구현

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

{

    for (SKPaymentTransaction *transaction in transactions)

    {

        switch (transaction.transactionState)

        {

            case SKPaymentTransactionStatePurchasing:

                NSLog(@"SKPaymentTransactionStatePurchasing");

                break;


            case SKPaymentTransactionStatePurchased:

                NSLog(@"SKPaymentTransactionStatePurchased");               

                NSLog(@"Trasaction Identifier : %@", transaction.transactionIdentifier);

                NSLog(@"Trasaction Date : %@", transaction.transactionDate);

                [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

                break;

           

            case SKPaymentTransactionStateFailed:                   

                NSLog(@"SKPaymentTransactionStateFailed");               

                [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

                break;

           

            case SKPaymentTransactionStateRestored:

                NSLog(@"SKPaymentTransactionStateRestored");               

                [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

            default:

                break;

        }

    }

}





//8. 과거에 구매한 내역


-(void) onRestror

{

     SKPaymentQueue *queue =[SKPaymentQueue defaultQueue];

     [queue restoreCompletedTransactions];

}



//9. 구매 등록


    //사용자 설정을 변경한다.

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Puchased"];

    [[NSUserDefaults standardUserDefaults] synchronize];

   

    //구매버튼 숨김

    self.navigationItem.leftBarButtonItem=nil;

[출처] StoreKit|작성자 일마레

'영삼이의 IT정보' 카테고리의 다른 글

맥용 SVN 서버 설치  (0) 2012.06.12
Tabbar 아이콘  (0) 2012.06.11
iOS 키보드  (0) 2012.06.10
아이폰 OS 개발 자료 총정리  (2) 2012.06.04
UIImageJPEGRepresentation  (0) 2012.06.04
Posted by 다오나무