Apple і Google дозволяють продовжити дату поновлення підписки після збою, але їхні обмеження зовсім різні
Коли ваш застосунок падає, можна продовжити дату поновлення підписки, а не чекати запитів на повернення коштів. Розбираємо, як працюють 90-денні продовження Apple і відстрочка оплати в Google Play, де кожен магазин проводить межу і скільки вам коштує кожен варіант.

Головне
- App Store Server API дозволяє розробнику продовжити дату поновлення оплаченої активної автоматично поновлюваної підписки на строк від 1 до 90 днів, щоб компенсувати збій, скасований захід або перервану пряму трансляцію.
- Apple дозволяє два продовження дати поновлення на одного клієнта протягом 365 днів. Продовження, що набуло чинності, скасувати неможливо, а Apple надсилає клієнту лист із новою датою поновлення.
- Apple не продовжує підписку, яка перебуває в безкоштовному пробному періоді, у стані повторних спроб оплати, у пільговому періоді з датою завершення, що вже минула, або вже закінчилася. Підписка повинна мати щонайменше один оплачений період.
- Дні, додані продовженням дати поновлення в Apple, не зараховуються до року оплаченого обслуговування, після якого частка розробника в доході від підписки зростає з 70% до 85%.
- Метод purchases.subscriptionsv2.defer у Google Play переносить наступну дату списання за підпискою щонайменше на один день і щонайбільше на рік за один виклик. Користувач зберігає повний доступ без оплати, а Google надсилає сповіщення SUBSCRIPTION_DEFERRED.
- Продовження дати поновлення не повертає грошей: розробник зберігає платіж, але в додані дні платить за обчислення, зберігання та виклики API, а поновлення, яке покрило б ці витрати, немає. Повернення коштів віддає клієнту ціну, але не повертає нічого з уже витраченого на його обслуговування.
- Якщо через збій вбудовану покупку не було доставлено і Apple надсилає CONSUMPTION_REQUEST, чесне значення deliveryStatus дорівнює UNDELIVERED_SERVER_OUTAGE, а для будь-якого статусу, крім DELIVERED, Apple вимагає consumptionPercentage, що дорівнює 0.
Простій дає кожному передплатнику найпереконливіший привід для повернення коштів, і заборонити ним скористатися ви не можете. Натомість можете повернути втрачені дні раніше, ніж хтось про це попросить. Обидва магазини застосунків дозволяють продовжити дату поновлення підписки, щоб клієнт отримав безкоштовний час замість грошей. Apple обмежує кожне продовження 90 днями і дозволяє два на рік. Google дозволяє відстрочити оплату на строк до року за один виклик. Процедури, сповіщення та підсумкові витрати відрізняються настільки, що одного плану на випадок збою для обох магазинів не вистачить.
Як збій впливає на ризик повернень
Про повернення коштів вирішують магазини, а не ви. В App Store клієнт звертається до Apple, і Apple ухвалює рішення. Ви можете отримати сповіщення CONSUMPTION_REQUEST і 12 годин, щоб надіслати дані про споживання через Send Consumption Information. На цьому ваша участь закінчується.
У Google Play покупець може отримати повернення коштів протягом 48 годин після покупки, і вас про це не спитають. Після цього запити надходять до вас. Єдиний процес Google, у якому запитують ваші докази, це чарджбек, позначений для перевірки розробником: на нього ви відповідаєте через orders.reviewrefund протягом 24 годин. Рішення банку щодо чарджбеку остаточне.
Отже, жоден магазин не дає способу заблокувати повернення коштів. У ваших руках інше: чи почуватиметься передплатник ошуканим, коли сервіс знову запрацює. Додатковий час за підпискою, наданий швидко й чітко оголошений, це саме той інструмент, який обидва магазини створили для такої ситуації.
Як продовжити дату поновлення підписки в App Store
Для цього в App Store Server API є два ендпоінти. Extend a Subscription Renewal Date працює з однією підпискою, яку ви вказуєте за її originalTransactionId. Extend Subscription Renewal Dates for All Active Subscribers працює з усіма відповідними передплатниками одного productId, і його можна обмежити через storefrontCountryCodes, якщо збій зачепив лише деякі регіони.
Кожен запит містить три параметри: extendByDays, число від 1 до 90; extendReasonCode; і requestIdentifier, який ви генеруєте самі. Код причини 3 означає проблему із сервісом або збій. Код 1 означає задоволеність клієнта, код 2 означає інші причини, а код 0 означає, що причину не вказано.
Які підписки Apple продовжить
Підходять лише активні автоматично поновлювані підписки, що мають щонайменше один раніше оплачений період. Apple пропускає такі підписки:
- Підписки в безкоштовному пробному періоді, наприклад у безкоштовному тріалі.
- Неактивні підписки в стані повторних спроб оплати.
- Підписки в пільговому періоді оплати, дата завершення якого вже минула.
- Підписки, які вже отримали два продовження дати поновлення за останні 365 днів.
- Підписки, строк дії яких закінчився.
Сімейний доступ працює автоматично. Коли Apple продовжує придбану підписку з підтримкою сімейного доступу, підписки членів родини теж продовжуються. Напряму вибрати підписку члена родини не можна.
Масовий запит виконується повільно, тому стежте за сповіщеннями
Apple попереджає, що запит на продовження для всіх активних передплатників може тривати години або навіть дні, залежно від їхньої кількості. Відповідь 200 означає лише, що Apple розпочала обробку. Про результат вам повідомить App Store Server Notifications V2:
| Сповіщення | Підтип | Що воно означає |
|---|---|---|
| RENEWAL_EXTENDED | немає | Дату поновлення однієї підписки продовжено |
| RENEWAL_EXTENSION | FAILURE | Продовження однієї підписки не вдалося |
| RENEWAL_EXTENSION | SUMMARY | Увесь масовий запит завершено |
Для кожного FAILURE візьміть originalTransactionId із підписаної транзакції в payload і повторіть запит через ендпоінт для однієї підписки. Якщо зручніше опитувати, Get Status of Subscription Renewal Date Extensions повідомляє, чи завершено запит і скільки продовжень пройшло успішно або з помилкою.
Як працює відстрочка оплати в Google Play
У Google для цього є purchases.subscriptionsv2.defer, який викликається один раз для кожного токена покупки. Тіло запиту містить deferralContext із трьома полями. Значення etag береться з purchases.subscriptionsv2.get, і виклик завершиться помилкою, якщо воно не збігається з останнім etag підписки. Поле deferDuration визначає, на скільки перенести дату. А validateOnly зі значенням true виконує запит як пробний прогін, не змінюючи підписку.
Посібник Google з білінгу встановлює діапазон від одного дня до одного року за один виклик API. Щоб відстрочити далі, викличте метод знову до настання нової дати завершення. Для автоматично поновлюваної підписки відстрочка переносить наступну дату поновлення. Для передплаченого плану вона переносить час завершення. Для підписки з доповненнями всі позиції відкладаються на той самий строк. У відповіді вказано новий expiryTime кожної позиції.
Під час відстрочки користувач залишається передплатником, зберігає повний доступ і не платить за додатковий час. Google надсилає сповіщення для розробника в реальному часі SUBSCRIPTION_DEFERRED. Старий метод purchases.subscriptions.defer застарів, тому в новому коді використовуйте метод v2.
Google не повідомляє клієнта, тож це доведеться зробити вам
Apple надсилає клієнту лист після кожного успішного продовження. Посібник Google з білінгу взагалі не описує жодного повідомлення користувачу. Якщо мета полягає в тому, щоб запобігти запитам на повернення коштів, передплатник має знати про додатковий час. Повідомте його самі, у застосунку та електронною поштою, і вкажіть, скільки днів і чому.
Apple і Google у порівнянні
| Apple App Store | Google Play | |
|---|---|---|
| API | Extend a Subscription Renewal Date і масовий ендпоінт | purchases.subscriptionsv2.defer |
| Строк за один запит | Від 1 до 90 днів | Від 1 дня до 1 року |
| Як часто | Двічі на клієнта протягом 365 днів | Обмеження не вказано; викличте знову до нової дати завершення |
| Масовий варіант | Один виклик на productId, за потреби за вітринами | Один виклик на токен покупки |
| Безкоштовний пробний період | Не підходить | У посібнику Google не описано |
| Сповіщення | RENEWAL_EXTENDED, RENEWAL_EXTENSION | SUBSCRIPTION_DEFERRED |
| Повідомлення клієнта | Apple надсилає лист | На вашому боці |
| Можна скасувати | Ні | У посібнику Google не описано |
Скільки коштує продовження порівняно з поверненням коштів
Повернення коштів і продовження забирають гроші з різних місць. Повернення віддає те, що клієнт заплатив за період. Усе, що ви вже витратили на обслуговування цього клієнта, лишається витраченим: обчислення на кожну сесію, виклики API моделей, зберігання та будь-які виплати автору, чий контент він використовував.
Продовження зберігає платіж. Його ціна в тому, що ви надаєте послугу без поновлення, яке б за неї заплатило. Кожного доданого дня активний передплатник і далі накопичує ті самі рахунки. Для легкого користувача це майже нуль. Для активного користувача функції на основі ШІ 30 додаткових днів можуть означати 30 днів викликів моделі без жодного доходу. Добирайте строк продовження за тривалістю збою, а не за розміром вибачення, яке вам хотілося б принести.
| Чим ви жертвуєте | Повернення коштів | Продовження дати поновлення |
|---|---|---|
| Платіж за підписку | Повертається клієнту | Залишається у вас |
| Уже понесені витрати на обслуговування клієнта | Втрачено | Втрачено |
| Обчислення, зберігання та виклики API в додані дні | Немає, доступ припиняється | Оплачуєте ви, поновлення ще немає |
| Підписка після цього | Припиняється, якщо повернення відкликає доступ | Активна, поновлюється в нову дату |
Ціна у вигляді комісії Apple
Apple виплачує 70% від кожного поновлення протягом першого року оплаченого обслуговування передплатника і 85% після цього. На сторінці Apple про підписки сказано, що дні продовження не входять до днів оплаченого обслуговування. Тому продовження на 30 днів відсуває перехід цього передплатника на 85% на 30 днів. Якщо ви берете участь в App Store Small Business Program, ви вже отримуєте 85%, і ця ціна вас не стосується.
Ціна у вигляді чарджбеків у Google Play
Для замовлень, оформлених після 3 серпня 2026 року, чарджбек, який виграв власник картки, коштує розробнику в Google Play вартість покупки за вирахуванням сервісного збору Play плюс комісії банку. Збій якраз належить до подій, які відправляють роздратованого клієнта до банку. Відстрочка, що дійде до нього раніше, дешевша за спір, який ви не зможете виграти.

Коли продовження не підходить
Покупка не була підпискою
Продовження дати поновлення застосовується лише до підписок. Якщо збій зламав витратну покупку або разове розблокування, доставте товар повторно. Якщо Apple надішле щодо неї CONSUMPTION_REQUEST, повідомте, що сталося. У полі deliveryStatus в Apple є для цього значення UNDELIVERED_SERVER_OUTAGE, і Apple зазначає, що будь-який статус, крім DELIVERED, має супроводжуватися consumptionPercentage, що дорівнює 0.
Клієнт уже використав обидва продовження Apple
Ліміт Apple становить два продовження на клієнта за 365 днів. Два збої за рік вичерпають обидва, і після третього вам не буде чого запропонувати через магазин. Відстежуйте, скільки продовжень використав кожен originalTransactionId, щоб сповіщення FAILURE за масовим запитом не стали несподіванкою.
Клієнт на безкоштовному пробному періоді
Apple не продовжує підписку в безкоштовному пробному періоді. Користувач тріалу втратив безкоштовні дні, а не оплачені, тому ризик повернення коштів низький. Якщо хочете компенсувати йому незручності, повідомлення в застосунку обійдеться дешевше за будь-який виклик API.
Чек-лист на випадок наступного збою
- Зафіксуйте, коли збій почався і закінчився та які продукти й регіони він зачепив.
- Виберіть кількість днів, що покриває втрачений час. В Apple використовуйте код причини 3 і тримайтеся в межах від 1 до 90.
- В Apple надсилайте один масовий запит на кожен productId, обмежуючи його через storefrontCountryCodes, якщо постраждали лише деякі регіони.
- Відстежуйте RENEWAL_EXTENSION FAILURE і повторюйте кожен випадок через ендпоінт для однієї підписки.
- У Google Play пройдіться по активних токенах покупок, прочитайте etag кожного, спершу виконайте запит із validateOnly, потім відстрочте по-справжньому.
- Самі повідомте передплатників Google Play про додатковий час, бо Google цього не зробить.
- Оновлюйте строк дії прав за RENEWAL_EXTENDED і SUBSCRIPTION_DEFERRED, а не за власними розрахунками дат.
- Зберігайте логи використання для кожного акаунта, щоб у разі запиту на повернення коштів або чарджбеку ваші докази були готові протягом 12 годин для Apple і 24 годин для Google.
Поширені запитання
- Скільки разів можна продовжити дату поновлення підписки в App Store?
- Двічі на клієнта протягом 365 днів. Кожне продовження може становити від 1 до 90 днів, а підписка, яка вже отримала два продовження за останні 365 днів, для нового не підходить.
- Чи повідомляє Apple клієнта, що я продовжив його підписку?
- Так. Після успішного продовження дати поновлення Apple надсилає клієнту лист із новою датою поновлення. Посібник Google Play з білінгу такого повідомлення не описує, тому на Android передплатників потрібно повідомляти самостійно.
- На який строк можна відстрочити підписку в Google Play?
- Посібник Google з білінгу вказує від одного дня до одного року за один виклик purchases.subscriptionsv2.defer. Щоб відстрочити далі, викличте API знову до настання нової дати завершення. Користувач зберігає повний доступ і не платить за відстрочений час.
- Чи можна скасувати продовження дати поновлення в Apple?
- Ні. Apple зазначає, що після набуття чинності продовженням підписки скасувати його неможливо. Перед надсиланням запиту перевірте продукт, кількість днів і вітрини.
- Чи впливає продовження дати поновлення на мою частку доходу 85% в Apple?
- Так. Apple не включає дні продовження до днів оплаченого обслуговування, тому продовження відкладає перехід передплатника з 70% на 85% на кількість доданих днів. Розробники в App Store Small Business Program уже отримують 85%.
- Чи можна продовжити підписку в безкоштовному пробному періоді?
- В App Store ні. Apple виключає підписки в безкоштовному пробному періоді, а також у стані повторних спроб оплати, із завершеним пільговим періодом і підписки, строк дії яких закінчився. Підходять лише активні підписки щонайменше з одним оплаченим періодом.
Джерела та додаткове читання
- Apple Developer: Extending the renewal date for auto-renewable subscriptions
- Apple Developer: Extend a Subscription Renewal Date
- Apple Developer: Extend Subscription Renewal Dates for All Active Subscribers
- Apple Developer: extendReasonCode
- Apple Developer: Auto-renewable subscriptions
- Apple Developer: deliveryStatus
- Google Play Developer API: purchases.subscriptionsv2.defer
- Google Play Billing: Manage subscriptions and one-time purchases
- Google Play Billing: Subscription lifecycle
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Автопілот повернень для App Store і Google Play
Читайте далі
Надмірні запити на повернення коштують дорожче за самі повернення: обидва магазини застосунків вважають їх сигналом якості
Правило 5.6.4 Apple прямо називає надмірні запити на повернення ознакою того, що застосунок не відповідає стандартам якості, а угода Google про розповсюдження дозволяє видаляти застосунки нових розробників через частку повернень. Розбираємо, що пише кожен магазин, скільки коштує видалення і як не потрапити під удар.
Перевіряйте серверні сповіщення App Store, перш ніж діяти щодо повернення коштів, бо надіслати запит на ваш webhook URL може будь-хто
Сповіщення про повернення коштів залишається звичайним HTTPS-запитом, доки ви не перевірите його підпис. Пояснюємо, як перевіряти серверні сповіщення App Store і повідомлення Google Play RTDN, що саме підписує кожен магазин і скільки коштує підроблене або помилково відхилене повернення.