2015-08-09 3 views
6

Возможно ли реализовать покупку в приложении в пределах SKScene? Если да, то как? Я пытаюсь использовать SKSpriteNode в качестве кнопки «купить» без везения. Я не уверен, должен ли код идти в SKScene или контроллере вида. Я просмотрел множество учебников, но все они, похоже, нацелены на приложения с одним представлением, а не на SpriteKit.в покупке приложения в SKScene

ответ

3

Во-первых, сделать это в игровой сцены линии и убедитесь, что у вас есть рамки «StoreKit» импортирован

class GameScene: SKScene, SKPaymentTransactionObserver, SKProductsRequestDelegate { 

Далее, ваш будет хотеть поместить эти строки в didmovetoview. Имейте в виду, что после «объектов:» Строкой, которую вы ставите, должен быть идентификатор покупки приложения, который вы настраиваете с помощью подключения iTunes.

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

Вне зависимости от других функций, но все еще в пределах сцены игры, вставить эти функции и переменные

//In App Purchases 
var list = [SKProduct]() 
var p = SKProduct() 

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

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) 
    } 
} 

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 "IAP id here": 

      //Right here is where you should put the function that you want to execute when your in app purchase is complete 
     default: 
      println("IAP not setup") 
     } 

    } 

    var alert = UIAlertView(title: "Thank You", message: "Your purchase(s) were restored. You may have to restart the app before banner ads are removed.", delegate: nil, cancelButtonTitle: "OK") 
    alert.show() 
} 


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, .Restored: 
      println("buy, ok unlock iap here") 
      println(p.productIdentifier) 

      let prodID = p.productIdentifier as String 
      switch prodID { 
      case "IAP id here": 

       //Here you should put the function you want to execute when the purchase is complete 
       var alert = UIAlertView(title: "Thank You", message: "You may have to restart the app before the banner ads are removed.", delegate: nil, cancelButtonTitle: "OK") 
       alert.show() 
      default: 
       println("IAP not setup") 
      } 

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

     } 
    } 
} 

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

Далее вы должны назвать узел, нужно сделать ИАП

whateverYourNodeIs.name = "inAppPurchaseNode" 

И наконец, сделать это в контактахBegan

let touch = touches.first as? UITouch 
    let positionInScene = touch!.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(positionInScene) 

if let name = touchedNode.name { 
     if name == "inAppPurchaseNode" { 

       for product in list { 
        var prodID = product.productIdentifier 
        if(prodID == "iAp id here") { 
         p = product 
         buyProduct() //This is one of the functions we added earlier 
         break; 
        } 
       } 
      } 

    } 

Вы также захотите, чтобы это в ваших прикосновениях начало восстанавливать покупки с использованием другого узла.

if let name = touchedNode.name { 
     if name == "restore" { 

      SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
      SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
      } 
     } 
+0

Где бы я поставил строку «IAP ID здесь» Я имею в виду, что вы должны использовать в App Purchase ид вы сделали в Itunes подключить –

+0

Thankyou так много для вашей помощи, я посмотрел везде в ответ, как это !! :) :) – JGrn84

+0

Добро пожаловать. Кроме того, я заметил, что оставил некоторые коды UIAlertView в коде из игры, которую я сделал некоторое время назад. Вы можете удалить их или просто изменить текст, если хотите. –

 Смежные вопросы

  • Нет связанных вопросов^_^