Реалізація програми лояльності в мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація програми лояльності в мобільному додатку
Середній
~5 днів
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація програми лояльності в мобільному додатку

Програма лояльності в мобільному додатку — це не просто «копіюйте бали». За простим інтерфейсом скривається нетривіальна серверна логіка: трансакційність нарахування, запобігання накруткам, expiry балів і синхронізація стану між сесіями. Недооцінювати серверну частину тут не можна.

Модель даних та трансакційність

Баланс балів не можна зберігати як одне число в полі user.points. Потрібен журнал транзакцій:

loyalty_transactions:
  id UUID PK
  user_id UUID FK
  type ENUM('earn', 'redeem', 'expire', 'refund', 'bonus')
  amount INTEGER  -- позитивне для earn, негативне для redeem
  reference_id UUID  -- purchase_id, action_id
  reference_type VARCHAR
  expires_at TIMESTAMP  -- для earn-транзакцій
  created_at TIMESTAMP

-- Баланс = сума amount по незаистєким транзакціям
-- SELECT COALESCE(SUM(amount), 0) FROM loyalty_transactions
-- WHERE user_id = ? AND (expires_at IS NULL OR expires_at > NOW())

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

Усі операції зміни баланса — через транзакцію БД з рівнем ізоляції SERIALIZABLE для лічильників, або через оптимістичну блокування. Без цього при паралельних запитах (кілька вкладок, повторний тап) баланс може піти в мінус.

Механіки нарахування

Базові варіанти: за покупку (N балів за рубль), за дію (реєстрація, відзив, запрошення друга), бонусні періоди (x2 на вихідних). Кожен тип — окрема rule в таблиці loyalty_rules з умовами й коефіцієнтами. Це дозволяє змінювати механіки без деплоя.

Запобігання накруткам: обмеження нарахувань за одну дію в одиницю часу (rate limiting за user_id + action_type), верифікація дій (наприклад, відзив засчитується тільки після модерації), ліміт на реферальні нарахування.

Клієнтська реалізація

На мобільному клієнті — три ключових екрани: баланс з історією транзакцій, каталог вознаграджень, екран списання. Баланс синхронізується при кожному відкритті додатку й через WebSocket/SSE при активних операціях.

// Swift — підписка на оновлення баланса через WebSocket
class LoyaltyViewModel: ObservableObject {
    @Published var balance: Int = 0
    @Published var transactions: [LoyaltyTransaction] = []

    func subscribeToUpdates() {
        webSocketService.subscribe(channel: "loyalty.\(userID)") { [weak self] event in
            DispatchQueue.main.async {
                self?.balance = event.newBalance
                self?.transactions.insert(event.transaction, at: 0)
            }
        }
    }
}

Рівні програми лояльності

Тиерна система (Bronze → Silver → Gold) вимагає перерахування рівня при кожній зміні баланса. Краще зберігати total_earned (накопичене за період без урахування списань) окремо від поточного баланса — саме за цим значенням визначається tier.

Дати скидання tier (звичайно щорічно) — окрема фонова задача або cron. Потрібно повідомляти користувачів за 30 днів до даунгрейду tier.

Інтеграція з IAP

При покупці через In-App Purchase: нарахування балів відбувається на сервері після верифікації транзакції, до finishTransaction на клієнті чекати не потрібно — балі можна нараховувати асинхронно. При refund через Apple/Google — обробляємо webhook й створюємо refund-транзакцію в журналі.

Терміни реалізації — приблизно 5 днів: проектування схеми, серверна логіка нарахування й списання, клієнтські екрани, сповіщення.