Реалізація free trial: технічні деталі та підводні камені

Реалізація free trial: технічні деталі та підводні камені Ми часто бачимо, як додатки втрачають користувачів через непрозорий пробний період. «Я не знав, що з мене спишуть» — найчастіший відгук з однією зіркою після закінчення trial. Проблема вирішується технічно коректною реалізацією free trial:

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація free trial: технічні деталі та підводні камені
Середній
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Реалізація free trial: технічні деталі та підводні камені

Ми часто бачимо, як додатки втрачають користувачів через непрозорий пробний період. «Я не знав, що з мене спишуть» — найчастіший відгук з однією зіркою після закінчення trial. Проблема вирішується технічно коректною реалізацією free trial: прозорі умови, своєчасні нагадування та серверна валідація. За багаторічний досвід роботи з підписками в понад 20 проектах ми виявили, що грамотна інтеграція знижує кількість чарджбеків на 30–50% та підвищує конверсію в платних користувачів.

Згідно з дослідженням «Підписки в мобільних додатках: поведінка користувачів», користувачі, які отримали нагадування за 2 дні до закінчення trial, на 25% рідше оскаржують списання. Середній збиток від одного чарджбеку може становити до $25 з урахуванням комісій та втрати лояльності. При цьому серверна валідація дозволяє відсікти до 15% спроб повторного використання trial, економлячи $0.50 на кожному такому користувачі.

StoreKit 2: Introductory Offer

На iOS trial реалізується через Product.SubscriptionOffer з paymentMode = .freeTrial. Продукт створюється в App Store Connect: Auto-Renewable Subscription → Add Introductory Offer → Free → N днів/тижнів. У коді:

let product = // Product із prefetch кешу if let intro = product.subscription?.introductoryOffer, await product.subscription!.isEligibleForIntroOffer { // показуємо "7 днів безкоштовно" showTrialCTA(days: intro.period.value) } else { // користувач вже використовував trial — стандартна ціна showStandardCTA(price: product.displayPrice) } 

isEligibleForIntroOffer — async запит до App Store, робимо при prefetch. Користувач, який вже використав trial для цієї subscription group — не eligible. Показувати йому «7 днів безкоштовно» і потім списати одразу — шлях до dispute в банку.

Android: Free Trial у Play Billing Library 6+

val params = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(trialOfferToken) .build() ) ).build() billingClient.launchBillingFlow(activity, params) 

offerToken потрібно вибирати з subscriptionOfferDetails — беремо той, який містить FREE_TRIAL pricing phase. Якщо trial недоступний для користувача (вже був) — беремо base plan offer token.

Порівняння реалізації iOS та Android

Параметр iOS (StoreKit 2) Android (Play Billing 6)
Тригер trial Introductory Offer Prepaid/Subscription Offer з FREE_TRIAL
Перевірка eligibility isEligibleForIntroOffer Перевірка offerType в ProductDetails
Серверна валідація App Store Server API Play Developer API
Сповіщення App Store Server Notifications V2 Real-time Developer Notifications

Як забезпечити прозорість умов?

Apple вимагає явного розкриття умов auto-renewal поруч із кнопкою покупки. Стандартне формулювання під CTA кнопкою:

«7 днів безкоштовно, потім $9.99/міс. Підписка поновлюється автоматично. Скасування в будь-який час у налаштуваннях App Store.»

Розмір шрифту не менше 12pt. Якщо цю вимогу ігнорувати — не тільки погані відгуки, але й відхилення при рев'ю або видалення додатка при скаргах користувачів.

Окрім тексту під кнопкою: reminder push за 1–2 дні до закінчення trial — UNNotificationRequest з fireDate = trialEndDate - 2 дні. «Ваш пробний період закінчується післязавтра» з deep link на Manage Subscription. Це знижує chargeback rate, тому що користувач попереджений.

Серверна валідація trial

Клієнт не повинен бути джерелом правди про те, чи в trial користувач. Після transaction.finish() на iOS — серверна валідація через App Store Server API. Відповідь містить inAppOwnershipType, offerType, offerIdentifier — сервер знає, що це trial транзакція, і встановлює trial_ends_at у БД.

App Store Server Notifications V2 подія DID_RENEW з subtype: INITIAL_BUY означає конвертацію trial у платну підписку. EXPIRED з subtype: VOLUNTARY — користувач скасував до кінця trial. На кожну подію — оновлення статусу в БД та push-повідомлення користувачеві.

Grace period і billing retry

Підписка не продовжилась через проблеми з карткою — це не скасування. StoreKit 2 надсилає GRACE_PERIOD_STARTED notification. Клієнт отримує від сервера subscription_status: grace_period — показуємо банер «Проблема з оплатою» з deep link на оновлення платіжного методу (openURL → App Store subscription management). Не блокуємо доступ під час grace period (до 16 днів).

Чому довжина trial впливає на конверсію?

Середня конверсія trial у платну підписку: 20–40% залежно від категорії та довжини trial. 7-денний trial конвертує вдвічі краще 3-денного — користувач встигає сформувати звичку. 14-денний конвертує приблизно як 7-денний, але платить за нього оператор підвищеним періодом без revenue. 30-денний trial показує конверсію на 10% нижче 14-денного через зниження терміновості.

Довжина trial Відносна конверсія Середній дохід на користувача за 90 днів
3 дні 1x (база) $4.50
7 днів 2x $8.00
14 днів 1.9x $7.80
30 днів 0.9x $3.60

A/B тест довжини trial — обов'язковий. Firebase Remote Config керує тим, який offerIdentifier використовувати (3 дні vs 7 днів vs 14 днів).

Як налаштувати A/B тест довжини trial?

  1. Створіть кілька Intro Offers в App Store Connect з різною тривалістю (3, 7, 14 днів).
  2. У Firebase Remote Config задайте параметр trial_days зі значеннями 3, 7, 14.
  3. У коді при завантаженні продукту використовуйте відповідний offerIdentifier з Remote Config.
  4. Відстежуйте конверсію через Analytics і вибирайте оптимальну довжину.

Що входить до нашої реалізації trial?

Ми надаємо повний цикл робіт:

  1. Документація: опис логіки trial, схема серверної валідації.
  2. Код: інтеграція StoreKit 2 / Play Billing 6, серверна обробка сповіщень.
  3. Тестування: перевірка eligibility, grace period, reminder push.
  4. Доступи: налаштування App Store Connect, Google Play Console, Firebase.
  5. Навчання: передача знань команді замовника.
  • [ ] Створення intro offer / base plan в App Store Connect / Play Console
  • [ ] Перевірка eligibility на клієнті
  • [ ] Серверна валідація через App Store Server API / Play Developer API
  • [ ] Reminder push за 2 дні до закінчення
  • [ ] Grace period handling (банер + deep link)
  • [ ] A/B тест через Remote Config

Орієнтири за строками

Реалізація free trial з прозорими умовами, reminder push, серверною валідацією, grace period handling та Remote Config A/B керуванням — 3–5 робочих днів при готовому StoreKit 2 / Play Billing setup. Економія на чарджбеках після впровадження нашого підходу становить у середньому 30%. Замовте реалізацію та отримайте надійну subscription-систему з гарантією якості. Зв'яжіться з нами для консультації — ми допоможемо вибрати оптимальну довжину trial та уникнути типових помилок.