美文网首页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 苹果内购

    1、引入头文件 2、在viewDidLoad添加 2、支付

  • iOS 11 如何测试苹果商店内内购

    如何测试苹果商店内内购? 有什么现象? 0、苹果商店的内购,用户在苹果商店中选择内购产品时,如果用户已经安装好此应...

  • 苹果内购和Apple Pay 的区别

    苹果内购 和 Apple Pay 的区别 关注苹果支付和内购也是从苹果发布打赏功能必须走“内购”流程后,引发微信以...

  • 苹果内购流程

    苹果内购流程

  • 苹果内购

    先附上一篇介绍怎么填写协议、税务和银行业务的文章 本文主要介绍内购代码部分 首先导入StoreKit/StoreK...

  • 苹果内购

    代码经过验证,但是这里只提供了iap相关的代码,有依赖其他的代码自行删减 直接上代码

  • 苹果内购

    内购简介: 在APP里面购买一些东西的时候,必须要使用苹果的支付方式进行购买.如果你的APP当中销售的商品,跟AP...

  • 苹果内购

    1.登录开发者中心[开发者中心链接](https://developer.apple.com) 2.点击iTune...

  • 苹果内购

    http://www.jianshu.com/p/e9ae4cece800

  • 苹果内购

    苹果返回结果 返回状态码

网友评论

    本文标题:Swift3 苹果内购

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