민프

[IOS] Apple(IOS)의 인앱 결제에 대해서 알아보자 본문

[IOS]

[IOS] Apple(IOS)의 인앱 결제에 대해서 알아보자

민프야 2024. 3. 19. 17:02

이번 포스팅에서는 IOS 인앱 결제 관련 지침에 대해서 다뤄보겠습니다.

 

IOS를 출시할 때 비지니스에 대해서 명확하게 정의가 되어있어야하고, 관련 기능 구현이 되어야 출시가 될 수 있습니다.

즉, 비지니스 모델에 대한 인앱 결제가 잘 되어있어야 출시가 가능합니다.

 

1.  결제 및 비지니스에 대해서 

앱 심사 지침을 간추려서 요약해보자면

앱 내 구입 사용: 앱이 기능 잠금 해제를 위해 라이선스 키, 증강 현실 마커, QR 코드, 암호 화폐와 같은 자체 메커니즘을 사용해서는 안 됩니다. 기능을 잠금 해제하려면 반드시 앱 내 구입을 사용해야 합니다.

가격 정책: 앱과 앱 내 구입의 가격은 개발자가 결정합니다. 그러나 가격이 지나치게 높다고 판단되는 경우 Apple은 배포를 허용하지 않을 수 있습니다.

사용자 평가와 순위 조작 금지: 사용자 평가를 조작하거나 가짜 피드백을 사용하여 순위를 올리는 행위는 금지되어 있습니다. 이러한 행위가 적발될 경우 개발자는 Apple Developer Program에서 제명될 수 있습니다.

복원 메커니즘 필수: 앱 내 구입을 통해 구입한 크레딧이나 게임 내 화폐는 사용 기한이 없어야 하며, 복원할 수 있는 모든 앱 내 구입에 대한 복원 메커니즘을 갖추어야 합니다.

선물 기능: 앱 내 구입 항목을 다른 사람에게 선물로 보낼 수 있으며, 이러한 선물은 원래 구입한 고객에게만 환불 가능하며 교환할 수 없습니다.

NFT 판매 및 서비스: 앱 내 구입을 사용하여 NFT를 판매하거나 NFT 관련 서비스를 제공할 수 있습니다. 단, NFT 소유권으로 인해 앱 내의 아이템 또는 기능이 잠금 해제되지 않는 한 사용자에게 본인의 NFT를 확인하도록 할 수 있습니다.

다른 결제 방법 안내: 특정 경우 개발자는 앱 내 구입 항목의 구입을 위해 개발자 소유 웹사이트로 안내하는 링크를 제공하기 위한 권한을 신청할 수 있습니다. 이는 미국 스토어프론트에 한정됩니다.

구독 서비스: 앱은 App Store 카테고리에 상관없이 자동 갱신 구독을 제공할 수 있습니다. 구독을 제공하는 경우 고객에게 지속적으로 동일한 가치의 상품을 제공해야 합니다.

다른 구입 방법: 특정 앱(읽기 도구 앱, 멀티 플랫폼 서비스, 기업 서비스 등)은 앱 내 구입 이외의 구입 방법을 사용할 수 있으나, 앱 내에서 사용자에게 이러한 방법을 권장할 수 없습니다.

위 내용 말고도 구독형 앱이라면 관련 내용을 더 읽어보셔야합니다.

(까다롭네요..)

 

참고 문서는 IOS In-App Purchase 문서를 보고 진행하였습니다.

위 문서에 따르면 인앱 구매 유형은 총 4가지로 이루어져있습니다.

1. 소모품 - Consumable (Apple에서 관리하지 않습니다.)
말 그대로 소모품 입니다. 사용 시 소멸되거나 일정 기간이 지나면 만료되는 일회용 품목입니다.
예를 들어서) 게임 진행에 사용되는 생명, 보석, 또는 데이트 앱의 부스트 등등.. 
게임과 같은 곳에서 많이 사용됩니다.

2. 비소모품 - Non-consumable (구매항목은 Apple에서 관리)
앱 내에 영구적으로 내장되어 있고, 사용자는 구매 후 해당 항목에 무기한 엑세스 할 수 있습니다. 
예를 들어서) 게임의 장식 아이템, 가족 공유 앱, 광고 제거 등등..

3. 구독 - Auto-renewable subscriptions (구매항목은 Apple에서 관리)
앱 내의 컨텐츠나 서비스에 대한 엑세스에 대한 반복 결제가 포함 됩니다.
특정 주기별로 자동 결제되는 제품 입니다. 
2020년 기준 기본적인 Apple의 앱 결제 수수료는 30%인데,
1년 이상 지속적으로 결제하는 경우, 해당 구독 건에 한해 그 이후의 결제분부터 수수료가 15%로 내려간다고 합니다.

4. 비갱신 구독
비갱신 구독은 기간이 만료되면 다시 결제해야하는 제품입니다.
즉, 다시 구독하려면 사용자가 다시 수동으로 결제해야합니다.
(비갱신형 구독 상품의 경우, 앱 로그인을 필수로 요하는 경우 App Reject 사유가 된다고 하네요)

 

 

여기에서 만약 자동 갱신 구독을 하는 경우 아래와 같은 지침을 따르지 않으면 App Store에서 삭제될 수 있다고 하네요.

(까다롭습니다.)

동일한 가치 제공: 자동 갱신 구독을 제공하는 경우, 고객에게 지속적으로 같은 가치의 상품이 제공되어야 합니다. 구독 기간은 최소 7일이며, 사용자가 소유한 모든 기기에서 액세스할 수 있어야 합니다.

구독 사용 사례: 적절한 구독 사용 사례로는 새로운 게임 레벨, 에피소드별 콘텐츠, 멀티플레이어 지원, 지속적인 업데이트를 제공하는 앱, 대량의 미디어 콘텐츠 접근, 서비스형 소프트웨어(SaaS) 및 클라우드 지원 등이 있습니다.

구독 옵션의 다양성: 구독은 다양한 서비스 유형으로 제공될 수 있습니다. 예를 들어, 전체 영화 라이브러리 또는 개별 영화 구매와 같은 단품 서비스와 함께 제공될 수 있습니다. 개발자가 만든 모든 앱 및 서비스에서 공유되는 단일 구독도 가능합니다.

게임 서비스 구독: 스트리밍 게임 서비스 구독은 타사 앱 및 서비스에서 공유될 수 있지만, App Store에서 직접 다운로드해야 하며, 구독하지 않는 고객에게 불이익이 없도록 설계되어야 합니다.

사용자 강제 금지: 앱은 사용자에게 앱 평가, 리뷰 작성 또는 다른 앱 다운로드를 강요해서는 안 됩니다. 구독을 구매한 사용자는 추가 작업 없이 구매한 콘텐츠를 이용할 수 있어야 합니다.

기존 사용자 고려: 기존 앱을 구독 기반 비즈니스 모델로 변경할 때, 이미 결제를 완료한 기존 사용자에게 주요 기능을 계속 제공해야 합니다.

사기 행위 금지: 사용자를 기망하여 구독을 구입하도록 유도하는 앱은 App Store에서 삭제되며 개발자는 Apple Developer Program에서 제명될 수 있습니다.

셀룰러 데이터 요금제와 구독 번들: Apple의 사전 승인을 받아 신규 셀룰러 데이터 요금제와 함께 제공되는 음악 및 비디오 구독 번들이 가능할 수 있습니다. 이러한 구독은 소모성 항목 이용이나 할인을 포함할 수 없습니다.

 

 

2. 결제 플로우

공식 홈페이지에서 결제 플로우에 대하여 아래와 같이 간단하게 이렇게 알려주고 있습니다.

https://developer.apple.com/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase

결제 플로우를 보면 아래와 같습니다.

1. 인앱 구매 항목 설정
앱스토어 커넥트에서 인앱 구매 설정: 앱 내에서 판매할 각 상품에 대해 앱스토어 커넥트에 인앱 구매 항목을 생성하고 구성합니다. 여기에는 상품 이름, 가격, 설명 등의 정보가 포함됩니다.

2. 앱에서 상품 정보 표시
StoreKit을 사용한 상품 정보 요청: 앱이 실행될 때 StoreKit 프레임워크를 사용하여 앱스토어로부터 상품 정보(가격, 설명 등)를 요청합니다.
사용자 인터페이스에 상품 표시(예시): 요청한 상품 정보를 앱의 사용자 인터페이스(UI)에 표시하여 사용자가 구매할 상품을 볼 수 있게 합니다.

3. 사용자가 상품 구매 요청
구매 요청 처리: 사용자가 상품 구매를 요청하면, StoreKit을 통해 구매 프로세스를 시작합니다.
사용자 인증: 필요한 경우, Apple ID를 통한 사용자 인증 절차가 이루어집니다.

4. 결제 처리 및 상품 제공
결제 처리: Apple의 결제 시스템이 사용자의 결제 정보를 처리하고, 구매가 성공적으로 완료되었는지를 앱에 알립니다.
상품 제공: 결제가 확인되면, 개발자는 구매한 상품이나 서비스를 사용자에게 제공해야 합니다. 예를 들어, 게임 내 화폐를 추가하거나, 구독 서비스에 대한 액세스 권한을 활성화하는 등의 작업이 이에 해당합니다.

5. 구매 내역 복원 (Restor Mechanism)
구매 내역 복원 지원: 사용자가 앱을 재설치하거나 새 기기로 전환하는 경우, 이전에 구매한 항목에 다시 액세스할 수 있도록 '구매 내역 복원' 기능을 구현합니다.

6. 영수증 검증 (Validate Receipt)
앱 내 영수증 검증: 앱은 구매가 완료된 후, 보안을 위해 애플의 서버와 통신하여 구매 영수증을 검증할 수 있습니다. 이를 통해 구매가 정당하게 이루어졌는지 확인합니다.

영수증 검증에 대해서 좀 더 말씀드려보자면

영수증 검증은 탈옥, 중간자 공격 등의 이유로 실제로 구매하지 않았으나 구매 처리가 되는 경우를 방지하기 위해 구입한 항목에 대해서 영수증 검증 처리가 있어야 합니다. 

 

 

3. 결제 테스트 

결제 테스트는 세금 및 지불 정보 관리가 모두 되어있어야 결제 테스트가 가능합니다.

샌드박스(SandBox), TestFlight를 통해 받은 앱에서는 앱 구매 시 어떠한 대금도 청구되지 않습니다.

영수증 검증 시 TestFlight의 영수증을 서버에 첨부하면 테스트 구매라는 오류 코드가 발생하고, 테스트 서버에 첨부하면 정상 처리가 됩니다. 구매한 상품을 서버에서 관리하기 때문에 테스트 구매 또한 서버에서 별도 처리가 진행되어야 합니다.

 

SandBox, TestFlight로 결제하게 되면 

아래 구독 테스트 기간이 적용됍니다.

실제 구독 기간 테스트 시 기간
1주 3분
1개월 5분
2개월 10분
3개월 15분
6개월 30분
1년 1시간

 

 


참고

https://developer.apple.com/kr/app-store/review/guidelines/#business

 

앱 심사 지침 - Apple Developer

앱 심사 지침에는 사용자 인터페이스 디자인, 기능, 콘텐츠 및 특정 기술 사용 등을 비롯하여 개발과 관련된 다양한 주제에 대한 지침과 예가 나와 있습니다. 이러한 지침은 앱 승인 절차를 준비

developer.apple.com

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

 

In-App Purchase - Apple Developer

Learn about using in-app purchase and StoreKit framework to sell items within your apps, like premium content, virtual goods, and subscriptions.

developer.apple.com

https://medium.com/wizpace/ios-%EC%9D%B8-%EC%95%B1-%EA%B5%AC%EB%A7%A4-in-app-purchase-%EA%B5%AC%ED%98%84-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%9D%BC%EC%9D%B8-1bcbedc800d2

 

iOS 인 앱 구매 (In App Purchase) 구현 가이드라인

이전에 사내 공유 목적으로 작성한 In App Purchase 가이드라인을 정리하여 보았습니다.

medium.com

https://developer.apple.com/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase

 

Original API for in-app purchase | Apple Developer Documentation

Offer users additional content and services using the original In-App Purchase API.

developer.apple.com

https://developer.apple.com/kr/apple-pay/sandbox-testing/

 

샌드박스 테스트 - Apple Pay

가맹점과 개발자는 Apple Pay 샌드박스 환경에서 테스트용 신용 카드 및 체크 카드를 사용하여 Apple Pay 구현을 테스트할 수 있습니다.

developer.apple.com

 

Comments