Я использую IOS 13,5, и у меня возникают проблемы при реализации IAP. Я использовал тот же самый точный код, когда я создал предыдущее приложение, и оплата работает нормально, когда я тестирую предыдущее приложение на том же физическом устройстве, что и сейчас.
Я проверил соединение inte rnet, которое является Хорошо, сертификаты выглядят хорошо, IAP в Itunes Connect «Готов к отправке», IAP включен для приложения, я сделал несколько тестеров песочницы с одинаковыми результатами. Я очищаю собранный и перезагруженный компьютер и устройство, но всегда говорит Code = 2 «не удается подключиться к Itunes Connect»
Я даже пытался загрузить сборку в Itunes connect, чтобы посмотреть, будет ли это иметь значение, но это не так. т. Мне явно чего-то не хватает и я буду благодарен за любую помощь по этому вопросу.
Звонок для инициирования покупки:
IAPService.shared.purchase(product: .fullAccess)
IAPService:
class IAPService: NSObject {
private override init() {}
static let shared = IAPService()
var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()
func getProducts() {
let products: Set = [IAPProduct.fullAccess.rawValue]
let request = SKProductsRequest(productIdentifiers: products)
request.delegate = self
request.start()
paymentQueue.add(self)
}
func purchase(product: IAPProduct){
guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue}).first else { return }
let payment = SKPayment(product: productToPurchase)
paymentQueue.add(payment)
}
func restorePurchases(){
print("restoring purchases")
GlobalVariables.hasFullAccess = false
GlobalVariables.partialAccessArrayKeys.removeAll()
paymentQueue.restoreCompletedTransactions()
CheckPurchase.shared.checkUserPurchase()
}}
extension IAPService: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for product in response.products {
print(product.localizedTitle)
}
}
}
extension IAPService: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState)
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
print(transaction.debugDescription)
if transaction.error != nil {
print(transaction.error)
}
}
}
}
extension SKPaymentTransactionState {
func status() -> String {
switch self {
case .deferred: return "deferred"
case .failed: return "failed"
case .purchased: return "purchased"
case .purchasing: return "purchasing"
case .restored: return "restored"
}
}
}
Продукт IAP:
enum IAPProduct : String {
case fullAccess = "se.marcusthuvesen.Torst.FullAccess"
}
Делегат приложения:
class AppDelegate: UIResponder, UIApplicationDelegate, SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.isIdleTimerDisabled = true
FirebaseApp.configure()
IAPService.shared.getProducts()
SKPaymentQueue.default().add(self)
//Load game texts from FireBase
return true
}}