本文介绍了调用In App Purchase时出错 - swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在调用以下功能时遇到问题(或购买产品):

I facing problem when calling function as below (OR purchase product):

它返回如下错误:

错误是什么?
如何解决?

What is the bugs?How can I solved it?

谢谢

推荐答案

之前我遇到过这个问题!它很容易修复。请确保您使用常规帐户和iTunes退出应用程序商店。

I had that issue before ! It is very easily fixed. Make sure you log out of the app store with your regular account and from iTunes.

下次在设备上测试IAP时,请使用您的沙箱帐户登录。它应该可以正常工作。

Next time you test your IAP on your device, log in with your sandbox account. It should work.

此外,如果没有解决你的问题,看看这个:

Also, if that doesn't fix your problem, have a look at this: My IAP isn't working. Bugs at func Paymentqueue

它包含我的IAP代码(有效)和修复一些问题的一些提示。我希望这个nswer很有帮助;)

It contains my code for IAPs (which works) and some tips to fix some issues. I hope this answer was helpful ;)

以下是完整的IAP代码:

Here is the full IAP code :

import UIKit
import StoreKit


class GameViewController: UIViewController, ADBannerViewDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver, GKGameCenterControllerDelegate,GADBannerViewDelegate{


    @IBOutlet var outRemoveAds: UIButton!
    @IBOutlet var outRestorePurchases: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if NSUserDefaults.standardUserDefaults().objectForKey("val") != nil {
            print("Has a value.")
            banner.removeFromSuperview()
            bannerGoogle.removeFromSuperview()
            outRemoveAds.removeFromSuperview()
            outRestorePurchases.removeFromSuperview()
            removeInterFrom = 1
        }
        else {
            print("No Value.")
        }

        if(SKPaymentQueue.canMakePayments()){
            print("IAP is enabled, loading...")
            let productID:NSSet = NSSet(objects:"IAP id")
            let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
            request.delegate = self
            request.start()
        }
        else{
            print("Please enable IAPS")

        }

    }


    //IAP Ads

    @IBAction func removeAds(sender: UIButton) {
        for product in list{
            let prodID = product.productIdentifier
            if (prodID == "IAP id"){
                p = product
                buyProduct()
                break
            }
        }
    }
    @IBAction func restorePurchases(sender: UIButton) {
        SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
    }


    //IAP Functions

    var list = [SKProduct]()
    var p = SKProduct()

    func removeAds(){
        banner.removeFromSuperview()
        bannerGoogle.removeFromSuperview()
        outRemoveAds.removeFromSuperview()
        outRestorePurchases.removeFromSuperview()
        let theValue = 10
        NSUserDefaults.standardUserDefaults().setObject(theValue, forKey: "val")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    func buyProduct(){
        print("Buy: "+p.productIdentifier)
        let pay = SKPayment (product: p)
        SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
    }

    func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
        print("Product Request")
        let myProduct = response.products

        for product in myProduct{
            print("Product Added")
            print(product.productIdentifier)
            print(product.localizedTitle)
            print(product.localizedDescription)
            print(product.price)

            list.append(product as SKProduct)
        }
    }

    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("IAP unlocked")
                print(p.productIdentifier)

                let prodID = p.productIdentifier as String
                switch prodID{
                case "IAP id":
                    print("Remove Ads")
                    removeAds()
                default:
                    print("IAP not setup")
                }
                queue.finishTransaction(trans)
                break
            case .Failed:
                print ("Buy error")
                queue.finishTransaction(trans)
                break
            default:
                print("default: Error")
                break
            }
        }
    }

    func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
        print("Purchases Restored")

        _ = []
        for transaction in queue.transactions {
            let t: SKPaymentTransaction = transaction as SKPaymentTransaction

            let prodID = t.payment.productIdentifier as String
            switch prodID{
            case "IAP id":
                print("Remove Ads")
                removeAds()
            default:
                print("IAP not setup")
            }


        }
    }
    func finishTransaction(trans:SKPaymentTransaction){
        print("Finshed Transaction")
    }

    func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
        print("Remove Transaction")
    }
}

Put:

SKPaymentQueue.defaultQueue().addTransactionObserver(self)

viewDidLoad或viewDidAppear中的

in viewDidLoad or viewDidAppear

这篇关于调用In App Purchase时出错 - swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 15:13