In-App Purchase (IAP), kullanıcıların bir mobil uygulama içinde doğrudan dijital ürünler ve hizmetler satın almasını sağlayan bir uygulama içi satın alma mekanizmasıdır. iOS ve Android platformları, banka kartı verilerini geliştiriciye aktarmadan ödemeleri işlemek için yerleşik API'ler sağlar. Apple StoreKit belgelerine göre, IAP App Store ve Google Play aracılığıyla yıllık 500 milyar doların üzerinde işlem hacmi gerçekleştirir.
Önemli Noktalar
In-App Purchase (IAP), bir mobil uygulama içinde dijital ürünler ve hizmetler satmayı sağlayan bir teknolojidir. Ödemeler, işlem ücreti alan App Store (iOS'ta) veya Google Play (Android'de) aracılığıyla işlenir. Geliştirici, mağaza komisyonu düşüldükten sonra parayı alır.
Apple %30 komisyon alır (geliri 1 milyon dolara kadar olan küçük işletmeler için %15). Google Play de %30 (geliştirici gelirinin ilk 1 milyon dolarında %15) alır. 2024'ten itibaren Google, geliştiricilerin alternatif ödeme sistemleri kullanmasına izin veren User Choice Billing programını test etmektedir.
App Store ve Google Play politikalarına göre uygulamalarda dijital ürün satışı için IAP zorunludur. Fiziksel ürünler, hizmetler (araç çağırma, yemek teslimatı) ve eşler arası ödemeler üçüncü taraf ödeme sistemlerini kullanabilir.
App Store ve Google Play üç ana In-App Purchase türünü destekler. Her tür, farklı para kazanma modelleri için tasarlanmıştır. Ürün türü seçimi, satın alma geri yükleme mantığını, abonelik yönetimini ve uygulamanın yeniden yüklenmesindeki davranışı etkiler.
Tüketilebilir satın alımlar, birden çok kez satın alınabilen ve kullanım sırasında tüketilen öğelerdir. Tipik örnekler: oyun parası (paralar, mücevherler), ekstra canlar, güçlendiriciler, tüketilebilir güç artırıcılar. Uygulama yeniden yüklendiğinde tüketilebilir öğeler geri yüklenmez — geliştirici her kullanıcının bakiyesini kendi sunucusunda yönetir.
Tüketilemeyen satın alımlar, bir kez satın alınan ve sonsuza kadar kullanılabilen öğelerdir. Örnekler: uygulamanın tam sürümü, premium seviyeler, filtrelerin kilidini açma, reklam kaldırma. Tüketilemeyen ürünler, Restore Purchases API aracılığıyla geri yüklenebilir: yeniden yüklemeden sonra kullanıcı, önceden satın alınan öğeleri tekrar ödemeden alabilir.
Otomatik yenilenen abonelik, belirli bir süre (hafta, ay, yıl) boyunca içeriğe veya hizmete erişim için yinelenen ödemelerdir. Kullanıcı hesap ayarlarından iptal edene kadar abonelik otomatik olarak yenilenir. Mağazalar, abonelik durumu değişiklikleri (yenileme, süre sonu, para iadesi) hakkında sunucu bildirimleri (App Store Server Notifications, Google Play Developer Notifications) sağlar.
Yapılandırma geliştirici panellerinde başlar: iOS için App Store Connect ve Android için Google Play Console. Her ürün için bir ürün kimliği (Product ID), ad, açıklama, tür ve bölgesel para birimlerine otomatik dönüştürme ile ABD doları cinsinden fiyat belirtilir. Oluşturulduktan sonra ürün mağaza denetiminden geçer.
App Store Connect'te IAP ürünleri, Features → In-App Purchases bölümünde oluşturulur. Her ürün için bir tür (consumable, non-consumable, auto-renewable subscription, non-renewing subscription) seçilir ve yerelleştirilmiş adlar doldurulur. Abonelikler için ayrıca Abonelik Grupları (Subscription Groups) — birbiriyle değiştirilebilir abonelik grupları — yapılandırılır.
Google Play Console'da yönetilen ürünler, Monetise → Products → In-app products bölümünde yapılandırılır. Google, Managed Product (tüketilemeyene benzer) ve Subscription terimlerini kullanır. Android'de tüketilebilir satın almalar için, ürünü yeniden satın alma için sıfırlayan ayrı bir consume bayrağı kullanılır.
IAP ürünlerinin denetimi genellikle App Store'da 24–48 saat, Google Play'de birkaç saat sürer. Fiyat değişiklikleri yeniden denetim olmadan hemen uygulanır. Ürün kimlikleri oluşturulduktan sonra değiştirilemez — yalnızca silinip yeniden oluşturulabilir.
Makbuz doğrulama, In-App Purchase işlemenin zorunlu bir adımıdır. İstemci uygulaması, kendi sunucunuza bir makbuz gönderir, sunucu bunu Apple API'si (https://buy.itunes.apple.com) veya Google API'si (https://androidpublisher.googleapis.com) aracılığıyla doğrular ve yalnızca başarılı doğrulamadan sonra kullanıcıya ürünü verir.
Sunucu taraflı doğrulama olmadan, bir saldırgan mağazanın yanıtını taklit edebilir ve ürünü ücretsiz alabilir. İstemci taraflı doğrulama, kullanıcı tarafından kontrol edilen bir ortamda çalıştığı için güvenli değildir. Sunucu taraflı doğrulama, makbuzun gerçek olduğunu ve ödemenin başarılı olduğunu garanti eder. Apple için doğrulama, verifyReceipt uç noktası (üretim veya sandbox) aracılığıyla, Google için — Android Publisher API aracılığıyla yapılır. Her iki mağaza da JSON biçiminde onay döndürür.
Apple, makbuzda satın alma verilerini döndürür: product_id, transaction_id, purchase_date, expiration_date (abonelikler için). Google, Purchases.products.get veya Purchases.subscriptions.get API'leri aracılığıyla benzer alanlar döndürür. Sunucu, her makbuzun transaction_id'sini saklamalı ve tekrar saldırılarına karşı korumak için aynı kimliğe sahip yinelenen istekleri reddetmelidir.
Entegrasyon için platform kütüphanelerinin bağlanması gerekir: iOS'ta StoreKit 2 ve Android'de Billing Library 7+. API'ler, ürün listesini isteme, satın alma başlatma, sonucu işleme ve önceden satın alınan öğeleri geri yükleme olanağı sağlar.
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) {
// Makbuz onaylandı — ürün veriliyor
await grantProduct(data.receipt.product_id)
}
Para kazanma için iyi düşünülmüş bir fiyatlandırma stratejisi ve UX gerekir. Kullanıcılar, düşük fiyatlı cazip bir başlangıç paketi sunulduğunda ilk satın almalarını yapmaya daha yatkındır. Apple ve Google, satın alma onay adımından önce ürün fiyatının gösterilmesini önerir.
Abonelik onboarding'i kritik bir dönüşüm aşamasıdır. Ödeme talep etmeden önce kullanıcıya aboneliğin değerini gösterin: ücretsiz deneme süresi, plan karşılaştırması, avantaj listesi. Araştırmalara göre, ücretsiz deneme süresi ücretli kullanıcılara dönüşümü %25–40 oranında artırır.
Satın Alma Geri Yükleme (Restore Purchases), tüketilemeyen ürünler ve abonelikler için zorunludur. Geri yükleme düğmesi, uygulama ayarlarında veya ödeme ekranında erişilebilir olmalıdır. Google ve Apple, ilgili IAP türleri için satın alma geri yükleme uygulanmamışsa uygulamayı reddedebilir.
Ödeme Erteleme Süresi (Grace Period), ödeme başarısızlığından sonra kullanıcının erişimi sürdürdüğü abonelikler için bir erteleme süresidir. iOS ve Android, 30 güne kadar ödeme erteleme süresini destekler. Ödeme erteleme süresini etkinleştirmek, kayıp oranını (churn rate) %10–15 azaltır.
A/B Testi önemli bir para kazanma uygulamasıdır. App Store Connect, yeniden denetim olmadan fiyat değiştirme imkanı ile yerel fiyatlandırmayı (Price Tiers) destekler. Google Play Console, bir abonelik ürünü için farklı fiyatlarla 5'e kadar temel plan yapılandırmaya izin verir. En az iki fiyat noktasının test edilmesi önerilir: mevcut ve yeni. Test, fiyat noktası başına en az 1000 kullanıcılık bir örneklemde 2–4 hafta boyunca yapılmalıdır.
Mağaza İncelemesi ve Reddetme Yönetimi, IAP içeren bir uygulama yayınlamanın zorunlu aşamasıdır. Apple, otomatik yenilenen abonelikleri olan uygulamaları özellikle dikkatle inceler: etkin bir aboneliğe sahip bir test hesabı sağlamanız, abonelik iptal ekranını göstermeniz ve Satın Alma Geri Yüklemeyi uygulamanız gerekir. Google Play daha az katıdır ancak dijital içerik haklarının onaylanmasını gerektirir. IAP mantığını açıklayan bir inceleme notu (Review Notes) eklenmesi önerilir.
Sıkça Sorulan Sorular
In-App Purchase (IAP), bir mobil uygulama içinde dijital ürünler satın alma mekanizmasıdır. Ödeme, %30 komisyonu (%15 küçük işletmeler için) kesip kalanını geliştiriciye aktaran App Store veya Google Play aracılığıyla işlenir.
IAP'nin üç türü vardır: tüketilebilir (biten — paralar, canlar), tüketilemeyen (kalıcı — reklam kaldırma, tam sürüm) ve otomatik yenilenen abonelik (yinelenen — bir dönem boyunca içeriğe erişim). Tüketilemeyen satın almalar geri yüklemeyi destekler.
Birincil koruma yöntemi sunucu taraflı makbuz doğrulamasıdır. İstemci makbuzu sunucunuza gönderir ve sunucu bunu Apple veya Google API'si aracılığıyla doğrular. Sunucu taraflı doğrulama olmadan, bir saldırgan mağaza yanıtını taklit edebilir ve ürünü ücretsiz alabilir.
Yapılandırma şunları içerir: App Store Connect veya Google Play Console'da ürünler oluşturma, StoreKit (iOS) veya Billing Library (Android) bağlama, satın alma akışını uygulama ve sunucu taraflı makbuz doğrulama. Her ürün mağaza denetiminden geçer.
Apple %30 alır (geliri 1 milyon doların altındaki geliştiriciler için %15). Google Play de %30 alır (ilk 1 milyonda %15). 2024'ten itibaren Google, User Choice Billing aracılığıyla alternatif ödeme sistemlerini test etmektedir. Geliştirici üçüncü taraf bir ödeme sağlayıcısı seçebilir ancak Google'a %11–12 hizmet ücreti ödemelidir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun