【问题标题】:How to support IAP subscription free trial in iOS?iOS如何支持IAP订阅免费试用?
【发布时间】:2019-11-24 13:18:12
【问题描述】:

我有自动续订订阅。我添加了介绍性优惠免费试用 - 1 周。

我的代码:

class IAPManager:NSObject {

    static let shared = IAPManager()
    private override init() {    }

    var products: [SKProduct] = []
    let paymentQueue = SKPaymentQueue.default()

    public func setupPurchases(callback: @escaping(Bool) -> ()) {
        if SKPaymentQueue.canMakePayments() {
            paymentQueue.add(self)
            callback(true)
            return
        }
        callback(false)
    }

    public func getProducts() {
        let identifiers: Set = [
            IAPProducts.auto.rawValue
        ]

        let productRequest = SKProductsRequest(productIdentifiers: identifiers)
        productRequest.delegate = self
        productRequest.start()
    }

    public func purchase(productWith identifier: String) {
        guard let product = products.filter({ $0.productIdentifier == identifier }).first else { return }

        let payment = SKPayment(product: product)
        paymentQueue.add(payment)
    }

    public func restoreCompletedTransactions() {
        paymentQueue.restoreCompletedTransactions()
    }
}
extension IAPManager: SKPaymentTransactionObserver {
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .deferred: break
            case .purchasing: break
            case .failed: failed(transaction: transaction)
            case .purchased: completed(transaction: transaction)
            case .restored: restored(transaction: transaction)
            }
        }
    }

    private func failed(transaction: SKPaymentTransaction) {
        if let transactionError = transaction.error as NSError? {
            if transactionError.code != SKError.paymentCancelled.rawValue {
                print("Ошибка транзакции: \(transaction.error!.localizedDescription)")
            }
        }
        paymentQueue.finishTransaction(transaction)
    }

    private func completed(transaction: SKPaymentTransaction) {
        print("success")
        NotificationCenter.default.post(name: NSNotification.Name(transaction.payment.productIdentifier), object: nil)
        paymentQueue.finishTransaction(transaction)
    }

    private func restored(transaction: SKPaymentTransaction) {
        paymentQueue.finishTransaction(transaction)
    }
}



extension IAPManager: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        self.products = response.products
        print(self.products.count)
        products.forEach { print($0.localizedTitle) }
    }
}

如何将用户选择的免费试用订阅发送到 Apple 服务器?对于自动续订订阅,我只需致电:

iapManager.purchase(productWith: identifier)

如何激活免费试用订阅?

【问题讨论】:

  • 在首次发布后试用期结束之前不要验证购买收据?

标签: ios swift in-app-purchase


【解决方案1】:

免费试用由 Apple 自动管理 - 您只需在 App Store Connect 的产品上进行配置。 Apple 将允许每个订阅组的每位用户免费试用一次。您只是正常购买产品。

【讨论】:

猜你喜欢
  • 2020-05-30
  • 2019-12-22
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2018-01-12
  • 2018-06-09
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多