美文网首页iOS 知识库
Swift3 苹果内购

Swift3 苹果内购

作者: z小志 | 来源:发表于2017-10-14 10:29 被阅读14次

    1、引入头文件

      import StoreKit
    

    2、在viewDidLoad添加

      SKPaymentQueue.default().add(self) 
     
      //添加代理
      SKPaymentTransactionObserver,SKProductsRequestDelegate
    

    2、支付

       if (SKPaymentQueue.canMakePayments()) {
            self.getProductInfo(payID: "苹果内购商品ID")
       }else{
            MDHubHelper.share.showError(msg: NSLocalizedString(str: "无法购买"))
       }
    
       func getProductInfo(payID:String) {
            SKPaymentQueue.default().add(self)
            let array = NSArray.init(object: payID)
            
            let request = SKProductsRequest.init(productIdentifiers: NSSet(array: array as! [Any]) as! Set<String>)
            request.delegate = self
            request.start()
        }
        
        func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) {
            
        }
        
        func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
            
        }
        
        func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
            
        }
        
        func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
            for transaction in transactions {
                switch transaction.transactionState {
                case .purchased:
                    self.completeTransaction(transaction: transaction)
                //请求服务端
                case .purchasing:
                    MDHubHelper.share.showStatus(msg:NSLocalizedString(str: "正在支付"))
                //正在交易
                case .failed:
                    MDHubHelper.share.showError(msg: NSLocalizedString(str: "支付失败"))
                    self.failedTransaction(transaction: transaction)
                case .restored:
                    MDHubHelper.share.showError(msg: NSLocalizedString(str: "已购买该商品"))
                    self.restoreTransaction(transaction: transaction)
                default:
                    self.failedTransaction(transaction: transaction)
                    break
                }
            }
        }
        
        func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
            
            let myProduct = response.products
            
            if (myProduct.count == 0) {
                MDHubHelper.share.showError(msg: NSLocalizedString(str: "无内购信息"))
                return
            }
            lPayment = SKPayment.init(product: myProduct[0])
            SKPaymentQueue.default().add(lPayment)
        }
        
        //自定义函数
        func completeTransaction(transaction:SKPaymentTransaction) {
            
            let recvURL = Bundle.main.appStoreReceiptURL
            let receiptData = NSData(contentsOf: recvURL!)
            let encodeStr = receiptData?.base64EncodedString(options: .endLineWithLineFeed)
            
            MDNetRequest.share.notifyApplePaySuccess(url: UrlApplePay, params: ["order_id":self.orderId!,"receipt":encodeStr!,"transactionId":transaction.transactionIdentifier!,"session_id":MDDataSource.share.session!], successBlock: {
                MDHubHelper.share.hidHubView()
                MDHubHelper.share.showError(msg: NSLocalizedString(str:"购买成功"))
            }, failBlock: {
                MDHubHelper.share.hidHubView()
                MDHubHelper.share.showError(msg: NSLocalizedString(str: "通知服务器失败"))
            }) { (err) in
                MDHubHelper.share.showError(msg: NSLocalizedString(str: "请求服务器错误"))
            }
            SKPaymentQueue.default().finishTransaction(transaction)
        }
        
        func failedTransaction(transaction:SKPaymentTransaction) {
            SKPaymentQueue.default().finishTransaction(transaction)
        }
        
        func restoreTransaction(transaction:SKPaymentTransaction) {
            SKPaymentQueue.default().finishTransaction(transaction)
        }
    
    

    相关文章

      网友评论

        本文标题:Swift3 苹果内购

        本文链接:https://www.haomeiwen.com/subject/vhynjxtx.html