Реалізація промокодів та знижок у мобільному додатку
Ми розробляємо систему промокодів та знижок під ключ. Типова технічна проблема: клієнт хоче надати знижку конкретному користувачеві, але нативні промокоди App Store не дозволяють застосовувати їх всередині додатку — вони працюють лише при покупці через App Store поза додатком. Доводиться змішувати механізми, що веде до помилок валідації та витоку грошей. Наш досвід — понад 20 проєктів з промокодами на iOS та Android — дозволив напрацювати перевірені архітектурні рішення. Наприклад, на одному проєкті ми реалізували систему знижок з 15% економією для користувачів, використовуючи серверну логіку та Promotional Offers для підписок.
Як налаштувати промокоди без обмежень App Store?
Нативні промокоди Apple та Google — лише для платних додатків або IAP, негнучкі. Кастомна серверна логіка вирішує цю проблему: ви створюєте свої коди, керуєте знижками через адмінку та застосовуєте їх після покупки. Це дозволяє реалізувати знижки до 50% без порушення правил магазинів. Сервер зберігає всі дані про промокоди, а клієнт лише відображає результат валідації.
Чому кастомна серверна логіка надійніша?
Схема даних:
promo_codes: id, code, discount_type (percent|fixed|trial_days), value, max_uses, used_count, expires_at, product_ids[], user_id (опціонально) promo_redemptions: id, code_id, user_id, created_at, purchase_id Флоу на клієнті:
- Користувач вводить код → клієнт викликає
POST /api/promo/validateз кодом та product_id - Сервер повертає тип знижки та застосовувану ціну
- Клієнт показує підсумкову ціну
- Покупка через нативний IAP за повною ціною → на сервері після верифікації транзакції застосовуємо знижку (нараховуємо різницю валютою, продовжуємо trial тощо)
Пряма зміна ціни IAP на клієнті неможлива — Apple та Google не дозволяють динамічно змінювати вартість продукту. Вся логіка знижок реалізується post-purchase на сервері або через окремі продукти із уже заниженою ціною.
Promotional offers як механізм знижки
Для підписок на iOS — SKPaymentDiscount / SubscriptionOffer у StoreKit 2. Створюємо offer в App Store Connect із потрібною ціною, сервер генерує підпис для конкретного користувача. Це легальний спосіб запропонувати знижку без обходу нативного білінгу. Документація Apple: Promotional Offers
// Отримуємо offer з сервера let offerSignature = await serverAPI.getPromoSignature(userID: user.id, offerID: "discount_50") let product = try await Product.products(for: ["premium_monthly"]).first! let purchaseOption = product.subscriptionOffer( offerID: "discount_50", keyID: offerSignature.keyID, nonce: offerSignature.nonce, signature: offerSignature.signature, timestamp: offerSignature.timestamp ) let result = try await product.purchase(options: [purchaseOption!]) Введення промокоду в UI
Поле введення промокоду — окремий екран або bottom sheet із debounce-валідацією (запит до сервера через 300 мс після останнього символу). Важливо: показувати завантаження під час валідації та обробляти помилки — «код закінчився», «код уже використано», «не застосовується до вибраного продукту». Для підвищення конверсії додайте кнопку «Застосувати» та миттєвий відгук — зміну ціни в реальному часі.
| Механізм | Де застосовується | Гнучкість | Термін інтеграції | Приклад знижки |
|---|---|---|---|---|
| Нативні промокоди | App Store Connect / Google Play Console | Низька — лише для платних додатків та IAP | 1–2 дні | Фіксована знижка на перший місяць |
| Кастомні (із сервером) | Будь-який додаток | Висока — будь-які умови та знижки | 2–5 днів | 20% знижка при введенні коду |
| Promotional offers | Підписки iOS | Середня — лише підписки, потрібен підпис сервера | 2–3 дні | Безкоштовний пробний період на 7 днів |
Приклади сценаріїв промокодів
| Сценарій | Тип знижки | Реалізація | Механізм |
|---|---|---|---|
| Вітальний код | Фіксована сума | Сервер зменшує ціну при покупці | Кастомний |
| Знижка за репост | Відсоток | Після покупки нараховуються бали | Кастомний |
| Пробний період підписки | Безкоштовні дні | Promotional offer | iOS |
Типові помилки при реалізації промокодів
- Відсутність захисту від дублювання — користувач може активувати один код кілька разів, якщо не перевіряти прив'язку до акаунта.
- Ігнорування ліміту за часом — код повинен перевіряти термін дії на сервері, а не на клієнті.
- Неправильна обробка помилок — повідомлення «невірний код» замість конкретної причини.
Що входить в роботу
- Проєктування схеми даних промокодів та знижок
- Розробка REST API для валідації та застосування
- UI-компонент введення коду з обробкою помилок
- Інтеграція з нативним білінгом (StoreKit, Billing Library)
- Адміністративна панель для керування кодами та статистикою
- Документація по API та інструкція з експлуатації
Терміни орієнтовно
Базова система промокодів — від 2 до 5 робочих днів. Проєкт із promotional offers або складною багаторівневою знижкою — до 2 тижнів. Час залежить від кількості платформ та вимог до адмінки.
Чому обирають нас
Ми працюємо з мобільними знижками понад 5 років. Гарантуємо коректну обробку транзакцій та відповідність правилам магазинів. Зв'яжіться з нами — оцінимо ваш проєкт та запропонуємо оптимальне рішення. Замовте розробку системи промокодів уже сьогодні.







