Swift Sprite Kit 应用内购买 [英] Swift Sprite Kit In App Purchase

查看:26
本文介绍了Swift Sprite Kit 应用内购买的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 SKScene 中有一个按钮(使用 Swift)——添加拼图"当用户点击这个按钮时,我想转到一个 UIView 控制器或 UI 场景,以便我可以实现应用内购买代码......(SkScenes 是 UIViews 的子集,无法运行代码......)

I have a button in an SKScene (using Swift) -- "Add Puzzles" When the user clicks this button, I want to go to a UIView Controller or UI Scene so that I can implement In App Purchase code... (SkScenes are subsets of UIViews and cannot run the code...)

有没有人有一个基本的想法如何做到这一点...

Does anyone have a basic idea how to do this...

我在这方面有点经验不足...我使用过 cocos2d 和现在的 Sprite Kit,并且总是手动设置所有内容,并且对 .xib 文件和视图控制器的经验很少...

I am a little inexperienced at this... I have used cocos2d and now Sprite Kit and have always set everything up manually and have very little experience with .xib files and view Controllers...

有谁知道如何做到这一点的基本思想?感谢您的帮助!

Does anyone know the basic idea of how to do this? Thanks for any help!

安迪

推荐答案

您可以在 SKScene 内设置 In-App-Purchases,您可能需要调整一些代码但它会起作用.举个例子

You can set-up In-App-Purchases inside of an SKScene, You may need to tweak some code but it will work. Here's an example

import Spritekit
import Storekit


class Store:SKScene, SKProductsRequestDelegate, SKPaymentTransactionObserver { 

override func didMoveToView {

    // Set IAPS
    if(SKPaymentQueue.canMakePayments()) {
        println("IAP is enabled, loading")
        var productID:NSSet = NSSet(objects: "bundle id", "bundle id")
        var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID)
        request.delegate = self
        request.start()
    } else {
        println("please enable IAPS")
    }

}

// 2
func btnRemoveAds() {
    for product in list {
        var prodID = product.productIdentifier
        if(prodID == "bundle id") {
            p = product
            buyProduct()
            break;
        }
    }

}

// 3
func btnAddCoins() {
    for product in list {
        var prodID = product.productIdentifier
        if(prodID == "bundle id") {
            p = product
            buyProduct()
            break;
        }
    }
}


// 4
func removeAds() {
    println("ads removed")
}

// 5
func addCoins() {
    println("added 50 coins")
}

// 6
func RestorePurchases() {
    SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}

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

// 2
func buyProduct() {
    println("buy " + p.productIdentifier)
    var pay = SKPayment(product: p)
    SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
}

//3
func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
    println("product request")
    var myProduct = response.products

    for product in myProduct {
        println("product added")
        println(product.productIdentifier)
        println(product.localizedTitle)
        println(product.localizedDescription)
        println(product.price)

        list.append(product as SKProduct)
    }
}

// 4
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue!) {
    println("transactions restored")

    var purchasedItemIDS = []
    for transaction in queue.transactions {
        var t: SKPaymentTransaction = transaction as SKPaymentTransaction

        let prodID = t.payment.productIdentifier as String

        switch prodID {
        case "bundle id":
            println("remove ads")
            removeAds()
        case "bundleid":
            println("add coins to account")
            addCoins()
        default:
            println("IAP not setup")
        }

    }
}

// 5
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
    println("add paymnet")

    for transaction:AnyObject in transactions {
        var trans = transaction as SKPaymentTransaction
        println(trans.error)

        switch trans.transactionState {

        case .Purchased:
            println("buy, ok unlock iap here")
            println(p.productIdentifier)

            let prodID = p.productIdentifier as String
            switch prodID {
                case "bundle id":
                    println("remove ads")
                    removeAds()
                case "bundle id":
                    println("add coins to account")
                    addCoins()
                default:
                    println("IAP not setup")
            }

            queue.finishTransaction(trans)
            break;
        case .Failed:
            println("buy error")
            queue.finishTransaction(trans)
            break;
        default:
            println("default")
            break;

        }
    }
}

// 6
func finishTransaction(trans:SKPaymentTransaction)
{
    println("finish trans")
}

//7
func paymentQueue(queue: SKPaymentQueue!, removedTransactions transactions: [AnyObject]!)
{
    println("remove trans");
}

当您想进行购买时,您可以调用 removeAdsButton() 或其他方法.

You would call the removeAdsButton() or whatever when you want to make a purchase.

这篇关于Swift Sprite Kit 应用内购买的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆