Ilova ichidagi xaridlar


ULASHISH

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!