Продолжить обработку квитанций после входа в систему - PullRequest
0 голосов
/ 13 декабря 2018

Я включил автоматическое продление подписки в своем приложении.По умолчанию приложение пытается использовать рабочий URL-адрес для обработки квитанций. Если код возвращает 27001, приложение будет использовать URL-адрес изолированной программной среды.Поэтому, если я запускаю приложение из XCode и учетная запись песочницы указывается в настройках iPhone (iTunes / AppStore), приложение пытается со второй попытки загрузить сведения о продукте для песочницы и делает это успешно.Поскольку массив продуктов не пуст, я могу купить подписку после запроса подтверждения.Похоже, что код работает, как ожидалось, но не во всех условиях.

Команда проверки приложений выполняет следующие действия: они выходят из реальной и песочнице учетной записи в настройках устройства.В этом случае, если они запускают приложение, приложение показывает приглашение войти в систему, потому что в приложении ViewController проверяет состояние подписок.Они нажимают Отмена.Затем они идут в BuySubscriptionViewController и снова нажимают Отмена.Таким образом, в данный момент массив продуктов пуст и невозможно купить продукт.

Я добавил следующее условие:

@IBAction func buySub(_ sender: Any) {

        if (product_mysub != nil) {
            StoreManager.shared.buy(product: product_mysub)
        } else {
            requestData()
        }
    }

Поэтому, если продукт не был найден, я спрашиваюпользователь может снова войти в систему, если попытается купить его.

func requestData() {
        let receiptManager: ReceiptManager = ReceiptManager()
        receiptManager.startValidatingReceipts()
    }

от ReceiptManager.swift:

func startValidatingReceipts() {
        do {
            _ = try self.getReceiptURL()?.checkResourceIsReachable()
            do {
                let receiptData = try Data(contentsOf: self.getReceiptURL()!)
                self.validateData(data: receiptData)
                print("Receipt exists")
            } catch {
                print("Not able to get data from URL")
            }
        } catch {
            guard UserDefaults.standard.bool(forKey: "didRefreshReceipt") == false else {
                print("Stopping after second attempt")
                return
            }
            UserDefaults.standard.set(true, forKey: "didRefreshReceipt")
            let receiptRequest = SKReceiptRefreshRequest()
            receiptRequest.delegate = self
            receiptRequest.start()
            print("Receipt URL Doesn't exist", error.localizedDescription)

        }
    }

Если пользователь снова нажимает на кнопку, приложение не просит егоВойдите снова и получите данные о продуктах.Если пользователь нажимает кнопку в третий раз, приложение отображает запрос на подтверждение покупки.Как я могу продолжить процесс покупки после ввода адреса электронной почты и пароля, не прося пользователя нажать кнопку еще 2 раза?

    extension ReceiptManager: SKRequestDelegate {
        func requestDidFinish(_ request: SKRequest) {
// this func is not executed after entering account details in the prompt and pressing OK


        }

        func request(_ request: SKRequest, didFailWithError error: Error) {
            print("Error refreshing receipt", error.localizedDescription)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...