Реалізація Win-Back кампаній для скасованих підписок у мобільному застосунку
Користувач скасував підписку — і ваш MRR падає. У середньому від 20% до 30% скасувань можна відкотити за допомогою правильно налаштованої win-back-кампанії. Ми маємо 5+ років досвіду та реалізували 15+ проектів з мобільними підписками загальною аудиторією понад 1 млн користувачів. У цьому матеріалі — готовий код, ключові метрики та реальні підводні камені.
Типовий кейс: фітнес-застосунок втрачав 40% підписників після першого місяця. Впровадження win-back з push-повідомленнями та сегментованими оферами підняло LTV реактивованих на 35% за квартал. Ключ — комбінація Apple Win-Back Offers (iOS 18+), Promotional Offers і кастомних paywall.
Без win-back у вас витікає до 10% щомісячного MRR тільки від cancelled subscribers. Системний підхід повертає 15–25% таких користувачів. Однак таймінг офера критичний: push через 3–7 днів після скасування подвоює конверсію порівняно з тижнем бездіяльності. Головне — не набриднути: частота не частіше одного push на 7 днів і повага до вибору користувача. Розгляньмо технічну реалізацію.
Три канали win-back
- Push-повідомлення для підписки з deep link на офер — надсилається через FCM/APNs на пристрої користувачів, які скасували підписку N днів тому.
- In-app офер при наступному відкритті — для тих, хто все ще відкриває застосунок після скасування.
- Apple Win-Back Offers — нативний механізм Apple (iOS 18+), який автоматично показує офери через App Store без серверної інфраструктури.
Як працюють Apple Win-Back Offers?
Новітній інструмент налаштовується в App Store Connect → Subscriptions → Win-Back Offers. Apple сама визначає eligible користувачів (колишні підписники конкретної Subscription Group) і відображає офер на сторінці застосунку в App Store. Докладніше в документації Apple Win-Back Offers. На клієнті потрібно обробити транзакцію, яка надходить при активації:
// Слухаємо Transaction.updates при запуску
for await result in Transaction.updates {
if case .verified(let transaction) = result {
if transaction.offerType == .winBackOffer {
// Користувач повернувся через Win-Back — розблоковуємо
await restoreSubscriptionAccess(transaction)
await transaction.finish()
// Логуємо для аналітики
Analytics.logEvent("win_back_reactivated", parameters: [
"offer_id": transaction.offerID ?? "unknown",
"product_id": transaction.productID
])
}
}
}
Докладніше про налаштування Apple Win-Back Offers
В App Store Connect необхідно налаштувати мінімум один win-back offer для кожної subscription group. Офер може бути безкоштовним пробним періодом, знижкою на фіксовану суму або відсотком. Apple автоматично покаже його користувачеві, коли той повернеться на сторінку застосунку. Клієнт отримує транзакцію з offerType = .winBackOffer. Для налагодження використовуйте Transaction.updates з симульованими транзакціями в Xcode.Promotional Offers для win-back (iOS 14+)
Для iOS нижче 18 або для in-app win-back використовуємо Promotional Offers із серверним підписом:
// Визначаємо кандидатів для win-back
func isWinBackCandidate() async -> Bool {
// Перевіряємо: чи є минула транзакція і немає активної
var hasExpiredSubscription = false
var hasActiveSubscription = false
for await result in Transaction.all {
if case .verified(let tx) = result,
tx.productType == .autoRenewableSubscription {
if tx.expirationDate ?? Date() < Date() {
hasExpiredSubscription = true
} else {
hasActiveSubscription = true
}
}
}
return hasExpiredSubscription && !hasActiveSubscription
}
// Показуємо win-back paywall при вході в застосунок
func showWinBackOfferIfNeeded() async {
guard await isWinBackCandidate() else { return }
guard let offerSignature = try? await apiClient.fetchWinBackSignature() else { return }
await MainActor.run {
presentWinBackPaywall(signature: offerSignature)
}
}
Push-повідомлення для win-back
Серверна логіка: вибираємо користувачів з subscription_expired_at BETWEEN NOW() - 7 DAYS AND NOW() - 3 DAYS і last_app_open > NOW() - 30 DAYS. Надсилаємо push через APNs:
{
"aps": {
"alert": {
"title": "Поверніться до Premium",
"body": "Спеціальна пропозиція: перший місяць за півціни"
},
"badge": 1,
"sound": "default"
},
"deep_link": "app://paywall?offer=win_back_50&utm_source=push&utm_campaign=winback_d7"
}
Deep link відкриває paywall безпосередньо з pre-selected офером. UTM-параметри — для аналітики конверсії.
Чому сегментація критична для win-back?
Офери працюють краще при сегментації користувачів:
| Сегмент | Тригер | Офер |
|---|---|---|
| Скасував < 7 днів тому | Наступний open | Pause замість скасування (Google Play) |
| Скасував 7–30 днів | Push на 7-й день | Знижка 30% на перший місяць |
| Скасував 30–90 днів | Push на 30-й день | Free trial на 2 тижні |
| Скасував > 90 днів | Сезонні кампанії | Максимальна знижка |
Чим довше користувач не повертається, тим агресивніший офер — стандартна модель реактивації підписок.
Порівняння каналів win-back:
| Канал | Переваги | Недоліки |
|---|---|---|
| Apple Win-Back Offers | Без серверної логіки, автоматичний відбір | Тільки iOS 18+, немає гнучкості офера |
| Promotional Offers | Працює на iOS 14+, гнучкі умови | Вимагає серверного підпису |
| Push + deep link | Крос-платформенність | Залежить від згоди на повідомлення |
Вимірювання ефективності
Обов'язкові метрики:
- Win-back rate: (реактивовані / кандидати на win-back) × 100
- Time to reactivation: медіана днів між скасуванням і поверненням
- LTV reactivated: порівнюємо з LTV користувачів без скасування
- Offer conversion by segment: який офер працює краще для якого сегменту
// Логуємо показ win-back офера
Analytics.logEvent("win_back_offer_shown", parameters: [
"days_since_cancellation": daysSinceCancellation,
"offer_type": offerType,
"segment": userSegment
])
Що входить у роботу
- Визначення win-back кандидатів (клієнт + сервер)
- Apple Win-Back Offers (iOS 18+) або Promotional Offers як fallback
- In-app paywall з win-back офером при наступному відкритті
- Push-нотифікація з deep link на офер
- Сегментація за часом з моменту скасування підписки
- Аналітика: воронка показ → клік → покупка
Терміни та вартість
Базова інтеграція in-app flow з Promotional Offers займає 3–5 днів (від $1,500). З push-інфраструктурою та серверною сегментацією — 5–10 днів (від $3,500). Вартість розраховується індивідуально після аналізу вимог. Зверніться до нас — ми оцінимо ваш проект і підберемо оптимальний стек. Гарантуємо інтеграцію без втрати поточних підписників. Середня економія від win-back кампанії складає до $10,000 на місяць для застосунку з 10,000 підписників.
Зв'яжіться для консультації щодо win-back кампанії — отримайте оцінку та рекомендації для вашого застосунку.
Покрокова інструкція для впровадження win-back кампанії
- Аналіз поточної бази: визначте кількість скасованих підписок за останні 90 днів та їх сегменти.
- Налаштування Apple Win-Back Offers: створіть офери в App Store Connect для кожного продукту.
- Інтеграція клієнтського коду: додайте обробку Transaction.updates з типом .winBackOffer.
- Налаштування push-кампаній: реалізуйте серверний вибір користувачів та відправку push з deep link.
- Сегментація та A/B тестування: запустіть різні офери для різних сегментів, виміряйте конверсію.
- Моніторинг та оптимізація: відстежуйте win-back rate та LTV, коригуйте офери.
Порівняння ефективності каналів win-back
Apple Win-Back Offers ефективніші за Promotional Offers у 1.5 рази завдяки автоматичному відбору. Push-кампанії з deep link ефективніші за звичайні нагадування у 2 рази. Комбінація двох каналів дає найкращий результат: до 35% повернених підписників. Для iOS підписок StoreKit 2 забезпечує швидшу обробку транзакцій, а для Android підписок аналогічну функціональність можна реалізувати через Billing Library.







