Как проверить статус покупки в приложении In-App Purchase (автоматическое продление подписки)? - PullRequest
0 голосов
/ 11 января 2019

Я создал функцию покупки в приложении для приложения, используя автоматическое продление подписки. Проблема в том, что я не уверен, как проверить статус покупки, истекла ли подписка или все еще активна.

Здесь я пытаюсь сохранить приобретенный статус:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    print("add payment")

    for transaction: AnyObject in transactions {
        let trans = transaction as! SKPaymentTransaction
        print(trans.error)

        switch trans.transactionState {
        case .purchased:
            print("buy ok, unlock IAP HERE")
            print(p.productIdentifier)

            let prodID = p.productIdentifier
            switch prodID {
                case "com.test.UnlockTools.Subscription1":
                    print("tool set 1 unlocked")
                    uTool1()
                    print("tool set 2 unlocked")
                    uTool2()
                    print("tool set 3 unlocked")
                    uTool3()
                    UserDefaults.standard.set(true, forKey: "isSubbed")
                default:
                    print("IAP not found")
                }
            queue.finishTransaction(trans)
        case .failed:
            print("buy error")
            queue.finishTransaction(trans)
            break

        default:
            print("Default")
            break
        }
    }
}

Здесь я вызываю UserDefaults и разрешаю или запрещаю взаимодействие кнопок:

override func viewDidLoad() {
    super.viewDidLoad()

    if(SKPaymentQueue.canMakePayments()) {
        print("IAP is enabled, loading")
        let productID: NSSet = NSSet(object: "com.test.UnlockTools.Subscription1")
        let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
        request.delegate = self
        request.start()
    } else {
        print("please enable IAPS")
    }

    status = UserDefaults.standard.bool(forKey: "isSubbed") ?? false

    if status == true {
        unlockTool1.isUserInteractionEnabled = true
        unlockTool2.isUserInteractionEnabled = true
        unlockTool3.isUserInteractionEnabled = true
    } else {
        unlockTool1.isUserInteractionEnabled = false
        unlockTool2.isUserInteractionEnabled = false
        unlockTool3.isUserInteractionEnabled = false
    }

}

Если я выясню статус, я смогу сохранить состояние как true / false. Я попытался использовать UserDefaults с некоторым успехом. Не уверен, что я разместил код в лучшем месте.

Если подписка по-прежнему активна, я бы хотел, чтобы пользователь мог нажать кнопку и запретить ее, если срок действия подписки истек.

Я добавлю больше кода, если нужно. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 11 января 2019

Единственный способ проверить статус подписки - это проверить квитанцию ​​в Apple, чтобы убедиться, что она все еще действительна, используя их /verifyReceipt конечную точку - документы .

Что вы можете сделать, это кэшировать некоторую дату истечения срока действия после покупки и использовать ее, чтобы проверить, действительна ли подписка. Если срок действия истек, вы можете перепроверить квитанцию ​​в Apple, чтобы узнать, продлевается ли она. Существуют также крайние случаи, когда пользователю возвращают деньги и его подписка отменяется до истечения срока действия. Вам следует периодически обновлять свои квитанции в Apple, чтобы проверить этот случай. В идеале все это должно происходить на стороне сервера, чтобы избежать пиратства.

Вот отличный пост, в котором очень хорошо обобщены данные о подписках Apple: Подписки iOS жесткие

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