Усі статті
Посібник8 хв читання

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_EXTENSIONFAILUREПродовження однієї підписки не вдалося
RENEWAL_EXTENSIONSUMMARYУвесь масовий запит завершено

Для кожного 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 StoreGoogle Play
APIExtend a Subscription Renewal Date і масовий ендпоінтpurchases.subscriptionsv2.defer
Строк за один запитВід 1 до 90 днівВід 1 дня до 1 року
Як частоДвічі на клієнта протягом 365 днівОбмеження не вказано; викличте знову до нової дати завершення
Масовий варіантОдин виклик на productId, за потреби за вітринамиОдин виклик на токен покупки
Безкоштовний пробний періодНе підходитьУ посібнику Google не описано
СповіщенняRENEWAL_EXTENDED, RENEWAL_EXTENSIONSUBSCRIPTION_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 виключає підписки в безкоштовному пробному періоді, а також у стані повторних спроб оплати, із завершеним пільговим періодом і підписки, строк дії яких закінчився. Підходять лише активні підписки щонайменше з одним оплаченим періодом.

Джерела та додаткове читання

RefundHalt

Автопілот повернень для App Store і Google Play

Читайте далі

Посібник8 хв читання

Надмірні запити на повернення коштують дорожче за самі повернення: обидва магазини застосунків вважають їх сигналом якості

Правило 5.6.4 Apple прямо називає надмірні запити на повернення ознакою того, що застосунок не відповідає стандартам якості, а угода Google про розповсюдження дозволяє видаляти застосунки нових розробників через частку повернень. Розбираємо, що пише кожен магазин, скільки коштує видалення і як не потрапити під удар.

Детальний розбір8 хв читання

Перевіряйте серверні сповіщення App Store, перш ніж діяти щодо повернення коштів, бо надіслати запит на ваш webhook URL може будь-хто

Сповіщення про повернення коштів залишається звичайним HTTPS-запитом, доки ви не перевірите його підпис. Пояснюємо, як перевіряти серверні сповіщення App Store і повідомлення Google Play RTDN, що саме підписує кожен магазин і скільки коштує підроблене або помилково відхилене повернення.

Наступний запит на повернення вже в дорозі.

Налаштуйте RefundHalt за час, потрібний, щоб прочитати черговий лист у підтримку про повернення, яке ви не встигли оскаржити.