iOS In App Purchase 코드 구현 전 웹 설정 작업

 iOS에서 인앱결제 관련 된 부분을 정리해보도록합니다. 스샷에서 인앱결제와 관련된 부분은 Contracts, Tax, and Banking와 Manage Your Applications, Manage Users 3가지부분으로 이번 포스팅은 코드 구현부를 뺀 iTunes Connect에서 처리해야할 웹내 설정에 대한 내용을 정리해봅니다.

 본격적인 작업에 선행 작업들인 개발 인증서 처리Device 등록과 App Id 생성 및 Provisioning Profile 생성, iTunes Connect에 App 등록 Waiting for Upload 단계까지 준비가 되어있어야 합니다. 이와 같은것들은 Manage Your Applications와 관련된 부분으로 링크에 각자 정리가 되어있으니 참고하시기 바랍니다.

 또한 개발중인 App ID 부분을 체크해야합니다. 기존에 만든 App ID가 * 가 포함된 상태로 만들어진 것은 안되기 때문에 App ID를 유니크하게 명시적으로 다시 만들고 그에따른 App 등록을 다시 하시고 아래 내용을 진행하시면 됩니다.

 첫번째로 인앱결제에서 처리할 아이템을 설정하는 Manage Your Applications에 대해 정리해봅니다.
 iTunes Connect에 로그인 하신 후 Manage Your Applications -> 인앱결제 테스트 할 App 선택 -> Manage In App Purchases를 클릭합니다.


 Product 추가를 위해 Create New를 클릭합니다.

 인앱결제 타입을 결정해야 합니다. 그런데 위 스샷과 같이 Free Subscription하나만 나와서 당황스럽더군요. 검색해보니 여러개 있는 것 같은데, 해결책은 Contracts, Tax, and Banking에서 Contract Type에 iOS Paid Applications가 추가 되어있어야 하고 Bank Info도 처리가 되어있어야합니다. 일단 회사 계정으로 테스트하므로 나중에 제가 개인적으로 하게될 때 관련부분 정리해봐야겠네요.

 계정에 Contracts, Tax, and Banking이 처리되어 있으면 이렇게 인앱결제 타입이 총5가지중에 선택할 수 있습니다.
  • Consumable - 소모성 아이템 같이 1회성으로 매번 구입해야 하는 타입.
  • Non-Consumable - Passive 속성같이 한번 구매하면 만료하거나 감소하지 않고 계속 사용가능한 타입.
  • Auto-Renewable Subscriptions - 사용기간을 설정하고 그 기간이 지나면 자동적으로 구매 갱신이 되는 타입. 월간 잡지같은 경우. 사용자의 Apple ID만 동일하면 Apple의 어떤 Device에서도 동일하게 적용. 개발자는 유저가 언제든지 자동갱신을 해지할 수 있는 기능과 사용내역을 확인할 수 있는 것을 만들어야한다.
  • Free Subscription - Newsstand 기능이 구현된 앱에서 무료 구독을 할 때 사용한다. 만료되지 않는다. 
  • Now-Renewing Subscription - 사용기간을 설정하고 그 기간동안 서비스를 사용. 사용자 스스로 구독을 갱신해야함. 자동갱신도 안되고 Device별로 개발해야하므로 Auto-Renewable Subscriptions를 사용하기를 추천.
 원하시는 타입을 선택했다면 위와 같이 인앱결제 속성 설정화면이 나옵니다. 먼저 In-App Purchase Summary 부분으로
  • Reference Name - iTunes Connect의 Sales and Trend에서 표시되는 이름으로 255bytes 안에서 작성한다.
  • Product ID - 인앱결제로 판매할 Product(아이템) ID로, 문자와 숫자를 섞어서 만들 수 있는 유니크 ID. 일반적으로 'Bundle ID + 숫자' 식으로 기입.( com.mycompany.mygame.testitem001)
  • Cleared for Sale - 판매허가 유무 체크
  • Price Tier - 판매 Product의 가격

 다음으로 좀 더 Details한 부분에 대한 설정입니다.

  • Add Language - 각 언어별 Product에 대한 디스플레이 이름과 설명등을 추가한다.
  • Review Notes - 애플에게 Product에 대한 리뷰에 도움이 되는 코메느를 4000bytes이내로 작성한다. 강제아님.
  • Screenshot for Review - 역시나 리뷰에 도움이 되게 인앱결제가 정상적으로 진행되는 것을 확인할 수 있는 스크린샷을 추가한다. 테스트 끝난 후 실제 App Store에 올릴 때 올려도 된다.
 이거 Add Language를 클릭했을 때 뜨는 팝업입니다.

  • Language - 여러 국가를 선택할 수 있다.
  • Display Name - 해당 국가에 맞는 표시되는 이름을 설정한다. 75 bytes가지 가능.
  • Description - 디스플레이되는 설명을 추가한다. 255bytes 이내.
 설정이 마무리 되었다면 Save를 클릭합니다.

  인앱결제 아이템 한개가 추가한 것이 보입니다. 이런식으로 다른 판매할 아이템도 추가하시면 됩니다. 그런데 추가된 아이템 상태가 Ready to Submit입니다. 이것은 인앱결제 상품은 만들었는데 실제로 App과는 연결이 되지 않았기 때문입니다.

 최종적으로 App과의 연동을 위해 Manage Your Applications -> 개발 App 선택 -> View Details로 가보시면 하단에 In-App Purchases가 있습니다. Edit를 클릭합니다.

 Edit In-App Purchases 팝업창이 뜨는데 조금전에 추가했던 인앱결제 아이템이 있을 것입니다. 체크박스 선택을하고 Save를 클릭합니다.

 Save하고 나오면 위와같은 화면이 보일 것입니다. 그러면 App과 연동이 된 것입니다.

 마지막으로 인앱결제 구매 프로세스를 테스트할 계정을 등록할 수있는 Manage Users를 정리해보겠습니다. 그에 앞서, 만들려는 Test User 계정은 아래 진행사항만 진행 후 절대로 iPhone에서든 Mac상에서든 iTunes 또는 App Store에 접근조차 하지 않아야 합니다.

 iTunes Connect에서 Manage Users를 클릭합니다. 그러면 User Type 선택화면이 나옵니다. Test User를 클릭합니다.

 Add New User를 클릭합니다.

 테스트할 유저 정보를 기입하고 Save를 클릭해 저장합니다. Email Address는 아무거나 기입해도 상관없습니다. 가짜 Email 주소를 넣어도 테스트가 가능합니다.

 테스트 유저가 생성되었습니다. 만약 이런 테스트 유저없이 실제로 iTunes에 등록되어있고 신용카드도 등록 된 유저로 테스트하게되면 실제로 과금이 될 수 있으니 조심하세요.

 이것으로 iOS In App Purchase 개발하기 위한 웹 설정단계가 끝났습니다. 이제 실제로 코딩작업에 들어가면 됩니다.

애플 개발자 센터 인앱결제

댓글

  1. 상세히 설명해주셔서 감사합니다~

    답글삭제
  2. 안녕하세요~ 상세한 가이드 너무 감사드립니다.^^
    진행을 하다가 오류가 발생해서 질문을 드릴려고 합니다.

    애플에서 제공하는 결제 sdk로 구현을 했고 결제 트랜젝션에 관한 모든 처리도 완료된 상태입니다.
    애플 개발자 계정에서 캐쉬 아이템을 등록해놨고 테스트 계정까지 만들어서 결제 테스트를 진행하고 있었습니다.
    등록해놓은 아이템 타입도 소모성 아이템으로 등록을 완료했구요
    어제 저녁부터 쭉 진행해오고 잘 되던 결제 테스트가 안되고 있는데요.

    갑자기
    < app 내 구입에서 이 항목을 이미 구입했지만 아직 다운로드하지 않았습니다 >
    라는 팝업 메시지가 출력되고 있습니다.
    처음 발생 이후부터는 계속해서 해당 메시지가 발생을 하고 있습니다.

    이리저리 알아본바에 의하면 애플쪽 결제 시스템에서 구매쪽 프로세스는 완료가 되었는데
    지급 프로세스가 동작을 하지 않아서 발생을 했다는 글을 봤었습니다.
    그리고 결제 SDK에서 피니쉬 트랜젝션을 하지 않았을때도 발생한다고 하는데요..이 부분은 구현을 해놨습니다.

    혹시 겪어보시거나 짐작가시는게 있다면 조언을 해주시면 고맙겠습니다.

    답글삭제
    답글
    1. 흠.. 저희도 비슷하게 구매 요청후 제대로 트랜젝션 처리 안하고 강제로 앱을 종료해보거나했을때 비슷한 증상이 있었던 것으로 기억합니다.
      그때 앱을 다시 시작하면 구매 요청을 안해도 기존에 처리되지 않은 요청에 대한 결과가 자동으로 날아오더군요. 아마 iap 초기화 하면? 그리고는

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

      중 SKPaymentTransactionStatePurchased 아님 SKPaymentTransactionStateRestored 로 왔던거 같네요.
      그리고 게임쪽에 반영하고 마지막엔

      [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

      해주는 것으로 해결된 기억이 있습니다. 다 하셨다고 하셔서.. 도움이 될런지는..;

      삭제
    2. 아아 그렇군요..다시 오는 결과가 있긴한데 그걸 자세히 봐야겠네요..
      런칭하려니 너무 정신없어서 감사인사도 바로 못드렸네요..정말 고맙습니다.^^

      삭제
    3. ^^ 꼭 해결하시길 빌어요~

      삭제

댓글 쓰기

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.