Повернення коштів у Family Sharing скасовує один платіж, але може лишити ще п'ятьох людей, які й далі користуються вашим застосунком, і тільки ваш сервер здатен їх відключити
Повернення коштів у Family Sharing скасовує один платіж, але може лишити до п'яти членів родини на ваших платних функціях. Apple надсилає REVOKE і очікує, що ваш сервер завершить доступ. Ось як працює повернення коштів зі спільним доступом у родині і скільки коштує одне таке повернення.

Головне
- Apple позначає кожну транзакцію зі спільним доступом у родині значенням `inAppOwnershipType`, що дорівнює `FAMILY_SHARED`, а кожну пряму покупку значенням `PURCHASED`. Це поле з'являється лише на неспоживаних вбудованих покупках та автопродовжуваних підписках, двох типах продуктів, які підтримує Family Sharing.
- Одна покупка, доступна для спільного користування в родині, може надати право доступу до шести людей, покупцю плюс п'ятьом членам родини, тож один платіж може створити навантаження на обчислення, виклики API, сховище й виплати, які ваш продукт витрачає на обслуговування, у розмірі шістьох людей.
- Коли Apple повертає кошти людині, яка купила спільну покупку, вона надсилає App Store Server Notification типу REVOKE, а відкликання доступу, включно з кожною копією зі спільним доступом у родині, це робота вашого сервера. Apple повертає гроші, але не завершує ваші права доступу замість вас.
- Транзакція `FAMILY_SHARED` у REVOKE несе `revocationDate` лише тоді, коли відкликання спричинене поверненням коштів покупцю. Якщо член родини просто виходить із групи, той самий REVOKE приходить без `revocationDate`, як зазначили самі інженери Apple.
- Apple навмисно затримує нову спільну покупку в родині приблизно на одну годину, перш ніж вона дійде до членів родини, щоб покупець мав час вимкнути спільний доступ, перш ніж хтось інший отримає доступ.
- Увімкнення Family Sharing для вбудованої покупки в App Store Connect неможливо скасувати, тож щойно продукт стає доступним для спільного користування, він лишається таким, і ваша обробка повернень коштів має враховувати транзакції `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 надсилає вашому серверу App Store Server Notification типу REVOKE. І V1, і V2 сповіщення несуть його. REVOKE це ваш єдиний сигнал, що право доступу за ним, і кожна його копія зі спільним доступом у родині, тепер недійсне.
Не відкликайте одну транзакцію, перечитайте всю історію
Настанова Apple щодо REVOKE прямолінійна: не сприймайте його як окремий перемикач. Коли отримуєте його, пройдіть усю історію транзакцій клієнта й перебудуйте його права доступу з нуля, бо людина може тримати більш ніж одну транзакцію, що надає той самий чи інший продукт. Відкличете лише транзакцію, названу в сповіщенні, і ви можете або лишити члена родини з поверненими коштами з живим доступом, або відрізати того, хто досі має чинне друге право доступу. Щоразу відновлюйте повну картину.

Одна деталь, що відрізняє повернення коштів від розпаду родини
Ось пастка, що коштує командам цілого дня налагодження. 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 перечитуйте повну історію транзакцій клієнта й переобчислюйте права доступу, замість того щоб вимикати єдину названу транзакцію.
- Сприймайте транзакцію
FAMILY_SHAREDізrevocationDateяк повернення коштів і завершуйте доступ цього учасника. Сприймайте ту, що безrevocationDate, як вихід із родини й завершуйте його теж. - Не поспішайте вводити зовсім нову спільну покупку в обслуговування. Apple тримає її приблизно годину, щоб покупець міг відступити, тож зважайте на транзакцію, яку Apple насправді видає, а не надавайте доступ за дотиком купівлі.
- Відрепетируйте це. Інструментарій Apple Testing Family Sharing дає змогу змоделювати спільну транзакцію, а повернення коштів у пісочниці запускає той самий REVOKE, який отримає ваш продакшн-сервер.
Зробіть так, і повернення коштів у Family Sharing стане непомітною подією. Покупець отримує свої гроші, уся група втрачає доступ у тому самому такті, а ви припиняєте платити за обслуговування людей, які ніколи вам не платили.
Поширені запитання
- Що таке inAppOwnershipType і які його значення?
- inAppOwnershipType це поле, яке Apple додає до кожної транзакції вбудованої покупки, з двома значеннями: PURCHASED для облікового запису, що купив продукт, і FAMILY_SHARED для члена родини, який має доступ через чиюсь покупку. Воно з'являється лише на неспоживаних продуктах та автопродовжуваних підписках, типах продуктів, які підтримує Family Sharing.
- Чи відкликає Apple доступ членів родини автоматично, коли покупець отримує повернення коштів?
- Ні. Apple скасовує платіж покупця й надсилає вашому серверу App Store Server Notification типу REVOKE, але відкликання права доступу, включно з кожною копією зі спільним доступом у родині, це робота вашого сервера. Якщо ви не відреагуєте на REVOKE, члени родини збережуть доступ після повернення коштів.
- Як відрізнити повернення коштів у Family Sharing від члена родини, який виходить із групи?
- Перевірте наявність revocationDate на транзакції FAMILY_SHARED. Коли відкликання спричинене поверненням коштів покупцю, транзакція несе revocationDate. Коли член родини просто виходить із групи, REVOKE приходить без revocationDate. Обидва випадки завершують право доступу, але лише той, що з датою, скасував платіж.
- Скільки людей можуть користуватися однією покупкою зі спільним доступом у родині?
- До шести, організатор плюс аж до п'яти членів родини. Тому один платіж може надати право шістьом людям на ваш продукт, і саме тому спільне повернення коштів може лишити до п'яти людей на ваших платних функціях, якщо ви відкликаєте лише транзакцію покупця.
- Чи можу я вимкнути Family Sharing для вбудованої покупки після ввімкнення?
- Ні. Увімкнення Family Sharing для вбудованої покупки в App Store Connect неможливо скасувати. Щойно продукт стає доступним для спільного користування, він лишається таким, тож ваша обробка повернень коштів має враховувати транзакції FAMILY_SHARED відтоді й надалі.
- Чи діляться споживані покупки з родиною?
- Ні. Family Sharing охоплює лише неспоживані продукти та автопродовжувані підписки. Споживані ніколи не діляться, тож член родини ніколи не запускає CONSUMPTION_REQUEST і не з'являється у вашій звітності про споживання.
Джерела та додаткове читання
- Apple Developer: inAppOwnershipType (App Store Server API)
- Apple Developer Tech Talks: Explore Family Sharing for In-App Purchases
- Apple Developer: Supporting Family Sharing in your app
- Apple Developer: Testing Family Sharing
- App Store Connect Help: Turn on Family Sharing for in-app purchases
- Apple Developer Forums: family sharing REVOKE server-to-server notifications
- Apple Support: How Family Sharing works
RefundHalt
Автопілот повернень для App Store і Google Play
Читайте далі
Обробка повернень ламається непомітно, тому протестуйте повернення за вбудовані покупки в sandbox раніше, ніж це зробить реальний клієнт
Ваша обробка повернень запускається лише після того, як клієнт уже пішов, тому помилка в ній лишається невидимою, поки не почне коштувати реальних грошей. Обидва магазини дозволяють спершу запустити повернення в тестовому середовищі. Ось як протестувати повернення за вбудовані покупки в App Store і Google Play до того, як повернення стане реальним.
Те, у скільки повернення коштує вашому застосунку, більше за ціну, яку ви віддаєте назад
Повернена ціна це найменший рядок у рахунку. Повернення також скасовує комісію магазину, тож ви втрачаєте свою частку, а обчислення, виклики API, сховище та виплати, які ви вже витратили, зникають. Chargeback у Google Play після 3 серпня 2026 додає згори банківський збір. Ось повний рахунок.