블로그 이미지
Sergio Donati Julyus

카테고리

분류 전체보기 (880)
[Apple] (154)
[DESKTOP] (64)
[DEVELOP] (36)
[FINANCE] (4)
[EPINEPHRINE] (60)
[ILLUST] (52)
[MEDIA] (85)
[NETWORKS] (68)
[OFFICE] (144)
[OPERATING_SYS] (70)
[SECURITY] (16)
[SYSTEM] (108)
[Equipment] (15)
Total411,415
Today0
Yesterday26


http://blog.naver.com/kimysaptec/130095894390


다음은 아이폰용 콘텐츠 과금에 관한 프로그램 구현 방법 설명 입니다.

 

제목: 애플사 결제를 통한 콘텐츠 과금하는 방법 In App Purchase

==============================================================

###(중요) 은행계좌가 사전에 등록 필수 --- 없으면 테스트 확인불가

(중요) 아이폰 설정/store의 계정 로그아웃(반드시) ---- 테스트 계정 사용을 위함

(중요) 상품 판매 지역 언어 일치 필수 --- 개발어플과 애플 iTunes Connect 사이트의 Manage Your Applications에서

(중요)애플 결제 얼럿창은 지연시간이 발생하여 느리게 표시 될 수 있음.(이유는 네트워크와 애플 서버의 영향인듯 함).

최대 15초까지 지연 발생 가능 확인 됨.

 

 

1. App ID 등록

가. http://developer.apple.com/ 접속 iOS Dev Center. 클릭

http://developer.apple.com/devcenter/ios/index.action

 

나. 로그인

다. 오른 쪽의  iOS Provisioning Portal  클릭하여 어플 인증파일을 만든다.

- New App ID 버튼 클릭

- 여기서 생성한 bundle ID가 중요하다. 반드시 생성 이름 기억한다.

예) com.testman.inappdemo

틀린예) com.testman.*

 

붙임) Enable In App Purchase는 기본으로 설정 됨<--- 2010년도에 정책이 바뀜

 

 

2. Provisioning Profile 생성

가. 왼쪽 메뉴 중에서 provisioning 선택

나. new Profile 버튼 클릭

-프로파일 이름을 생성하여 다운로드하고 더블클릭하여 Xcode에 등록 한다.

확인방법: Xcode에서 Window > Organizer 선택

provisioning profiles선택

마우스 오른쪽 버튼 클릭 > Reveal in finder

 

3. Xcode setting--개발 어플에서

위에서 작업한 App ID로 설정 함

 

 

4.. iTunes Connect 사이트에 환경 등록

(참고)iTunes Connect Developer Guide.

 

가. Manage Your Applications에서 어플등록

-테스트 동안에는 실행파일은 업로드 하지 않아도 됨

- 단지 Bundle ID는 위에서 생성한 App ID임

예) com.testman.inappdemo

 

나. 판매상품 등록 Manage Your In App Purchases

- 주의할것은 Product ID 임. --- 이 것은 프로그램에서 사용됨.(중요)

예) com.testman.inappdemo.001 또는 com.testman.inappdemo.itemone

단지 app ID + 상품코드 형식으로 해주면 된다.

 

-판매 상품 유형은 아래 3가지 유형중 하나 선택

보충 불가능  응용 프로그램 구입 기능은  번만 구입해야 하고, 동일한 iTunes Store 계정으로 인증된 여러 장비에 전송할 있는 항목입니다

  • 보너스 게임 레벨
  • 도시 안내 지도

보충 가능  응용 프로그램 구입 기능은 매번 구입해야 하고 무료로 다시 다운로드할 없는 항목입니다

  • 추가 체력
  • 추가 경험치

구독 구독 기간이 만료될 경우 다시 구입해야 하는 일회성 서비스입니다

  • 구독
  • 위치 서비스 구독

- Display Detail의 언어 선택과 Display Name 입력항목은 아이폰 결제화면 얼럿 창에 보여지므로

상품명으로 입력함. 그리고 Add This language 버튼을 클릭하여 등록해야 저장 됨

 

다. 상품테스트 유저 등록 Manage Users
-  아이폰에서 결제하는 방식이므로 로그인 이메일 계정으로 임으로 생성 함.

단지, 이미 iTunes 계정으로 등록 된 계정은 생성 하면 안됨.

실제 결제될 수 있음. 

 

 

5. 코딩

참고) In App Purchase Programming Guide  에서 “Adding a Store to Your Application” 내용

 

 

가. Xcode 개발 편집기에서 다음 프레임워크를 개발어플에 추가

StoreKit.framework

 

 

나. 결제 코딩파일에 추가(헤더와 델리게이트) 

#import <StoreKit/StoreKit.h>

 

 

@interface  :   <SKProductsRequestDelegate, SKPaymentTransactionObserver> {

}

 

다. 다음은 애플결제 이용가능 상태를 확인할 때 사용 함

 

if ([SKPaymentQueue canMakePayments])
{
   ... // Display a store to the user.
}
else
{
   ... // Warn the user that purchases are disabled.
}

 

라. 다음은 상품정보 유무확인시 사용함. 예)com.testman.inappdemo.001이 상품코드

 

 

- (void) requestProductData
{
   SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.testman.inappdemo.001"]];
   request.delegate = self;
   [request start];
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = response.products;
    // populate UI
    [request autorelease];
}

 
마. (중요) 실제 상품결제 진행에 따른 결과 델리게이트 발생 시킴(프로그램 초기화나 로드시, 또는 결제버튼 클릭시 사용가능 함.)
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

 

바. (중요) 실제 상품결제 요청 ----결제 버튼과 연동해도 됨.

SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.testman.inappdemo.001"];
[[SKPaymentQueue defaultQueue] addPayment:payment];

사. 다음은 결제 결과에 따른 델리게이트 임.

- (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) completeTransaction: (SKPaymentTransaction *)transaction
{
// Your application should implement these two methods.
   //생략가능 [self recordTransaction: transaction];
   //생략가능 [self provideContent: transaction.payment.productIdentifier];
// Remove the transaction from the payment queue.
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
    //생략 가능[self recordTransaction: transaction];
    //생략가능 [self provideContent: transaction.originalTransaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        // Optionally, display an error here.
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

 

 

이상으로 애플결제를 정리 합니다.






Posted by Julyus
TAG ,

최근에 달린 댓글

최근에 받은 트랙백

글 보관함