В приложении постоянно появляется лист покупкиIOS

Программируем под IOS
Ответить
Anonymous
 В приложении постоянно появляется лист покупки

Сообщение Anonymous »

Я пытаюсь реализовать опцию покупки/подписки InApp в своем приложении, и по какой-то причине после подписки я вижу стандартную анимацию значков и звук «успеха», что является собственным поведением iOS, но затем однажды лист исчез, он сразу же появится снова, чтобы подписаться... не знаю, почему это происходит.
Я попробовал ChatGPT 4o, но безуспешно.
Вот код моего StoreKitManager

Код: Выделить всё

import Foundation
import StoreKit

class StoreKitManager: NSObject, ObservableObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {

static let shared = StoreKitManager()

@Published var products: [SKProduct] = []
@Published var purchasedProductIDs: Set = []
@Published var purchaseStatus: PurchaseStatus?
@Published var isPremiumUser: Bool = false

private var productRequest: SKProductsRequest?

override init() {
super.init()
SKPaymentQueue.default().add(self)
fetchProducts()
checkPremiumStatus()
}

func checkPremiumStatus() {
// Retrieve purchased product IDs from UserDefaults
let purchasedProductIDs = UserDefaults.standard.stringArray(forKey: "purchasedProductIDs") ?? []
self.purchasedProductIDs = Set(purchasedProductIDs)

// Set isPremiumUser based on purchased products
isPremiumUser = !self.purchasedProductIDs.isEmpty
print("Premium Status Checked: \(isPremiumUser)")
}

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
DispatchQueue.main.async {
self.products = response.products
print("Products Fetched: \(self.products)")
for product in self.products {
print("Product: \(product.localizedTitle) - \(product.productIdentifier) - \(product.price)")
}
}
}

func fetchProducts() {
let productIdentifiers: Set  = ["here's my product id", "here's my product id", "here's my product id"]
print("Fetching products with identifiers: \(productIdentifiers)")
productRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productRequest?.delegate = self
productRequest?.start()
}

func buyProduct(_ product: SKProduct) {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
print("Initiating purchase for \(product.productIdentifier)")
}

// Once payment is received update premium status
private func handleTransaction(_ transaction: SKPaymentTransaction) {
switch transaction.transactionState {
case .purchased, .restored:
DispatchQueue.main.async {
self.purchasedProductIDs.insert(transaction.payment.productIdentifier)
UserDefaults.standard.setValue(Array(self.purchasedProductIDs), forKey: "purchasedProductIDs")
self.purchaseStatus = .success
self.checkPremiumStatus()
print("Transaction Successful: \(transaction.payment.productIdentifier)")
SKPaymentQueue.default().finishTransaction(transaction)
}
case .failed:
if let error = transaction.error as? SKError {
print("Transaction failed with error: \(error.localizedDescription)")
DispatchQueue.main.async {
self.purchaseStatus = .failure(error)
SKPaymentQueue.default().finishTransaction(transaction)
}
}
default:
break
}
}

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print("Updated transaction: \(transaction.transactionState.rawValue)")
handleTransaction(transaction)
}
}

// Update premium status after restore
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
for transaction in queue.transactions where transaction.transactionState == .restored {
purchasedProductIDs.insert(transaction.payment.productIdentifier)
}
UserDefaults.standard.setValue(Array(purchasedProductIDs), forKey: "purchasedProductIDs")
checkPremiumStatus()
print("Restored Purchase: \(self.purchasedProductIDs)")
}

func restorePurchase() {
SKPaymentQueue.default().restoreCompletedTransactions()
print("Restoring purchase")
}
}
Я попробовал ChatGPT 4o, но он выдает по сути тот же код, так что вроде все в порядке, но на самом деле он работает неправильно.

Подробнее здесь: https://stackoverflow.com/questions/786 ... eappearing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»