Я добавляю в приложение покупки в приложении.Я создал приложение в AppleStoreConnect, я создал там те же покупки.
В приложении я включил функции в приложениях.Я создал Enum для идентификаторов покупок.
import Foundation
enum IAPProducts: String {
case first = "400CN"
case second = "1300CN"
case third = "5000CN"
}
Я также создал синглтон для обработки покупок.
import Foundation
import StoreKit
class IAPManager: NSObject {
static let shared = IAPManager()
private override init() {}
var products: [SKProduct] = []
let paymentQueue = SKPaymentQueue.default()
public func setupPurchases(callback: @escaping(Bool) -> ()) {
if SKPaymentQueue.canMakePayments() {
paymentQueue.add(self)
callback(true)
return
}
callback(false)
}
public func getProducts() {
let identifiers: Set = [
IAPProducts.first.rawValue,
IAPProducts.second.rawValue,
IAPProducts.third.rawValue
]
let productRequest = SKProductsRequest(productIdentifiers: identifiers)
productRequest.delegate = self
productRequest.start()
}
public func purchase(productWith identifier: String) {
guard let product = products.filter({ $0.productIdentifier == identifier }).first else { return }
let payment = SKPayment(product: product)
paymentQueue.add(payment)
}
}
extension IAPManager: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .deferred:
break
case .purchasing:
break
case .failed:
failed(transaction: transaction)
case .purchased:
completed(transaction: transaction)
case .restored:
break
}
}
}
}
extension IAPManager: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
products.forEach { print($0.localizedTitle) }
}
}
В AppDelegate я проверяю возможность совершения покупок и получаю список доступных покупок..
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
IAPManager.shared.setupPurchases { success in
if success {
print("can make payments")
IAPManager.shared.getProducts()
}
}
return true
}
В этом случае надпись «может совершать платежи» отображается в консоли, а не в списке покупок.В чем может быть проблема и как ее решить?