Код подтверждения квитанции для приложения iOS, не работает - PullRequest
0 голосов
/ 14 апреля 2019

Я впервые реализовал код Receipt-Validation в приложении для iOS, следуя инструкции Raywenderlich

Несмотря на то, что он работал нормально во время теста, используя Sandbox. В действительности это не работает, как ожидалось.

Когда приложение загружено, все функции доступны с самого начала; это означает, что нет проверки покупки содержимого iap.

В случае с Песочницей мне нужно было совершить покупку, чтобы получить квитанцию, а «совершение покупки» означало «получение содержимого iap».

И, насколько я знаю, в реальном мире квитанция идет с приложением. Моя интерпретация заключается в том, что я, вероятно, не проверяю то, что я должен в коде.

Любое руководство эксперта в этой области будет очень цениться.

Глядя на код, кажется, что (действительно) не так много проверок, кроме проверки того, что они являются действительными (правильно сформированными) квитанциями. Но я думаю, мне нужно больше, чтобы проверить, что само содержимое IAP было оплачено.

Ниже приведен соответствующий код:

func validateReceipt() {

    receipt = Receipt()

    if let receiptStatus = receipt?.receiptStatus {
        guard receiptStatus == .validationSuccess else {
            return
        }

        // If verification succeed, we show information contained in the receipt.
        // print("Bundle Identifier: \(receipt!.bundleIdString!)")
        // print("Bundle Version: \(receipt!.bundleVersionString!)")

        if let originalVersion = receipt?.originalAppVersion {
            //print("originalVersion: \(originalVersion)")
        } else {
            //print("originalVersion: Not Provided")
        }

        if let receiptExpirationDate = receipt?.expirationDate {
            //print("Expiration Date: \(formatDateForUI(receiptExpirationDate))")
        } else {
            //print("Expiration Date: Not Provided")
        }

        if let receiptCreation = receipt?.receiptCreationDate {
            //print("receiptCreation: \(formatDateForUI(receiptCreation))")
        } else {
            //print("receiptCreation: Not Provided")
        }

        // At this point we should enable full features if it is not yet the case.
        .... code to unlock full features .....
    }
}

1 Ответ

1 голос
/ 14 апреля 2019

Вы должны проверить поля с типом 17xx, где вы можете найти идентификатор продукта (тип поля 1702) и дату покупки (тип поля 1704).Это описано в руководстве Raywenderlich, которое вы упомянули в части «Чтение покупок в приложении».

Таким образом, вы можете проверить, приобрел ли пользователь IAP с идентификатором интересующего вас продукта. Идентификатор продукта такой же, какой вы выбрали в App Store Connect.в MyApps -> Функция -> IAP.

...