Покупка Swift Inapp не удалась, но в системном диалоговом окне сказано, что все готово - PullRequest
1 голос
/ 14 марта 2019

У меня есть приложение, в котором есть функция покупки inApp. Проблема в том, что даже если я получаю сообщение об ошибке, например сбой из-за сообщения «Не удается подключиться к iTunes Store», в системном диалоговом окне появляется сообщение «Все готово. Ваша покупка прошла успешно». Вы можете найти мой код класса помощника покупки inApp вниз.

  public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        switch (transaction.transactionState) {
        case .purchased:
            NotificationCenter.default.post(name: .IAPHelperSetPepqueenNotification, object: nil)

            if let url = Bundle.main.appStoreReceiptURL {
                guard let receipt = try? Data(contentsOf: url) else {
                    print("error to take receipt")
                    return
                }
                let receiptData: String = receipt.base64EncodedString(options: .init(rawValue: 0))
                PepappNetwork.request(target: .postReceipt(platform: "ios", receipt: receiptData) , success: { (JSON) in
                    print(JSON)
                    let user = User(JSON: JSON["data"].dictionaryObject!)
                    UserDefaults.standard.set(user?.identifier, forKey: "userID")
                    user?.persist()

                    if user?.language != nil {
                        UserDefaults.standard.set(user!.language!, forKey: "forcedLanguage")
                        UserDefaults(suiteName: Constants.UserDefaults.containerName)!.set(user!.language!, forKey: "forcedLanguage")
                    }

                    NotificationCenter.default.post(name: Notification.Name.CurrentUserChanged, object: nil)
                    self.complete(transaction: transaction)

                }, error: { (errorString, _) in

                }) { (MoyaError) in

                }
            }
            break
        case .failed:
            NotificationCenter.default.post(name: .IAPHelperCancelNotification, object: nil)
            fail(transaction: transaction)
            break
        case .restored:
            restore(transaction: transaction)
            break
        case .deferred:
            break
        case .purchasing:
            break
        }
    }
}

Fail транзакции func

private func fail(transaction: SKPaymentTransaction) {
    print("fail...")
    if let transactionError = transaction.error as NSError?,
        let localizedDescription = transaction.error?.localizedDescription,
        transactionError.code != SKError.paymentCancelled.rawValue {
        print("Transaction Error: \(localizedDescription)")

    }

Перед входом в приложение введите функцию обновления транзакций «Все готово». диалог уже был показан.

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Возникла проблема с песочницей Apple, теперь она решена - https://developer.apple.com/system-status/

0 голосов
/ 14 марта 2019

Похоже, это недавняя ошибка Apple.Я начал испытывать это сегодня, и это появляется при совершении покупки с учетной записью песочницы.Однако, если вы загружаете приложение в TestFlight, покупки внутри приложения все еще работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...