2017-01-18 6 views
1

iPhoneゲームを作っています。私はゲームのお金の決済のためのSwift In-App Billingチュートリアルに従っています。私はすべてのSwiftコーディングとビルドを終え、画面上のボタンを押すが、ポップアップはポップアップしない。私のコードに何が間違っているか教えてください。アプリの購入でスウィフトが動作しない

import UIKit 
import AVFoundation 
import StoreKit 

class ViewController: UIViewController,UIScrollViewDelegate,SKProductsRequestDelegate, SKPaymentTransactionObserver { 



@IBOutlet var outAddCoins: UIButton! 


@IBAction func btnAddCoins(_ sender: Any) { 
    for product in list { 
     let prodID = product.productIdentifier 
     if(prodID == "Add500000Credit") { 
      p = product 
      buyProduct() 
     } 
    } 
} 


func buyProduct() { 
    print("buy " + p.productIdentifier) 
    let pay = SKPayment(product: p) 
    SKPaymentQueue.default().add(self) 
    SKPaymentQueue.default().add(pay as SKPayment) 
} 


func addCoins() { 
    playerMoney += 500000 
    MoneyLabel.text = "\(playerMoney)" 
} 

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






func productsRequest(_ request: SKProductsRequest, didReceive 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) 
    } 

    outAddCoins.isEnabled = true 
} 




func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { 
    print("transactions restored") 
    for transaction in queue.transactions { 
     let t: SKPaymentTransaction = transaction 
     let prodID = t.payment.productIdentifier as String 

     switch prodID { 

      case "Add500000Credit": 
       print("add coins to account") 
       addCoins() 
      default: 
       print("IAP not found") 
     } 
    } 
} 






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("buy ok, unlock IAP HERE") 
      print(p.productIdentifier) 

      let prodID = p.productIdentifier 
      switch prodID { 

       case "Add500000Credit": 
        print("add coins to account") 
        addCoins() 
       default: 
        print("IAP not found") 
      } 
      queue.finishTransaction(trans) 
     case .failed: 
      print("buy error") 
      queue.finishTransaction(trans) 
      break 
     default: 
      print("Default") 
      break 
     } 
    } 
} 

、これは私がXcodeの最新版を使用しています

override func viewDidLoad() { 
    super.viewDidLoad() 



    outAddCoins.isEnabled = false 







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

のviewDidLoad一部です。 iTunes Connectでアプリ内購入のすべての設定を完了しましたが、購入後に購入ポップアップがポップアップしません。私はあなたの助けに感謝します。

buy Add500000Credit 
add payment 
nil 
Default 
add payment 
Optional(Error Domain=SKErrorDomain Code=0 "can not connect to the iTunes Store" UserInfo={NSLocalizedDescription=can not connect to the iTunes Store}) 
buy error 

答えて

4

テストアプリ内購入はトリッキーです:

  • あなたがテストのためのサンドボックスアカウントを作成していることを確認してください。

  • シミュレータではなくデバイスでテストします。シミュレータでテストすることはできません。

  • テストする前に、iCloudからデバイスからログアウトしてください。そうしないと、サンドボックスアカウントを使用できなくなります。

+0

私はあなたのコメントでそれを解決しました。 私の問題はコードエラーではなく、基本的な問題でした。 さらに、私はApp Storeからもログアウトする必要があると思います。 ありがとうございます。 – DingPho

関連する問題