Implementing Player Gifting System for Mobile Games
Gifting between players — social mechanic that increases engagement and indirectly stimulates monetization through reciprocity: received gift — want to give back. Technically one of non-trivial features: intersects with IAP, server logic, push notifications, anti-abuse and platform legal restrictions.
Platform Limitations
Apple allows gifting only non-consumable IAP via Gift Purchase (appeared iOS 17 for App Store). Gifting consumable (currency, resources) via App Store is unsupported — Apple explicitly forbids in App Store Review Guidelines 3.1.1.
Workaround — game gifts via own system where sender spends own virtual resources (not real money). Legally clean, requires no Apple coordination, works everywhere.
Google Play has no built-in gifting, so only option is own system on virtual currency.
Gifting System Architecture
Data model:
{
"giftId": "gift_uuid",
"senderId": "player_123",
"recipientId": "player_456",
"giftType": "gems",
"amount": 100,
"message": "Congrats on level 50!",
"status": "pending",
"createdAt": "2025-03-26T10:00:00Z",
"expiresAt": "2025-04-02T10:00:00Z"
}
Flow:
- Sender selects recipient from friends/guild list
- Selects gift type and amount
- Confirms: resources deducted from balance immediately
- Server creates
giftrecord withpendingstatus - Recipient gets push notification
- Recipient accepts → resources credited to balance, status →
accepted - On
expiresAtwithout acceptance — resources returned to sender, status →expired
Return on expiry is critical for UX: player shouldn't "lose" resources just because recipient didn't open app.
Limits and Anti-Abuse
Without limits gifting becomes tool for transferring resources between alt-accounts. Typical limits:
- Max 5 gifts per day per account
- Max amount per gift: 500 gems
- Min account age to gift: 7 days (anti-multi)
- Can't gift to accounts added to friends < 3 days ago
Server-side limit check on every request — client limits don't count.
Log all gift transactions with IP and device ID: lets you detect abuse patterns (one IP → many accounts, all gift to one).
Push Notifications
On gift received — immediate push: "Player PlayerName sent you 100 crystals! Claim gift". Deep link opens incoming gifts screen directly.
Day before expiry — reminder: "Gift from PlayerName expires tomorrow".
On iOS use APNs via Firebase Cloud Messaging or direct. On Android — FCM. Push payload includes giftId for navigation.
Gifts UI
"Incoming Gifts" screen — list with one-tap accept and "Accept All" button. Show sender name, type and amount, message, expiry timer.
Claim animation — particles or short crediting animation. Without this claiming feels technical, not joyful.
For social reinforcement: optional "Guild Activity" feed showing "Player A gifted Player B 100 gems". Stimulates others to participate.
Timeline: basic system (no App Store gifting, on virtual resources) with limits, push and history — 2–3 days. Pricing calculated after discussing limit scope and social features.







