Ilova ichidagi xaridlar
Ilova ichidagi xaridlar (StoreKit)
StoreKit 2 yordamida mahsulotlarni so‘rash, sotib olish va tranzaksiyalarni tekshirish orqali ilova ichidagi mahsulotlarni xarid qiling.
Mahsulot turlari
- Consumable (sarflanadigan): bir necha marta sotib olinishi mumkin (masalan, tangalar).
- Non-Consumable (sarflanmaydigan): bir martalik ochish (masalan, premium darajaga o‘tish).
- Auto-Renewable Subscription (avtomatik yangilanadigan obuna): takroriy kirish huquqi.
StoreKit 2 asoslari
Mahsulotlarni so‘rash, xarid qilish va tranzaksiyalarni App Store imzolagan kvitansiyalar yordamida tekshirish uchun StoreKit 2’dan foydalaning.
Sintaksis: let products = try await Product.products(for:), try await product.purchase(), so‘ng tekshiring va transaction.finish() ni chaqiring.
Misol
import StoreKit
@MainActor
func buy(productID: String) async throws {
let products = try await Product.products(for: [productID])
guard let product = products.first else { return }
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try verification.payloadValue
// unlock content
await transaction.finish()
default: break
}
}
Ushbu misol mahsulotni so‘raydi, xaridni amalga oshiradi, tranzaksiyani tekshiradi, kontentni ochadi va tranzaksiyani yakunlaydi.
Mahsulotlarni olish
Mahsulotlarni bir marta oling (masalan, ilova ishga tushganda) va ularni paywall/do‘kon UI’ingiz uchun xotirada saqlang.
Misol
import StoreKit
@MainActor
func loadProducts(ids: [String]) async throws -> [Product] {
let products = try await Product.products(for: ids)
return products.sorted { $0.displayName < $1.displayName }
}
Xarid jarayoni va natijalari
Barcha natijalarni qayta ishlang va kontentni ochishdan oldin har doim tekshiring.
Misol
import StoreKit
@MainActor
func purchase(_ product: Product) async {
do {
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try verification.payloadValue
// unlock content guarded by transaction.productID
await transaction.finish()
case .userCancelled:
// show nothing or restore UI state
break
case .pending:
// family approval or SCA; update UI accordingly
break
@unknown default:
break
}
} catch {
// network or App Store errors
}
}
Tranzaksiya yangilanishlarini tinglash
Ilovangiz UI’sidan tashqarida (masalan, App Store’dan yoki boshqa qurilmadan) amalga oshirilgan xaridlarni qabul qiling va ularni yakunlang.
Misol
import StoreKit
func startTransactionListener() {
Task.detached {
for await update in Transaction.updates {
do {
let transaction = try update.payloadValue
// update entitlements based on transaction.productID
await transaction.finish()
} catch {
// handle verification failure
}
}
}
}
Xaridlarni tiklash
Sarflanmaydigan mahsulotlar va faol obunalarni tiklash uchun joriy huquqlarni (entitlements) so‘rang.
Misol
import StoreKit
@MainActor
func restore() async {
for await result in Transaction.currentEntitlements {
if let transaction = try? result.payloadValue {
// re-unlock features for transaction.productID
}
}
}
Maslahat: IAP’larni App Store Connect’da sozlang va Sandbox hisoblari bilan sinab ko‘ring.
Xavfsizlik nuqtai nazaridan muhim bo‘lgan ochishlar uchun kvitansiyalarni server tomonida tekshirishdan foydalaning.
Testlash va Sandbox
Mahsulotlarni simulyatsiya qilish uchun TestFlight yoki StoreKit Configuration faylidan foydalaning; qurilmada Sandbox tester hisobi bilan tizimga kiring; sandbox tranzaksiyalari tezroq yakunlanishini, qurilma loglari esa nosozliklarni aniqlashga yordam berishini yodda tuting.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
