Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift,spritekit:应用程序内购买代码运行时,什么都没有发生?_Ios_Swift_Sprite Kit_In App Purchase - Fatal编程技术网

Ios Swift,spritekit:应用程序内购买代码运行时,什么都没有发生?

Ios Swift,spritekit:应用程序内购买代码运行时,什么都没有发生?,ios,swift,sprite-kit,in-app-purchase,Ios,Swift,Sprite Kit,In App Purchase,好的,我在Swift工作,我需要帮助。我已经学习了4个不同的教程,介绍了如何在sprite kit中使用快速复制的代码一字不差地实现应用内购买,但没有任何东西适合我 以下是我采取的步骤: 进入Itunes Connect并在我的应用记录下创建了应用内购买。我的应用内购买的产品Id是GameOverSaveSavior 在Xcode中,我已将我的应用程序的应用程序内购买功能打开,确保我的团队已设置为我的帐户,并确保“信息”下的捆绑标识已设置为ITunes Connect中我的应用程序的捆绑标识 在

好的,我在Swift工作,我需要帮助。我已经学习了4个不同的教程,介绍了如何在sprite kit中使用快速复制的代码一字不差地实现应用内购买,但没有任何东西适合我

以下是我采取的步骤:

进入Itunes Connect并在我的应用记录下创建了应用内购买。我的应用内购买的产品Id是GameOverSaveSavior

在Xcode中,我已将我的应用程序的应用程序内购买功能打开,确保我的团队已设置为我的帐户,并确保“信息”下的捆绑标识已设置为ITunes Connect中我的应用程序的捆绑标识

在编写任何代码之前,我已经在GameSecene.swift文件中导入了StoreKit

至于代码,这是我所做的:

1在GameSecene.swift中,在didMoveToView func的末尾,我有:

// Set IAPS
        if(SKPaymentQueue.canMakePayments()) {
            println("IAP is enabled, loading")
            var productID:NSSet = NSSet(objects: "GameOverSaveSavior")
            var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
            request.delegate = self
            request.start()
        } else {
            println("please enable IAPS")
        }
这会在应用程序运行时将产品请求输出到控制台

3在GameSecene.swift中,在我的touchesBegind func中,当按下右键时,我有以下内容:

//In app purchase
            if touchedNode == saveMeBtn {

                println("button touched!")
                for product in list {
                    var prodID = product.productIdentifier
                    if(prodID == "GameOverSaveSavior") {
                        p = product
                        buyProduct()  //This is one of the functions we added earlier
                        break;
                    }
                }
这个按钮按下了!当按下按钮时

我不知道我做错了什么。代码编译时没有错误,但当按下我的按钮时,什么也没有发生。没有提示要求用户登录或购买任何东西-无。 我主要关注这个问题:


在编写代码之前,我还应该做些什么?我的代码中缺少什么吗?

我想我可以帮助您:

我以前有过你的问题。还有一个类似的问题,我在这里解决了:

以下是我找到的解决方案:

删除

SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
无论你身在何处,只要把它放在一个地方,每次你的应用启动时都会执行一次。我把它放在viewDidLoad中

这将检查所有未完成的事务,并在应用程序加载后终止它们,从而在用户触发IAP之前删除任何可能的错误

如果这个答案对你有帮助,别忘了投票

另外,这不是我的问题,但请确保完成每个PurchaseState的事务,如下所示:

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("Keep on")
                    keepOn()
                default:
                    print("IAP not setup")
                }
                queue.finishTransaction(trans)
                break
            case .Failed:
                print ("Buy error")
                queue.finishTransaction(trans)
                break
            default:
                print("default: Error")
                break
            }
        }
    }
永远不要忘记这一点:

 queue.finishTransaction(trans)

并单独说明。恢复

@Aidan Kaiser你似乎对IAPs这个话题非常了解,我也试着按照你的其他答案来回答。你知道我做错了什么吗?任何帮助都是非常感激的。添加的产品怎么样?您看到日志行了吗?您确定要从商店购买产品吗?@giorasch否,添加的产品未打印到控制台,因此我一定不会从商店购买产品。我怎样才能解决这个问题?这是iTunes连接问题吗?您确定使用的是iAP的产品id而不是其参考名称吗?产品id和参考名称相同,但我使用的是产品id
 queue.finishTransaction(trans)