CONSUMPTION_REQUEST에서 지켜낸 매출까지
App Store 환불은 실제로 어떻게 결정될까요
고객이 환불을 요청하는 데는 1분 남짓이면 충분합니다. reportaproblem.apple.com이나 앱 안의 요청 화면에서 사유를 고르고 보내면 끝입니다. 대부분 이틀 안에 결과를 받습니다. 그 사이 Apple은 서버로 CONSUMPTION_REQUEST를 보내 단순한 질문을 던집니다. 상품이 제공되었는지, 고객이 얼마나 사용했는지입니다. 코인 팩이나 평생 이용권부터 Apple 구독 환불까지 상품 유형과 관계없이 같은 질문이 옵니다. 응답할 시간은 12시간입니다. 응답하지 않으면 Apple은 고객 측 이야기만 듣고 결정합니다.
저희는 원래 구매에 기록된 정보를 바탕으로 이 질문에 제때 답합니다. 또한 여러분에게 묻지 않고 Apple이 승인한 환불도 모두 기록합니다. 팀의 리포트에 거의 나타나지 않는 손실입니다. 두 가지를 나란히 보면 어떤 상품에서 매출이 가장 많이 새는지, 그리고 그 이유를 알 수 있습니다.
백그라운드에서 돌아가는 App Store 환불 방어
모든 알림 검증
Apple은 보내는 모든 서버 알림에 서명합니다. 저희는 무엇이든 저장하기 전에 Apple의 인증서 체인으로 그 서명을 확인하므로, 위조되거나 변조된 메시지는 기록에 닿지 못합니다.
자동으로 응답 전송
Apple이 구매에 대해 물으면 App Store Server API를 통해 짧은 응답서를 작성합니다. 응답에는 상품 제공 여부, 사용량, 무료 체험이나 샘플이 먼저 있었는지, 원하는 결과가 담깁니다. 기본값은 거절이며 바꿀 수 있습니다. 모든 응답은 12시간 기한보다 한참 앞서 전송됩니다. Apple은 공유에 동의한 고객의 데이터만 받으므로, 앱에서 이 동의를 미리 받아 두세요.
완전한 환불 이력
승인된 환불, 거절된 요청, 취소, 접근 권한을 잃은 Family Sharing 구성원까지 모든 이벤트가 원래 주문에 연결되어 저장됩니다. 이 중 대부분은 Apple이 스스로 처리하므로 다투지 않고 기록합니다. 앱 구매 환불이 모르는 사이에 지나가는 일은 없습니다.
iOS와 Android를 함께
Apple과 Google Play 건이 하나의 대시보드에 모여, 동일한 타임라인, 승률 차트, 지켜낸 매출 합계를 제공합니다.
앱에는 아무것도 추가하지 않습니다
설정은 전부 App Store Connect와 Apple의 서버 API에서 이뤄집니다. SDK도, 코드 수정도, 심사를 기다리는 새 빌드도 없습니다.
한 가지 일만 하는 키
App Store Connect 키는 저장 시 암호화되며 알림 확인과 응답 전송, 두 가지 용도로만 쓰입니다. 고객의 개인정보는 수집하지 않습니다.
먼저 준비할 것
적절한 App Store Connect 역할
API 키를 만들고 앱의 서버 알림 설정을 수정할 수 있는 역할.
인앱 구매 키(.p8)
Issuer ID와 Key ID도 함께 필요합니다. 아직 없다면 만드는 데 1분 정도 걸립니다.
약 5분
전체 설정에 드는 시간입니다. 개발자도, 새 릴리스도 필요 없습니다.
약 5분이면 운영 시작
세 단계는 Refund Sensor에서 진행하고, 나머지 두 단계는 App Store Connect에 잠깐 들러야 합니다.
- 1
앱 추가
설정 마법사를 열고 App Store를 선택하세요. 앱의 스토어 링크를 붙여넣으면 정보가 자동으로 채워지며, 직접 입력해도 됩니다.
- 2
키 업로드
App Store Connect의 사용자 및 액세스에서 통합으로 이동해 인앱 구매 키를 만드세요. .p8 파일을 Issuer ID, Key ID와 함께 여기에 업로드합니다. 파일은 도착하는 즉시 AES-256으로 암호화되어 저장됩니다.
- 3
Apple 알림 연결
대시보드에서 웹훅 주소를 복사하세요. App Store Connect에서 앱의 앱 정보 페이지를 열어 App Store Server Notifications를 찾고, 프로덕션 서버 URL의 버전 2 입력란에 주소를 붙여넣은 뒤 저장합니다.
- 4
테스트 보내기
App Store Connect에서 '테스트 알림 보내기'를 클릭하세요. 저희가 알림을 받고 Apple의 서명을 확인하면 상태가 '연결됨'으로 바뀝니다.
- 5
자동 운영
이제부터 Apple에서 오는 새로운 건마다 몇 초 안에 응답이 나가고, 다른 모든 이벤트는 대시보드에 표시됩니다. 밤에도, 주말에도, 휴일에도 계속 작동합니다.
자주 묻는 질문
아니요. Apple은 개발자가 응답하도록 CONSUMPTION_REQUEST를 만들었습니다. 사용 정보와 원하는 결과를 보내는 것은 Apple이 설계한 절차를 그대로 따르는 일입니다.
아니요. 적절한 App Store Connect 역할이 있는 사람이라면 누구나 약 5분 안에 끝낼 수 있습니다. 키를 만들고, 주소 하나를 붙여넣고, 테스트를 보내면 됩니다. 코드도, 새 빌드도 필요 없습니다.
Apple이 결정 전에 여러분의 의견을 묻는 모든 건에 응답합니다. 구독, 일회성 구매, 코인이나 젬 같은 소모성 상품의 Apple 인앱 구매 환불이 여기에 해당합니다. 이미 환불이 지급된 경우처럼 Apple이 묻지 않고 처리하는 건도 있습니다. 이런 건은 리포트용으로 기록하므로 모든 것을 볼 수 있습니다.
네. 카드 정보를 입력하지 않고도 앱을 연결하고 응답을 시작할 수 있습니다. 물량이 늘면 유료 플랜이 언제 적합한지 가격 페이지에서 확인하세요.
설정 직후부터입니다. 테스트 알림으로 몇 분 안에 연결이 확인되고, 첫 실제 건부터 응답이 자동으로 나갑니다. Apple이 주는 시간은 12시간이지만, 팀에서 시계를 지켜볼 사람은 없어도 됩니다.
하나하나 로그에 추가됩니다. 이렇게 조용히 승인되는 Apple 환불은 대부분의 팀이 놓치는 손실입니다. 기록이 쌓이면 다툴 건이 없었던 경우까지 포함해 어떤 상품에서 돈이 가장 많이 새는지 알 수 있습니다.
.p8 파일은 AES-256-GCM으로 암호화되어 저장되며 Apple 알림 검증과 응답 전송에만 사용됩니다. 사용자의 개인정보는 수집하지 않습니다.
아니요. 모든 일은 저희 서버와 Apple 서버 사이에서 이뤄집니다. 앱과 결제 흐름은 그대로이고, 고객은 늘 그랬듯 Apple의 결정을 전달받습니다. 여러분이 챙길 것은 동의뿐입니다. Apple은 동의한 고객의 사용 데이터만 공유하길 원하며, 대부분의 앱은 간단한 옵트인으로 이를 처리합니다.
iOS