Реалізація системи подарунків між гравцями мобільної гри
Gifting між гравцями — соціальна механіка, яка збільшує залученість та косвено стимулює монетизацію через взаємність: отримав подарунок — хочеш віддарити. Технічно це одна з найнетривіальніших фіч: тут перетинаються IAP, серверна логіка, push-сповіщення, anti-abuse та юридичні обмеження платформ.
Обмеження платформ
Apple дозволяє дарити тільки non-consumable IAP через вбудований механізм Gift Purchase (з'явився iOS 17 для App Store). Gifting consumable (валюта, ресурси) через App Store не підтримується — Apple явно запертує це у App Store Review Guidelines 3.1.1.
Обходний шлях — ігрові подарунки через собственну систему, де отправитель витрачає собственні віртуальні ресурси (не реальні гроші). Юридично чисто, не вимагает узгодження з Apple та роботает везде.
Google Play не має вбудованого gifting, тому єдиний варіант — собственна система на віртуальній валюті.
Архітектура системи подарунків
Модель даних:
{
"giftId": "gift_uuid",
"senderId": "player_123",
"recipientId": "player_456",
"giftType": "gems",
"amount": 100,
"message": "Поздравляю з рівнем 50!",
"status": "pending",
"createdAt": "2025-03-26T10:00:00Z",
"expiresAt": "2025-04-02T10:00:00Z"
}
Потік:
- Отправитель выбирает получателя з списку друзів/гільдії
- Вибирает тип подарунку та кількість
- Підтверджує: ресурси списуються з його баланса негайно
- Сервер створює запис
giftзі статусомpending - Отримувач отримує push-сповіщення
- Отримувач приймает → ресурси зачисляються на його баланс, статус →
accepted - При істеченню
expiresAtбез прийняття — ресурси повертаються отправителю, статус →expired
Повернення при істеченню критично для UX: гравець не повинен «втратити» ресурси тільки тому що отримувач не заходив у гру.
Лімити та anti-abuse
Без обмежень gifting перетворюється на інструмент перенесення ресурсів між alt-аккаунтами. Типові ліміти:
- Максимум 5 подарунків у день на один аккаунт
- Максимальна сума одного подарунку: 500 gems
- Мінімальний вік аккаунту для можливості дарити: 7 днів (анти-мульти)
- Неможна дарити аккаунтам, доданим у друзі менше 3 днів назад
Серверна перевірка лімітів при кожному запиті — клієнтські обмеження не рахуються.
Логування всіх транзакцій подарунків з IP-адресою та device ID: це дозволяє детектувати паттерни зловживань (один IP → багато аккаунтів, усі дарять одному).
Push-сповіщення
При отриманні подарунку — негайний push: «Гравець PlayerName прислав тобі 100 кристалів! Забери подарунок». Глибока посилання відкриває екран входящих подарунків напрямки.
За день до істечення терміну — reminder: «Подарунок від PlayerName істекает завтра».
На iOS використовуємо APNs через Firebase Cloud Messaging або напрямки. На Android — FCM. Payload push-сповіщення включает giftId для навігації.
UI подарунків
Екран «Входящі подарунки» — список з можливістю прийняти кожен подарком одним тапом та кнопкою «Прийняти всі». Відображаємо імя отправителя, тип та кількість, сообщение, таймер істечення.
Анімація прийняття — партиклы або коротка анімація зачисління. Без цього прийняття подарунку здается технічним дією, а не радісною подією.
Для соціального усилення: опціональний фід «Активність гільдії» де видно «Гравець А подарував Гравцю Б 100 gems». Це стимулює інших гравців до участі.
Терміни: базова система (без gifting через App Store, на віртуальних ресурсах) з лімітами, push та історією — 2–3 дні. Вартість розраховується після обговорення об'єму лімітів та соціальних фіч.







