In-App Purchase (IAP) — är mekanismen för köp i appen som gör det möjligt för användare att köpa digitala varor och tjänster direkt i den mobila appen. Plattformarna iOS och Android tillhandahåller inbyggda API:er för att genomföra betalningar utan att överföra bankkortsuppgifter till utvecklaren. Enligt Apples StoreKit-dokumentation behandlar IAP över 500 miljarder dollar i transaktioner årligen via App Store och Google Play.
Huvudpunkter
In-App Purchase (IAP) — är en teknik som möjliggör försäljning av digitala varor och tjänster i en mobil app. Betalningar behandlas via App Store (på iOS) eller Google Play (på Android), som tar ut en provision för att genomföra transaktionen. Utvecklaren får medlen efter avdrag av butikens provision.
Apple tar ut en provision på 30% (15% för små företag med intäkter upp till 1 miljon dollar). Google Play tar också ut 30% (15% på den första 1 miljonen dollar av utvecklarens intäkter). Från 2024 testar Google programmet User Choice Billing, som gör det möjligt för utvecklare att använda alternativa betalningssystem.
IAP är obligatoriskt för försäljning av digitala varor i appar enligt App Store och Google Plays policyer. Fysiska varor, tjänster (taxibeställning, matleverans) och peer-to-peer-betalningar kan använda tredjeparts betalningssystem.
App Store och Google Play stöder tre huvudtyper av In-App Purchase. Varje typ är avsedd för olika intäktsmodeller. Valet av produkttyp påverkar logiken för återställning av köp, hantering av prenumerationer och beteendet vid ominstallation av appen.
Consumable — är varor som kan köpas flera gånger och förbrukas under användning. Typiska exempel: spelvaluta (mynt, diamanter), extra liv, acceleratorer, förbrukningsbara boosters. Consumable återställs inte vid ominstallation av appen — utvecklaren hanterar själv varje användares saldo på sin egen server.
Non-Consumable — är varor som köps en gång och förblir tillgängliga för alltid. Exempel: fullversion av appen, premiumnivåer, upplåsning av filter, borttagning av annonser. Non-consumable produkter återställs via Restore Purchases API: efter ominstallation kan användaren få tillbaka tidigare köpta varor utan ytterligare betalning.
Auto-Renewable Subscription — är regelbundna betalningar för åtkomst till innehåll eller tjänst under en viss period (vecka, månad, år). Prenumerationen förnyas automatiskt tills användaren avbryter den i kontoinställningarna. Butikerna tillhandahåller servermeddelanden (App Store Server Notifications, Google Play Developer Notifications) om ändring av prenumerationsstatus: förnyelse, utgång, återbetalning.
Konfigurering av In-App Purchase börjar i utvecklarpanelerna: App Store Connect för iOS och Google Play Console för Android. För varje produkt anges en identifierare (Product ID), namn, beskrivning, typ och pris i amerikanska dollar med automatisk konvertering till regionala valutor. Efter skapandet genomgår produkten butikens granskning.
I App Store Connect skapas IAP-produkter i avsnittet Features → In-App Purchases. För varje produkt väljs typ (consumable, non-consumable, auto-renewable subscription, non-renewing subscription) och lokaliserade namn fylls i. För prenumerationer konfigureras ytterligare grupper (Subscription Groups) — grupper av utbytbara prenumerationer.
I Google Play Console konfigureras hanterade produkter (managed products) i avsnittet Monetise → Products → In-app products. Google använder termerna Managed Product (motsvarighet till non-consumable) och Subscription. För consumable-köp på Android används en separat consume-flagga som återställer produkten för återköp.
Granskning av IAP-produkter tar i genomsnitt 24–48 timmar i App Store och några timmar i Google Play. Prisändringar tillämpas omedelbart utan omgranskning. Product ID kan inte ändras efter skapande — det kan bara tas bort och skapas på nytt.
Receipt validation (verifiering av kvitto) — ett obligatoriskt steg i behandlingen av In-App Purchase. Klientappen skickar kvittot (receipt) till den egna servern, servern verifierar det via Apples (https://buy.itunes.apple.com) eller Googles (https://androidpublisher.googleapis.com) API och tilldelar först efter framgångsrik validering produkten till användaren.
Utan serververifiering kan en angripare förfalska butikens svar och få produkten gratis. Client-side validation är osäker eftersom den utförs i en miljö som kontrolleras av användaren. Serververifiering garanterar att kvittot är äkta och betalningen har genomförts framgångsrikt. För Apple sker verifieringen via slutpunkten verifyReceipt (produktion eller sandlåda), för Google — via Android Publisher API. Båda butikerna returnerar bekräftelse i JSON-format.
Apple returnerar i kvittot köpdata: product_id, transaction_id, purchase_date, expiration_date (för prenumerationer). Google returnerar liknande fält via API Purchases.products.get eller Purchases.subscriptions.get. Servern bör lagra transaction_id för varje kvitto och avvisa upprepade förfrågningar med samma ID för skydd mot replay-attacker.
Integrering av In-App Purchase kräver anslutning av plattformsbibliotek: StoreKit 2 på iOS och Billing Library 7+ på Android. API:erna gör det möjligt att begära en lista över produkter, initiera ett köp, bearbeta resultatet och återställa tidigare köpta produkter.
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) {
// Kvitto bekräftat — tilldelar produkt
await grantProduct(data.receipt.product_id)
}
Intäktsgenerering via In-App Purchase kräver en genomtänkt prisstrategi och UX. Användare är mer benägna att göra sitt första köp om de erbjuds ett attraktivt startpaket (starter pack) till ett lågt pris. Apple och Google rekommenderar att visa produktens pris innan köpet bekräftas.
Subscription onboarding — en kritisk konverteringsfas. Visa användaren värdet av prenumerationen innan du begär betalning: gratis provperiod, jämförelse av planer, lista över fördelar. Enligt forskning ökar en gratis provperiod (free trial) konverteringen av betalande användare med 25–40%.
Restore Purchases är obligatoriskt för non-consumable produkter och prenumerationer. Återställningsknappen bör vara tillgänglig i appens inställningar eller på betalningsskärmen. Google och Apple kan avvisa appen om återställning av köp inte är implementerad för motsvarande IAP-typer.
Grace Period — en frist för prenumerationer under vilken användaren behåller åtkomsten efter en misslyckad betalning. iOS och Android stöder grace period upp till 30 dagar. Aktivering av grace period minskar churn rate med 10–15%.
A/B-testning av IAP-priser — en viktig praxis för intäktsgenerering. App Store Connect stöder lokala priser (Price Tiers) med möjlighet att ändra priset utan omgranskning av produkten. Google Play Console gör det möjligt att konfigurera upp till 5 basplaner med olika priser för en prenumerationsprodukt. Det rekommenderas att testa minst två prispunkter: den nuvarande och den nya. Testningen genomförs under 2–4 veckor på ett urval av minst 1000 användare per prispunkt.
Butiksgranskning och avvisningshantering — en obligatorisk fas vid publicering av en app med IAP. Apple kontrollerar särskilt noggrant appar med automatisk förnyelse av prenumerationer: du måste tillhandahålla ett testkonto med aktiv prenumeration, visa skärmen för att avbryta prenumerationen och implementera Restore Purchases. Google Play är mindre strikt men begär bekräftelse av rättigheter till digitalt innehåll. Det rekommenderas att lägga till en anteckning för granskaren (Review Notes) med en beskrivning av IAP-logiken.
Vanliga frågor
In-App Purchase (IAP) — är mekanismen för att köpa digitala varor i en mobil app. Betalningen behandlas via App Store eller Google Play som drar av 30% (15% för små företag) i provision och överför resten till utvecklaren.
Det finns tre typer av IAP: consumable (förbrukningsbar — mynt, liv), non-consumable (permanent — borttagning av annonser, full version) och auto-renewable subscription (automatisk förnyelse — åtkomst till innehåll under en period). Non-consumable stöder återställning av köp.
Huvudmetoden för skydd — server-side receipt validation. Klienten skickar kvittot till din server, servern verifierar det via Apples eller Googles API. Utan serververifiering kan en angripare förfalska butikens svar och få produkten gratis.
IAP-konfigurering omfattar: att skapa produkter i App Store Connect eller Google Play Console, ansluta StoreKit (iOS) eller Billing Library (Android), implementera köpet och serververifiering av kvittot. Varje produkt genomgår butikens granskning.
Apple tar ut 30% (15% för utvecklare med intäkter upp till 1 miljon dollar). Google Play tar också ut 30% (15% för den första 1 miljonen). Från 2024 testar Google alternativa betalningssystem via User Choice Billing. Utvecklaren kan välja en extern betalleverantör men måste betala Google en serviceavgift på 11–12%.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också