모든 글
Deep dive8분 소요

Family Sharing 환불은 결제 한 건을 되돌리지만, 다른 다섯 명은 여전히 앱을 사용할 수 있습니다. 그들을 차단할 수 있는 것은 오직 당신의 서버뿐입니다

Family Sharing 환불은 결제 한 건을 되돌리지만, 최대 다섯 명의 가족 구성원이 유료 기능을 계속 사용할 수 있습니다. Apple은 REVOKE를 보내고, 그 접근을 종료하는 것은 당신의 서버가 할 일이라고 기대합니다. 가족 공유 환불이 어떻게 작동하는지, 그리고 한 건이 얼마의 비용이 드는지 설명합니다.

여섯 명을 위해 차려진 식탁 한가운데에 놓인 종이 영수증 한 장. Family Sharing 환불 뒤에 있는 결제 한 건이 여섯 명을 감당할 수 있음을 나타냅니다

핵심 요약

  • Apple은 모든 가족 공유 트랜잭션에 FAMILY_SHARED inAppOwnershipType을, 모든 직접 구매에 PURCHASED를 태그합니다. 이 필드는 비소모성 인앱 구매와 자동 갱신 구독, 즉 Family Sharing이 지원하는 두 가지 제품 유형에만 나타납니다.
  • 가족 공유가 가능한 구매 한 건은 구매자와 다섯 명의 가족 구성원, 최대 여섯 명에게 권한을 부여할 수 있습니다. 따라서 결제 한 건이, 제품을 제공하기 위해 당신이 쓰는 연산, API 호출, 스토리지, 지급의 여섯 명분을 움직이게 됩니다.
  • Apple이 공유 구매를 산 사람에게 환불하면 REVOKE App Store Server Notification을 보내며, 가족 공유된 모든 사본을 포함해 그 접근을 취소하는 것은 당신의 서버가 할 일입니다. Apple은 돈은 돌려주지만 당신을 대신해 권한을 종료해 주지는 않습니다.
  • REVOKE 안의 FAMILY_SHARED 트랜잭션이 revocationDate를 갖는 것은, 그 취소가 구매자에 대한 환불로 인해 발생했을 때뿐입니다. 가족 구성원이 단지 그룹을 떠났을 뿐이라면 같은 REVOKE가 revocationDate 없이 도착합니다. 이는 Apple 자체 엔지니어들의 설명입니다.
  • Apple은 새로운 가족 공유 구매가 가족 구성원에게 도달하기까지 의도적으로 약 한 시간 지연시킵니다. 다른 누군가가 접근을 얻기 전에 구매자가 공유를 비활성화할 시간을 갖도록 하기 위함입니다.
  • App Store Connect에서 인앱 구매의 Family Sharing을 활성화하면 되돌릴 수 없습니다. 일단 제품이 공유 가능해지면 계속 공유 가능한 상태로 남으며, 그때부터 당신의 환불 처리는 FAMILY_SHARED 트랜잭션을 고려해야 합니다.
  • 소모성 제품은 절대 가족 공유되지 않으므로, 가족 구성원이 CONSUMPTION_REQUEST를 유발하거나 당신의 소비 보고에 나타나는 일은 없습니다. Family Sharing 환불은 오직 비소모성 제품과 자동 갱신 구독에만 관련됩니다.

Family Sharing 그룹에서의 구매 한 건이 당신의 앱을 여섯 명에게 넘겨줄 수 있습니다. 결제한 사람은 그중 한 명입니다. 나머지 다섯 명은 지갑을 연 적이 없는데도 Apple은 여전히 당신의 앱이 그들 모두에게 작동하기를 기대합니다. 그것이 인앱 구매에 Family Sharing을 켜는 순간 당신이 동의하는 거래입니다. 그것은 또한 Family Sharing 환불이 일반적인 환불과 다른 종류인 이유이기도 합니다. 구매자가 돈을 돌려받을 때 그 한 계정에 대해서는 판매가 되돌려지지만, 당신이 최대 다섯 명의 다른 사람에게 부여한 접근은 저절로 꺼지지 않습니다. 그것을 하는 것은 당신의 서버이며, 구매자만 지켜보도록 작성되었다면 그렇게 되지 않습니다.

전체 그림을 한곳에 모았습니다. 이 글은 Apple이 공유 구매를 어떻게 표시하는지, 구매자를 가족과 구별하는 단 하나의 필드, Apple이 정확히 언제 REVOKE를 보내는지와 그것을 어떻게 읽는지, 환불과 단순한 가족 이탈을 가르는 조용한 세부사항, 그리고 당신에게 한 번도 지불하지 않은 사람들에게 이미 쓴 연산을 계산에 넣었을 때 공유 환불이 실제로 얼마의 비용이 드는지를 살펴봅니다.

Family Sharing이 나눠 주는 것, 그리고 몇 명에게 나눠 주는가

제품에 Family Sharing을 켜면 누가 당신의 유료 고객인지가 바뀝니다. Apple의 가족 그룹은 최대 여섯 명, 조직자 한 명과 최대 다섯 명의 구성원을 담을 수 있습니다. 그룹의 누군가가 가족 공유 가능한 제품을 사면 그룹의 모든 사람이 그것에 접근할 수 있게 됩니다. 그들은 지불하지 않습니다. 당신의 매출에 나타나지 않습니다. 그들은 그저 유효한 권한을 가지고 당신의 앱에 나타납니다. Apple이 그들 각자에게 같은 구매를 가리키는 트랜잭션을 발급하기 때문입니다.

공유 가능한 제품 유형은 두 가지뿐이며, 소모성은 그중 하나가 아닙니다

Family Sharing이 다루는 인앱 구매는 정확히 두 종류, 비소모성 제품과 자동 갱신 구독입니다. 소모성 제품, 즉 코인과 크레딧 제품은 절대 공유되지 않으며, 그렇기 때문에 가족 구성원이 CONSUMPTION_REQUEST를 유발하거나 당신의 소비 보고에 나타나지 않습니다. 당신의 앱이 소모성 제품만 판다면 Family Sharing 환불은 당신의 문제가 아닙니다. 평생 잠금 해제나 정기 요금제를 판다면 그것은 당신의 문제입니다.

구매자와 수혜자를 구별하는 필드

Apple이 발급하는 모든 트랜잭션은 inAppOwnershipType을 갖습니다. 값은 두 개입니다. PURCHASED는 이 계정이 제품 대금을 지불했고 취소나 환불 요청을 포함해 그것을 관리할 수 있음을 의미합니다. FAMILY_SHARED는 이 계정이 다른 사람의 구매를 통해 접근을 가진 가족 구성원임을 의미합니다. 둘 다 그 사람에게 당신의 제품을 사용할 권한을 줍니다. 지불한 것은 한쪽뿐입니다. 이 필드는 StoreKit 트랜잭션, 영수증, 그리고 App Store Server API에 있으므로, 당신이 이미 권한을 확인하는 곳이라면 어디서든 읽을 수 있습니다.

inAppOwnershipType어느 계정인가구매를 관리·환불할 수 있는가지불했는가
PURCHASED제품을 구매한 계정
FAMILY_SHARED공유 접근을 가진 가족 구성원아니요아니요

Family Sharing 환불이 당신의 서버에 도달하는 방식

공유 구매에 대한 환불은 여느 Apple 환불과 같은 방식으로 시작됩니다. 그것을 할 수 있는 유일한 사람인 구매자가 Apple에 돈을 돌려달라고 요청합니다. Apple이 결정합니다. Apple이 승인하면 구매자의 구매가 되돌려지고 Apple은 당신의 서버에 REVOKE App Store Server Notification을 보냅니다. 알림의 V1과 V2 모두 그것을 담습니다. REVOKE는 그 뒤에 있는 권한이, 그리고 가족 공유된 모든 사본이 이제 무효가 되었다는 유일한 신호입니다.

트랜잭션 한 건을 취소하지 말고, 전체 이력을 다시 읽으세요

REVOKE에 관한 Apple의 지침은 단호합니다. 그것을 단일 토글로 취급하지 마세요. 하나를 받으면 그 고객의 전체 트랜잭션 이력을 훑고 권한을 처음부터 다시 구성하세요. 한 사람이 같은 제품이나 다른 제품을 부여하는 둘 이상의 트랜잭션을 가질 수 있기 때문입니다. 알림에 이름이 지정된 트랜잭션만 취소하면, 환불된 가족 구성원에게 유효한 접근을 남기거나, 아직 유효한 두 번째 권한을 가진 사람을 차단하거나 둘 중 하나가 될 수 있습니다. 매번 전체 그림을 다시 세우세요.

여섯 개의 동일한 놋쇠 열쇠가 걸린 고리에서 놋쇠 열쇠 하나를 들어 올리는 손. Family Sharing 환불 후 한 가족 구성원의 공유 접근을 취소하는 것을 나타냅니다

환불과 가족 해체를 가르는 단 하나의 세부사항

여기, 팀이 디버깅에 오후 하나를 통째로 쓰게 만드는 함정이 있습니다. REVOKE는 FAMILY_SHARED 트랜잭션에 대해 매우 다른 두 가지를 의미할 수 있으며, 그것들을 구별하는 방법은 때때로 그냥 존재하지 않는 필드입니다. 구매자가 환불을 받으면 FAMILY_SHARED 트랜잭션에는 revocationDate가 딸려 옵니다. 가족 구성원이 그저 그룹을 떠났을 때는 같은 종류의 REVOKE가 revocationDate 없이 도착합니다. Apple의 상거래 엔지니어들이 개발자 포럼에서 직접 그렇게 말했습니다. 어느 쪽이든 접근은 회수하지만, 날짜가 있는 것만이 환불이며, 환불만이 결제도 되돌린 것입니다.

공유 환불이 실제로 당신에게 드는 비용

돈의 흐름을 따라가 보세요. 여기가 Family Sharing이 조용히 계산을 바꾸는 지점이기 때문입니다. 일반적인 환불은 판매 한 건을 되돌립니다. Apple은 대금을 구매자에게 돌려주고 수수료를 되돌려주므로 스토어 쪽은 거의 본전에 가깝습니다. 결코 돌아오지 않는 것은 당신이 제품을 제공하기 위해 이미 쓴 것입니다. Family Sharing에서는 당신이 그것을 한 번만 쓴 것이 아닙니다. 최대 여섯 명분을 쓴 것입니다. 구매자와 최대 다섯 명의 가족 구성원이 각각 당신의 연산을 돌리고, 당신의 API를 호출하고, 당신의 스토리지를 채우고, 당신이 자금을 대는 지급을 끌어냈습니다. 모두 결제 한 건에 기대어서요.

이제 구매자가 환불합니다. 그 결제 한 건이 되돌려집니다. 모든 가족 구성원의 접근도 같은 순간에 끝나야 합니다. 그들에게 제공하는 것을 정당화했던 것, 즉 유료 구매 한 건이 사라졌기 때문입니다. 당신의 서버가 PURCHASED 트랜잭션만 취소하고 FAMILY_SHARED 것들을 유효하게 남겨 두면, 최대 다섯 명이 당신의 유료 기능을 공짜로 계속 쓰고, 당신은 그들에게 제공하기 위해 계속 지불하며, 청구할 대상은 시스템에 아무것도 남지 않습니다. 그것은 반올림 오차가 아닙니다. 당신이 방금 되돌려준 판매의 제공 비용의 다섯 배입니다.

공유 환불에서 무엇을 취소하는가누가 접근을 잃는가무엇에 계속 지불하는가
전체 트랜잭션 이력구매자와 모든 가족 구성원없음, 모두의 접근이 끝남
PURCHASED 트랜잭션만구매자 한 명뿐최대 다섯 명의 가족 구성원, 여전히 당신의 연산, API, 스토리지, 지급을 사용
없음, REVOKE를 놓쳤기 때문아무도 잃지 않음구매자와 최대 다섯 명의 구성원, 모두 공짜

구독은 누수를 반복적으로 만든다

비소모성 제품이라면, 취소되지 않은 가족 구성원은 당신이 알아차릴 때까지 이어지는 일회성 손실입니다. 자동 갱신 구독에서는 더 나쁩니다. 권한이 이미 반복적이었기 때문입니다. 구독 주문에 대한 환불은 그룹 전체의 공유를 끝내야 하지만, 유효하게 남겨진 가족 구성원은 당신이 그들을 마감하지 못한 모든 청구 주기마다 유료 등급을 유지합니다. 해결책은 같습니다. 모든 REVOKE에서 전체 이력으로부터 권한을 다시 세우는 것입니다. 하지만 그것을 건너뛴 비용은 쌓여 갑니다.

제대로 하기, 그리고 실제 환불이 일어나기 전에 테스트하기

여기 만들어야 할 특별한 것은 없습니다. 일 전체는 접근을 구매자가 아니라 권한에 연결하고, 모든 REVOKE에서 그 접근을 다시 구성하는 것입니다.

  • 접근을 단일 구매자 계정이 아니라 트랜잭션과 그 inAppOwnershipType에 연결해 저장하세요. 그러면 FAMILY_SHARED 트랜잭션이 그 자체로 접근을 부여하고 그 자체로 취소될 수 있습니다.
  • 어떤 REVOKE 알림에서든, 이름이 지정된 트랜잭션 한 건을 끄는 대신, 고객의 전체 트랜잭션 이력을 다시 읽고 권한을 다시 계산하세요.
  • revocationDate가 있는 FAMILY_SHARED 트랜잭션은 환불로 취급하고 그 구성원의 접근을 종료하세요. revocationDate가 없는 것은 가족 이탈로 취급하고 그것도 종료하세요.
  • 갓 만들어진 공유 구매를 서둘러 서비스에 넣지 마세요. Apple은 구매자가 물러설 수 있도록 약 한 시간 그것을 보류하므로, 구매 탭에서 부여하지 말고 Apple이 실제로 발급하는 트랜잭션을 존중하세요.
  • 예행연습을 하세요. Apple의 Testing Family Sharing 도구는 공유 트랜잭션을 시뮬레이션할 수 있고, 샌드박스 환불은 당신의 프로덕션 서버가 받게 될 것과 같은 REVOKE를 발생시킵니다.

그렇게 하면 Family Sharing 환불은 별일 아닌 일이 됩니다. 구매자는 돈을 돌려받고, 그룹 전체가 같은 박자에 접근을 잃으며, 당신은 한 번도 당신에게 지불하지 않던 사람들에게 제공하기 위해 지불하는 것을 멈추게 됩니다.

자주 묻는 질문

inAppOwnershipType은 무엇이며 그 값은 무엇인가요?
inAppOwnershipType은 Apple이 모든 인앱 구매 트랜잭션에 붙이는 필드로, 두 개의 값을 가집니다. 제품을 구매한 계정에는 PURCHASED, 다른 사람의 구매를 통해 접근을 가진 가족 구성원에는 FAMILY_SHARED입니다. 이는 비소모성 제품과 자동 갱신 구독, 즉 Family Sharing이 지원하는 제품 유형에만 나타납니다.
구매자가 환불을 받으면 Apple이 가족 구성원의 접근을 자동으로 취소하나요?
아니요. Apple은 구매자의 결제를 되돌리고 당신의 서버에 REVOKE App Store Server Notification을 보내지만, 가족 공유된 모든 사본을 포함해 그 권한을 취소하는 것은 당신의 서버가 할 일입니다. REVOKE에 대해 조치하지 않으면 가족 구성원은 환불 후에도 접근을 유지합니다.
Family Sharing 환불을 가족 구성원이 그룹을 떠난 것과 어떻게 구별하나요?
FAMILY_SHARED 트랜잭션에 revocationDate가 있는지 확인하세요. 취소가 구매자에 대한 환불로 인해 발생한 경우 그 트랜잭션은 revocationDate를 가집니다. 가족 구성원이 단지 그룹을 떠났을 때는 REVOKE가 revocationDate 없이 도착합니다. 두 경우 모두 권한을 종료하지만, 결제를 되돌린 것은 날짜가 있는 것뿐입니다.
가족 공유된 구매 한 건은 몇 명이 사용할 수 있나요?
최대 여섯 명, 조직자와 최대 다섯 명의 가족 구성원입니다. 따라서 결제 한 건이 여섯 명에게 당신의 제품에 대한 권한을 줄 수 있으며, 그래서 구매자의 트랜잭션만 취소하면 공유 환불이 최대 다섯 명을 당신의 유료 기능에 남겨 둘 수 있습니다.
인앱 구매의 Family Sharing을 활성화한 후에 끌 수 있나요?
아니요. App Store Connect에서 인앱 구매의 Family Sharing을 활성화하면 되돌릴 수 없습니다. 일단 제품이 공유 가능해지면 계속 공유 가능한 상태로 남으므로, 당신의 환불 처리는 그 시점부터 FAMILY_SHARED 트랜잭션을 고려해야 합니다.
소모성 구매도 가족과 공유되나요?
아니요. Family Sharing은 비소모성 제품과 자동 갱신 구독만 다룹니다. 소모성 제품은 절대 공유되지 않으므로 가족 구성원이 CONSUMPTION_REQUEST를 유발하거나 당신의 소비 보고에 나타나지 않습니다.

출처 및 추가 자료

RefundHalt

App Store와 Google Play 환불 자동 처리

계속 읽기

다음 환불 요청은 이미 오고 있습니다.

이의를 제기하지 못한 환불에 관한 지원 이메일을 하나 더 읽는 시간이면 RefundHalt 설정을 마칠 수 있습니다.