Ios 如何在Swift Spritekit中添加多个应用内购买?
我有这个应用内购买解锁2级,它可以工作,但我如何添加另一个应用内购买解锁3级?我是否必须创建新函数并添加level3的代码?我不知道怎么做。谢谢Ios 如何在Swift Spritekit中添加多个应用内购买?,ios,swift,in-app-purchase,Ios,Swift,In App Purchase,我有这个应用内购买解锁2级,它可以工作,但我如何添加另一个应用内购买解锁3级?我是否必须创建新函数并添加level3的代码?我不知道怎么做。谢谢 func unlockLevel() { if SKPaymentQueue.canMakePayments() { var productID:NSSet = NSSet(object: "unlockLevelTwo") var productsRequest:SKProductsRequest =
func unlockLevel() {
if SKPaymentQueue.canMakePayments() {
var productID:NSSet = NSSet(object: "unlockLevelTwo")
var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
productsRequest.delegate = self
productsRequest.start()
println("Fetching products...")
}
else {
println("Can't make purchases")
}
}
func buyProduct(product: SKProduct) {
println("Sending the Payment Request to Apple");
var payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
var count : Int = response.products.count
if (count>0) {
var validProducts = response.products
var validProduct: SKProduct = response.products[0] as! SKProduct
if (validProduct.productIdentifier == "unlockLevelTwo") {
println(validProduct.localizedTitle)
println(validProduct.localizedDescription)
println(validProduct.price)
buyProduct(validProduct);
}
else {
println(validProduct.productIdentifier)
}
}
else {
println("nothing")
}
}
func request(request: SKRequest!, didFailWithError error: NSError!) {
println("Error fetching product info")
}
func RestorePurchases() {
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue!) {
for item in queue.transactions {
if let transaction = item as? SKPaymentTransaction {
if transaction.transactionState == .Restored {
unlockLevel()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
break
}
}
}
if queue.transactions.count == 0 {
println("not restored")
displayRestoreAlert()
}
}
func displayRestoreAlert() {
let alertController = UIAlertController(title: "Level Two has not been purchased on this account.", message: nil, preferredStyle: .Alert)
let OKAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alertController.addAction(OKAction)
self.viewController.presentViewController(alertController, animated: true, completion: nil)
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
println("Received Payment Transaction Response from Apple");
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
println("Product Purchased");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
NSUserDefaults().setBool(true, forKey: "Leavel2")
unlockLevelTwo()
break;
case .Failed:
println("Purchased Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .Restored:
println("Already Purchased");
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
default:
break;
}
}
}
}
func解锁级别(){
如果SKPaymentQueue.canMakePayments(){
var productID:NSSet=NSSet(对象:“unlockLevelTwo”)
var PRODUCTSRESQUEST:SKPRODUCTSRESQUEST=SKPRODUCTSRESQUEST(产品标识符:设置的产品ID)
productsRequest.delegate=self
productsRequest.start()
println(“获取产品…”)
}
否则{
println(“无法购买”)
}
}
func buyProduct(产品:SKProduct){
println(“向苹果发送付款请求”);
var付款=SKPayment(产品:产品)
SKPaymentQueue.defaultQueue().addPayment(付款);
}
func productsRequest(请求:SKProductsRequest!,DID接收方响应:SKProductsResponse!){
变量计数:Int=response.products.count
如果(计数>0){
var validProducts=response.products
var validProduct:SKProduct=response.products[0]为!SKProduct
if(validProduct.productIdentifier==“unlockLevelTwo”){
println(validProduct.localizedTitle)
println(有效产品本地化描述)
println(有效产品价格)
购买产品(有效产品);
}
否则{
println(validProduct.productIdentifier)
}
}
否则{
println(“无”)
}
}
func请求(请求:SKRequest!,错误:NSError!){
println(“获取产品信息时出错”)
}
func restorepources(){
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(队列:SKPaymentQueue!){
对于queue.transactions中的项目{
如果let transaction=项目as?SKPaymentTransaction{
如果transaction.transactionState==.Restored{
解锁级别()
SKPaymentQueue.defaultQueue().finishTransaction(事务)
打破
}
}
}
如果queue.transactions.count==0{
println(“未恢复”)
displayRestoreAlert()
}
}
func displayRestoreAlert(){
让alertController=UIAlertController(标题:“未在此帐户上购买二级”。消息:nil,preferredStyle:.Alert)
让OKAction=UIAlertAction(标题:“确定”,样式:。默认,处理程序:nil)
alertController.addAction(OKAction)
self.viewController.presentViewController(alertController,动画:true,完成:nil)
}
func paymentQueue(队列:SKPaymentQueue!,更新的交易:[AnyObject]!){
println(“收到苹果公司的付款交易响应”);
对于事务:事务中的任何对象{
如果让交易:SKPaymentTransaction=交易为?SKPaymentTransaction{
开关trans.transactionState{
案例。购买:
println(“购买的产品”);
SKPaymentQueue.defaultQueue().finishTransaction(事务为!SKPaymentTransaction)
NSUserDefaults().setBool(true,forKey:“level2”)
解锁leveltwo()
打破
案例。失败:
println(“购买失败”);
SKPaymentQueue.defaultQueue().finishTransaction(事务为!SKPaymentTransaction)
打破
案件.恢复:
println(“已购买”);
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
违约:
打破
}
}
}
}
这个问题相当广泛。从概念上讲,每个关卡都是一个“产品”。您需要注册多个产品,然后在游戏逻辑中检查哪些产品已经购买。这在编程指南中有介绍-具体地看一下有关检索产品信息和交付产品的章节。还可以看看StoreKit(不是SpriteKit)API参考(URL太长)。我已经为它制作了第二个产品。我只是不知道是否要再次复制代码,或者我可以在op中使用相同的代码并将3级代码放入其中。我发布的代码是解锁2级代码,它可以工作。如何使用相同的代码解锁级别3?我将使用另一种叫做unlockLevelThree的产品。有可能吗?有人能帮我吗?如果你不明白我说什么或需要更多的代码,让我知道。感谢您在支付队列
函数中循环处理交易
。每个交易对象都有一个payment
属性,该属性为您提供SKPayment
。这又具有productIdentifier
属性,该属性来自您的SKProduct
。这是你的“unlockLevelWhatever”字符串。您可以使用它来决定在您购买的案例中永久存储哪些商店。注意:存储在UserPrefs中是不安全的(用户可以在不执行购买的情况下对此进行更改)。在某些地方,您还将“Level”拼写为“Level”,如果您的拼写不一致,可能会导致错误。这个答案对你有用吗?这个问题相当广泛。从概念上讲,每个关卡都是一个“产品”。您需要注册多个产品,然后在游戏逻辑中检查哪些产品已经购买。这在编程指南中有介绍-具体地看一下有关检索产品信息和交付产品的章节。还可以看看StoreKit(不是SpriteKit)API参考(URL太长)。我已经为它制作了第二个产品。我只是不知道是否要再次复制代码,或者我可以在op中使用相同的代码并将3级代码放入其中。我发布的代码是解锁2级代码,它可以工作。如何使用相同的代码解锁级别3?我将使用另一种叫做unlockLevelThree的产品。有可能吗?可以吗