Mobile Game In-Game Shop Implementation

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Mobile Game In-Game Shop Implementation
Medium
~5 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    761
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    649
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1071
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    884
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    466

Implementing In-Game Shop for Mobile Games

In-game shop is the central monetization point. Player opens it intending to spend. Implementation task: don't get in the way with technical issues and make purchasing as smooth as possible.

Catalog Architecture

Shop catalog is stored on server — no hardcoded prices and items on client. This allows changing offers without app update, running A/B tests, and launching promotions in real-time.

Product structure:

{
  "productId": "gems_pack_medium",
  "type": "iap_consumable",
  "storeProductId": {
    "ios": "com.mygame.gems.500",
    "android": "gems_500"
  },
  "displayName": "500 crystals",
  "description": "Plus 50 bonus crystals",
  "gemAmount": 500,
  "bonusGemAmount": 50,
  "badge": "best_value",
  "position": 2,
  "isVisible": true
}

storeProductId differs for iOS and Android, as product IDs are independent. Client selects appropriate by platform when displaying.

IAP Purchase: Technical Flow

// iOS - StoreKit 2
func purchaseProduct(_ product: Product) async throws -> PurchaseResult {
    let result = try await product.purchase()
    switch result {
    case .success(let verification):
        switch verification {
        case .verified(let transaction):
            // Verify with server
            let serverVerified = await verifyWithServer(transaction)
            if serverVerified {
                await transaction.finish()
                return .success
            } else {
                // Don't finish transaction — don't deliver item
                return .verificationFailed
            }
        case .unverified:
            return .verificationFailed
        }
    case .userCancelled: return .cancelled
    case .pending: return .pending
    }
}

Don't call transaction.finish() before delivering item. If finishing before server confirmation — on server error item not delivered but transaction finished, can't recover. Only after serverVerified = true.

Virtual Currency

Virtual currency wallet is stored on server. Client displays balance received from server on last sync and updates after each transaction.

Replenishment logic:

POST /shop/purchase
{ "productId": "gems_pack_medium", "receiptData": "...", "userId": "..." }

→ Server verifies receipt with Apple/Google
→ Checks transaction wasn't processed before (idempotency by transactionId)
→ Credits 550 gems to player balance
→ Returns { "newBalance": 1050, "transactionId": "..." }

Idempotency is mandatory: if client sends request twice (network fail → retry), item should deliver once, not twice.

Purchase History

Purchase history screen — common requirement and good practice to reduce chargebacks. Player sees all transactions with date, amount, and delivered item. This reduces "I don't remember buying this" as dispute reason.

Technically: purchase_history table on server, paginated API, client list with pull-to-refresh.

Rotating Offers and Promotions

Daily Deals, Flash Sales, personalized offers — separate shop item type with validUntil timestamp. Client displays countdown timer.

For personalization: Firebase Remote Config or custom recommendation engine selects offers based on player behavior (purchase history, level reached, time since last shop open).

Restore Purchases

On iOS restore purchases button is mandatory for non-consumable IAP and subscriptions. Implementation via Transaction.currentEntitlements in StoreKit 2. On Android — automatic on Play Store entry, but button in settings is good UX too.

Timeline: basic shop with several items, IAP integration and server verification — 5 days. Full implementation with rotating offers, history, subscriptions and analytics — 2 weeks.