본문 바로가기
개발 블로그/아이폰개발

[iOS 앱 내 구입] iOS 앱 내 결제 시스템을 구현하면서 필수 고려할 사항 정리

by 육아빠 snapshot 2019. 12. 4.

https://developer.apple.com/kr/in-app-purchase/

 

앱 내 구입 - Apple Developer

개요 앱 내 구입을 통해 구독, 새로운 기능 및 서비스를 비롯하여 다양한 콘텐츠를 판매할 수 있습니다. 앱 내 구입은 네 가지의 유형으로 제공할 수 있습니다. 사용자는 iOS, macOS 및 tvOS에서 앱 내 구입을 이용할 수 있습니다. 소모성 사용자는 앱에서 게임을 진행하기 위해 게임 내에서 생명이나 보석과 같은 다양한 소모성 항목을 구입할 수 있습니다. 소모성 앱 내 구입은 일회성입니다. 즉, 한 번 사용하면 소모되므로 다시 구입해야 합니다. 비소모

developer.apple.com

주의

  • 첫 번째 앱 내 구입은 새로운 앱 버전과 함께 제출해야 합니다. 앱 내 구입을 생성한 후 App Store 탭 내 해당 앱의 앱 내 구입 섹션에서 생성한 앱 내 구입을 선택하고 제출을 클릭하십시오. 추가 정보
  • 바이너리를 업로드하고 첫 번째 앱 내 구입을 심사를 위해 제출한 경우, 아래 표를 사용하여 추가 앱 내 구입을 제출할 수 있습니다.

 

앱과 앱 내 결제 아이템의 심사는 각자 제출을 해야 함

 

개발한 아이템 유형

 

- 비자동 갱신 구독

  • 제품은 사용자가 제한된 기간 동안 서비스를 구입할 수 있게 합니다. 이 앱 내 구입의 콘텐츠는 고정적일 수 있습니다. 이 구독 유형은 자동으로 갱신되지 않습니다.
  • 사용자는 한정된 기간 동안 서비스 또는 콘텐츠에 대한 접근 권한을 구입할 수 있으며 스트리밍 콘텐츠의 정기권이 이에 해당합니다. 이 유형은 자동으로 갱신되지 않기 때문에 사용자가 매번 구독을 갱신해야 합니다.
  • 예: 아카이브된 기사 카탈로그 1년 구독

 

- 자동 갱신 구독

  • 제품은 사용자가 일정 기간 동안 동적 콘텐츠를 구입할 수 있게 합니다. 이 구독 유형은 사용자가 취소하지 않는 한 자동으로 갱신됩니다.
  • 사용자는 서비스나 주기적으로 업데이트되는 콘텐츠에 대한 접근 권한을 구입할 수 있습니다. 클라우드 저장 공간을 한 달 동안 사용하거나 매주 잡지를 구독하는 경우가 이에 해당합니다. 요금은 사용자가 구독을 해지할 때까지 반복해서 청구됩니다.
  • 예: 스트리밍 서비스를 지원하는 앱 월간 구독

 

우리의 결제 시스템은 "비갱신 구독"과 "자동 갱신 구독"을 개발을 하게 되었다. 

처음으로 개발을 한 것은 "비갱신 구독"으로 아주아주 예전에는 소모성 아이템으로 만들었지만 현재는 1,3,6개월과 같이 기간이 있는 상품일 경우 이 아이템을 사용해서 개발을 해야 한다. 그러지 않으면 리젝을 당한다.

 

"자동 갱신 구독"과 "비갱신 구독"의 차이점은 몇 가지가 있다.

-비갱신 구독

  • 구독 기간을 (우리) 서비스의 서버에서 관리를 해야 한다.
  • 결제를 계속할 수 있다.
  • 그렇기 때문에 해당 서비스의 아이디로 체크를 해서 중복 결제를 막아야 한다.

-자동 갱신 구독

  • 구독 기간을 앱스토어 아이디(애플)와 우리의 자체 서버에서 동시에 관리를 해야 한다.
  • 테스트는 5분 정도에 한 번씩 6번 테스트를 할 수 있다( 샌드박스로) 그래서 결제 큐에서 카운트로 잘 봐야 한다.
  • 자동 갱신 구독은 그룹으로 묶을 수가 있어서 이건 앱 내에서 결제를 할 수 있고 구독 설정에서 결제를 변경할 수 있다(구독 상품이 2개가 있을 시, 스탠더드, 프리미엄)
  • 자동 갱신 구독은 특이점이 하나 있다. 앱스토어에서도 관리를 하기 때문에 앱스토어 중복 결제를 하지 못했다.
  • 둘 다 결제 취소는 애플을 통해서 해야 한다.

애플은 취소는 무조건 무조건 애플 자체에서 취소 요청을 해야 한다. 회사차원에서 할 수가 없다.!!!

 

사실 이것으로 끝난 것이 아니다. 

 

 

  • 두 아이템을 이용할 경우 앱의 메타정보 및 약관 정보를 제대로 보여주어야 한다.  (리젝)
  • 이런 약관 정보는 실제 서비스를 하고 있는 앱을 참고해서 하는 것이 중요하다.  (리젝)
  • 앱의 메타 정보에도 꼭 결제에 대한 정보를 기입해야 한다. (리젝)
  • 앱 내 결제 리스트에도 이런 정보를 꼭 기입해야 한다. (리젝)

예)

잡플래닛 

 

저 위에 빨간색 네모칸이 보이는 부분은 서비스 약관 링크 정보이다. 

링크를 통해서 유저가 약관을 볼 수 있게 해야 한다. (리젝)

 

앱의 메타데이터는 

잡플래닛 앱 설명 메타정보

 

이런 식으로 앱 설명 메타 정보에 저런 내용을 꼭!!!!! 써넣어 주어야 한다!!!(리젝)

 

그리고 서비스 자체 ID를 사용할 경우 그리고 "자동 갱신 구독"을 사용할 경우 복원에 대한 이유로 리젝을 당할 수 있다. 

우리는 애플, 안드로이드, 웹을 통해서 결제를 한 사람의 경우 서비스 자체 ID를 통해서 유저에 대한 결제 관리를 서버에 저장하고 관리하고 있기 때문에 애플에 강력히 어필을 해줘야 한다. 

 

"비갱신 구독"일 경우 어차피 회사 서버에서 관리를 해주기 때문에 문제가 없었지만 "자동 갱신 구독" 일 경우 애플은 애플 ID로 관리를 하기 때문에 문제가 생긴다. 왜냐하면 애플 ID로만 관리를 해줄 경우 서비스를 사용하는 ID를 바꾸면 다 승인이 이루어질 수 있기 때문에 우리가 관리를 해야 한다. 

 

예로 내가 멜론에 가입을 했다고 생각하자. 멜론 정기 결제를 애플 ID를 통해서 결제를 했는데.. 애플 ID는 그대로이고 멜론 ID를 바꾸어서 로그인할 경우 이 사람한테 정기결제권을 주면 안 되기 때문에 무조건 멜론 ID 기반으로 사용자에게 승인을 해줘야 한다. 

 

 

위에 경우들은 내가 실제 개발을 하면서 어이없게 리젝을 당했고 기본적으로 저 사항은 무조건 고려해야 한다. 

 

아 그리고!!!!!!!!!!!!

애플 테스터는 결제 테스트를 할 때 실제 서버가 아닌 샌드박스로 테스트를 하기 때문에..

테스터에게 권한을 줘야 할 경우 테스트 서버에서도 권한을 줘야 한다!!

 

그리고 "자동 갱신 구독" 일 경우 샌드박스로 테스트할 때 5분 또는 몇분 안에 6개의 결제 승인 리스트가 내려오기 때문에 테스트 할 때 주의해야 한다. 실제는 한 달에 한번 결제이지만 샌드박스 테스트는 그렇지 않다

 

다음은 실제 개발 중 애플, 회사 서버, iOS 간 통신은 어떤 식으로 해야 하는지 설명을 하겠다.

 

인 앱 결제 Flow

https://blog.lovenfree.com/170

 

[iOS 앱 내 구입] iOS 앱 내 결제 시스템 구현편

먼저 아이템 목록을 가져오는 Flow 이다 미리 AppStore Connect에서 만들어 놓은 아이템들이 있을 것이고 그것을 모두 다 사용해도 되지만 우리는 서버에서 시즌별, 또는 이벤트별 여러 아이템을 미리 만들어 놓..

blog.lovenfree.com

 

댓글2

  • 2020.08.25 20:04

    비밀댓글입니다
    답글

    • 안녕하세요. 일단 복사해주신 내용은 "https://developer.apple.com/kr/in-app-purchase/"
      여기에서 저도 갖고 온거라..

      근데 이해하신 부분이 맞아요.
      소모성 아이템이 아닌 1개월, 3개월 처럼 기간이 정해져 있는 아이템의 경우 '비자동/자동 구독 유형'을 무조건 하셔야 합니다.

      둘 사이의 차이점은 비자동일 경우 서비스 제공자가 직접 유저에 대한 구독 여부 및 관리를 해줘야 하고 '자동 갱신 구독 유형'일 경우 애플이 애플 ID로 관리를 해줍니다.

      저 위에 링크를 가보시면 알겠지만..
      소모성 - 게임 스킨, 캐릭터, 무기와 같은 단발성

      비소모성 - 한번 구매하면 계속 쓸 수있는 카메라 필터와 같은 것

      비자동 갱신 구독 - 1개월,3개월,6개월 과 같은 기간이 있는 아이템, 우리가 유저 관리

      자동 갱신 구독 - 1개월, 3개월, 6개월 과 같은 기간이 있는 아이템, 애플이 관리

      이렇게 생각하시면 될거 같습니다.
      혹시라도 더 궁금한점 있으시면 연락주세요~!!
      감사합니다!