In-App Purchase (IAP) — је механизам куповине у апликацији који омогућава корисницима да купују дигиталне производе и услуге директно у мобилној апликацији. Платформе iOS и Android пружају уграђене API-је за обављање плаћања без преноса података банковне картице програмеру. Према документацији Apple StoreKit, IAP обрађује преко 500 милијарди долара трансакција годишње кроз App Store и Google Play.
Главно
In-App Purchase (IAP) — је технологија која омогућава продају дигиталних производа и услуга унутар мобилне апликације. Плаћања се обрађују кроз App Store (на iOS) или Google Play (на Android), који наплаћују провизију за обављање трансакције. Програмер добија средства умањена за провизију продавнице.
Apple наплаћује провизију од 30% (15% за мала предузећа са приходом до 1 милиона долара). Google Play такође наплаћује 30% (15% на први 1 милион долара прихода програмера). Од 2024. године Google тестира програм User Choice Billing, који омогућава програмерима да користе алтернативне системе плаћања.
IAP је обавезан за продају дигиталних производа у апликацијама према политикама App Store и Google Play. Физички производи, услуге (наручивање таксија, достава хране) и peer-to-peer плаћања могу користити системе плаћања трећих страна.
App Store и Google Play подржавају три главне врсте In-App Purchase. Свака врста је намењена различитим моделима монетизације. Избор врсте производа утиче на логику враћања куповина, управљање претплатама и понашање при поновној инсталацији апликације.
Consumable — су производи који се могу куповати више пута и троше се током употребе. Типични примери: играчка валута (ковинице, дијаманти), додатни животи, убрзивачи, потрошни бустери. Consumable се не враћају при поновној инсталацији апликације — програмер сам управља стањем сваког корисника на свом серверу.
Non-Consumable — су производи који се купују једном и остају доступни заувек. Примери: пуна верзија апликације, премијум нивои, откључавање филтера, уклањање реклама. Non-consumable производи се враћају путем Restore Purchases API-ја: након поновне инсталације, корисник може повратити раније купљене производе без поновног плаћања.
Auto-Renewable Subscription — су редовна плаћања за приступ садржају или услузи на одређени период (недеља, месец, година). Претплата се аутоматски обнавља док је корисник не откаже у подешавањима налога. Продавнице пружају серверска обавештења (App Store Server Notifications, Google Play Developer Notifications) о промени статуса претплате: обнављање, истек, повраћај.
Подешавање In-App Purchase почиње у панелима програмера: App Store Connect за iOS и Google Play Console за Android. За сваки производ се наводи идентификатор (Product ID), назив, опис, тип и цена у америчким доларима са аутоматском конверзијом у регионалне валуте. Након креирања, производ пролази кроз модерацију продавнице.
У App Store Connect производи IAP се креирају у секцији Features → In-App Purchases. За сваки производ се бира тип (consumable, non-consumable, auto-renewable subscription, non-renewing subscription) и попуњавају локализовани називи. За претплате се додатно конфигуришу групе (Subscription Groups) — групе међусобно замењивих претплата.
У Google Play Console managed производи се конфигуришу у секцији Monetise → Products → In-app products. Google користи термине Managed Product (аналог non-consumable) и Subscription. За consumable куповине на Android-у користи се посебан consume флаг који ресетује производ за поновну куповину.
Модерација IAP производа у просеку траје 24–48 сати у App Store и неколико сати у Google Play. Промене цена се примењују одмах без поновне модерације. Product ID се не може променити након креирања — може се само избрисати и поново креирати.
Receipt validation (провера рачуна) — обавезна фаза обраде In-App Purchase. Клијентска апликација шаље рачун (receipt) на сопствени сервер, сервер га проверава путем Apple (https://buy.itunes.apple.com) или Google (https://androidpublisher.googleapis.com) API-ја и тек након успешне валидације одобрава производ кориснику.
Без серверске валидације, нападач може да фалсификује одговор продавнице и добије производ бесплатно. Client-side validation је небезбедна јер се извршава у окружењу које контролише корисник. Серверска провера гарантује да је рачун аутентичан и да је плаћање успешно обављено. За Apple проверу се врши путем verifyReceipt endpoint-а (production или sandbox), за Google — путем Android Publisher API-ја. Обе продавнице враћају потврду у JSON формату.
Apple враћа у рачуну податке о куповини: product_id, transaction_id, purchase_date, expiration_date (за претплате). Google враћа слична поља путем API-ја Purchases.products.get или Purchases.subscriptions.get. Сервер треба да чува transaction_id сваког рачуна и одбија поновљене захтеве са истим ID-јем ради заштите од replay напада.
Интеграција In-App Purchase захтева повезивање платформских библиотека: StoreKit 2 на iOS и Billing Library 7+ на Android. API-ји омогућавају захтевање листе производа, покретање куповине, обраду резултата и враћање раније купљених производа.
import StoreKit
func purchaseProduct(productID: String) async throws {
guard let product = try await Product.products(for: [productID]).first else { return }
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try verification.payloadValue
await validateReceipt(transaction)
await transaction.finish()
default:
break
}
}
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingFlowParams
val billingClient = BillingClient.newBuilder(context)
.setListener { billingResult, purchases ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
purchases?.forEach { purchase ->
validateReceipt(purchase)
}
}
}
.build()
val params = BillingFlowParams.newBuilder()
.setProductDetails(productDetails)
.build()
billingClient.launchBillingFlow(activity, params)
const response = await fetch('https://buy.itunes.apple.com/verifyReceipt', {
method: 'POST',
body: JSON.stringify({
'receipt-data': receiptBase64,
'password': 'SHARED_SECRET'
})
})
const data = await response.json()
if (data.status === 0) {
// Рачун потврђен — одобравамо производ
await grantProduct(data.receipt.product_id)
}
Монетизација кроз In-App Purchase захтева промишљену стратегију цена и UX. Корисници су склонији првој куповини ако им се понуди атрактиван почетни пакет (starter pack) по ниској цени. Apple и Google препоручују приказивање цене производа пре момента потврде куповине.
Subscription onboarding — критична фаза конверзије. Покажите кориснику вредност претплате пре захтева за плаћање: бесплатни пробни период, поређење планова, листу предности. Према истраживањима, бесплатни пробни период (free trial) повећава конверзију корисника који плаћају за 25–40%.
Restore Purchases је обавезан за non-consumable производе и претплате. Дугме за враћање треба да буде доступно у подешавањима апликације или на екрану за плаћање. Google и Apple могу одбити апликацију ако враћање куповина није имплементирано за одговарајуће типове IAP.
Grace Period — период одлагања за претплате у којем корисник задржава приступ након неуспешног плаћања. iOS и Android подржавају grace period до 30 дана. Укључивање grace period смањује стопу одустајања (churn rate) за 10–15%.
A/B тестирање цена IAP — важна пракса монетизације. App Store Connect подржава локалне цене (Price Tiers) са могућношћу промене цене без поновне модерације производа. Google Play Console омогућава конфигурисање до 5 базних планова са различитим ценама за један претплатнички производ. Препоручује се тестирање најмање две ценовне тачке: тренутне и нове. Тестирање се спроводи током 2–4 недеље на узорку од најмање 1000 корисника по свакој ценовној тачки.
Преглед продавнице и управљање одбијањем — обавезна фаза објављивања апликације са IAP. Apple посебно пажљиво проверава апликације са претплатама са аутоматским обнављањем: потребно је обезбедити тест налог са активном претплатом, приказати екран за отказивање претплате и имплементирати Restore Purchases. Google Play је мање строг, али захтева потврду права на дигитални садржај. Препоручује се додавање напомене за рецензента (Review Notes) са описом логике IAP.
Често постављана питања
In-App Purchase (IAP) — је механизам куповине дигиталних производа у мобилној апликацији. Плаћање се обрађује кроз App Store или Google Play, који задржавају провизију од 30% (15% за мала предузећа) и преносе остатак програмеру.
Постоје три врсте IAP: consumable (потрошни — ковинице, животи), non-consumable (трајни — уклањање реклама, пуна верзија) и auto-renewable subscription (аутоматско обнављање — приступ садржају на период). Non-consumable подржавају враћање куповина.
Главни метод заштите — server-side receipt validation. Клијент шаље рачун на ваш сервер, сервер га проверава путем Apple или Google API-ја. Без серверске валидације, нападач може да фалсификује одговор продавнице и добије производ бесплатно.
Подешавање IAP укључује: креирање производа у App Store Connect или Google Play Console, повезивање StoreKit (iOS) или Billing Library (Android), имплементацију куповине и серверску проверу рачуна. Сваки производ пролази модерацију продавнице.
Apple наплаћује 30% (15% за програмере са приходом до 1 милион долара). Google Play такође наплаћује 30% (15% на први 1 милион). Од 2024. Google тестира алтернативне системе плаћања кроз User Choice Billing. Програмер може изабрати спољног провајдера плаћања, али мора платити Google сервисну накнаду од 11–12%.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође