首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有InAppPurchase &2目标的iOS应用程序

带有InAppPurchase &2目标的iOS应用程序
EN

Stack Overflow用户
提问于 2018-06-28 07:39:56
回答 1查看 101关注 0票数 0

我已经创建了一个带有IAP的App (只有一个非消耗品),并做了一个试用和一个完整的Target。到现在为止,一切都很好(我认为)。如果我使用模拟器启动试用版或完整版,所有工作都可以,甚至IAP方法也是如此。但问题是:当用户购买完整版时,如何更改目标?在Xcode中,我可以选择并启动我想要的版本(目标),但是我如何确定启动目标是试用版而不是完整版?我在Xcode中添加了一个Swift Flag,但可能我误解了它的操作。我必须从头开始吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 09:30:34

代码语言:javascript
复制
func startBuyingProducts() {
    let purchaseRequest = SKProductsRequest(productIdentifiers: Set<String>(arrayLiteral:productID))
    purchaseRequest.delegate = self
    purchaseRequest.start()
}

// SKPridcutsRequestDelegate method
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    if let product = response.products.first {
        if SKPaymentQueue.canMakePayments() {
            let payment = SKPayment(product: product)
            SKPaymentQueue.default().add(self)
            SKPaymentQueue.default().add(payment)
        }
    }    


//implement method of SKPaymentTransactionObserver 
//trigger the unlock feature method when the purchase succeed and the receipt return is verified through apple
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        switch transaction.transactionState {
            case .purchased:
                if let receiptURL = Bundle.main.appStoreReceiptURL {
                    let request = URLSession.shared.dataTask(with: receiptURL, completionHandler: { (data, response, error) in
                        let receiptJSON = data?.base64EncodedString(options: Data.Base64EncodingOptions.init(rawValue: 0))

                        //verify the receipt throught apple, or sending the verification throught your own server
                        var request = URLRequest(url: URL(string:"https://sandbox.itunes.apple.com/verifyReceipt")!)
                        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
                        request.httpMethod = "POST"
                        request.httpBody = receiptJSON?.data(using: String.Encoding.utf8)
                        let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
                            // unlock the feature here
                        })
                    })
                }
                SKPaymentQueue.default().finishTransaction(transaction)
                break
            case .failed:
                SKPaymentQueue.default().finishTransaction(transaction)
                break
            case .deferred:
                break
            case .purchasing:
                break
            case .restored: break
        }
    }
}

只需要一个目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51072809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档