Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
View 我的IAP不是';不起作用。func Paymentqueue中的错误_View_In App Purchase - Fatal编程技术网

View 我的IAP不是';不起作用。func Paymentqueue中的错误

View 我的IAP不是';不起作用。func Paymentqueue中的错误,view,in-app-purchase,View,In App Purchase,当我点击我的任何一个IAP时,会出现一条消息,说IAP已经购买(事实并非如此),并将免费恢复,然后什么都不会发生,IAP不会执行 以下是我在控制台中得到的信息: No Value. IAP is enabled, loading... true Product Request Product Added IAP id Remove Ads Removes ads from the app. 2 Buy: IAP id Add Payment nil default: Error 这是我的密码

当我点击我的任何一个IAP时,会出现一条消息,说IAP已经购买(事实并非如此),并将免费恢复,然后什么都不会发生,IAP不会执行

以下是我在控制台中得到的信息:

No Value.
IAP is enabled, loading...

true
Product Request
Product Added
IAP id
Remove Ads
Removes ads from the app.
2
Buy: IAP id
Add Payment
nil
default: Error
这是我的密码:

游戏控制器,斯威夫特

import UIKit
import StoreKit


class GameViewController: UIViewController, ADBannerViewDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver, GKGameCenterControllerDelegate,GADBannerViewDelegate{


    @IBOutlet var outRemoveAds: UIButton!
    @IBOutlet var outRestorePurchases: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if NSUserDefaults.standardUserDefaults().objectForKey("val") != nil {
            print("Has a value.")
            banner.removeFromSuperview()
            bannerGoogle.removeFromSuperview()
            outRemoveAds.removeFromSuperview()
            outRestorePurchases.removeFromSuperview()
            removeInterFrom = 1
        }
        else {
            print("No Value.")
        }

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

        }

    }


    //IAP Ads

    @IBAction func removeAds(sender: UIButton) {
        for product in list{
            let prodID = product.productIdentifier
            if (prodID == "IAP id"){
                p = product
                buyProduct()
                break
            }
        }
    }
    @IBAction func restorePurchases(sender: UIButton) {
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
    }


    //IAP Functions

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

    func removeAds(){
        banner.removeFromSuperview()
        bannerGoogle.removeFromSuperview()
        outRemoveAds.removeFromSuperview()
        outRestorePurchases.removeFromSuperview()
        let theValue = 10
        NSUserDefaults.standardUserDefaults().setObject(theValue, forKey: "val")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    func buyProduct(){
        print("Buy: "+p.productIdentifier)
        let pay = SKPayment (product: p)
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
    }

    func productsRequest(request: SKProductsRequest, didReceiveResponse 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 as SKProduct)
        }
    }

    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("Remove Ads")
                    removeAds()
                default:
                    print("IAP not setup")
                }
                queue.finishTransaction(trans)
                break
            case .Failed:
                print ("Buy error")
                queue.finishTransaction(trans)
                break
            default:
                print("default: Error")
                break
            }
        }
    }

    func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
        print("Purchases Restored")

        _ = []
        for transaction in queue.transactions {
            let t: SKPaymentTransaction = transaction as SKPaymentTransaction

            let prodID = t.payment.productIdentifier as String
            switch prodID{
            case "IAP id":
                print("Remove Ads")
                removeAds()
            default:
                print("IAP not setup")
            }


        }
    }
    func finishTransaction(trans:SKPaymentTransaction){
        print("Finshed Transaction")
    }

    func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
        print("Remove Transaction")
    }
}
导入UIKit
进口存储套件
类GameViewController:UIViewController、ADBannerViewDelegate、SKProductsRequestDelegate、SKPaymentTransactionObserver、GKGameCenterController delegate、GadBanerViewDelegate{
@IBOutlet var outRemoveAds:UIButton!
@IBOutlet var outRestorePurchases:UIButton!
重写func viewDidLoad(){
super.viewDidLoad()
}
覆盖功能视图将出现(动画:Bool){
超级。视图将显示(动画)
如果NSUserDefaults.standardUserDefaults().objectForKey(“val”)!=nil{
打印(“有值”)
banner.removeFromSuperview()
BannerGogle.removeFromSuperview()
outRemoveAds.removeFromSuperview()
outRestorePurchases.removeFromSuperview()
removeInterFrom=1
}
否则{
打印(“无值”)
}
if(SKPaymentQueue.canMakePayments()){
打印(“IAP已启用,正在加载…”)
让productID:NSSet=NSSet(对象:“IAP id”)
let请求:SKProductsRequest=SKProductsRequest(产品标识符:productID as!Set)
request.delegate=self
request.start()
}
否则{
打印(“请启用IAPS”)
}
}
//IAP广告
@iAction func removeAds(发件人:UIButton){
对于列表中的产品{
让prodID=product.productIdentifier
如果(prodID==“IAP id”){
p=产品
购买产品()
打破
}
}
}
@iAction func restorePurchases(发件人:UIButton){
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
//IAP功能
变量列表=[SKProduct]()
var p=SKProduct()
func removeAds(){
banner.removeFromSuperview()
BannerGogle.removeFromSuperview()
outRemoveAds.removeFromSuperview()
outRestorePurchases.removeFromSuperview()
让这个值=10
NSUserDefaults.standardUserDefaults().setObject(值,forKey:“val”)
NSUserDefaults.standardUserDefaults().synchronize()
}
func buydroduct(){
打印(“购买:+p.productIdentifier)
let pay=SKPayment(产品:p)
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().addPayment(按SKPayment付款)
}
func productsRequest(请求:SKProductsRequest,DID接收方响应:SKProductsResponse){
打印(“产品请求”)
让myProduct=response.products
对于myProduct中的产品{
打印(“添加产品”)
打印(product.productIdentifier)
打印(产品本地化标题)
打印(产品本地化说明)
印刷品(产品价格)
列表.追加(产品作为SKProduct)
}
}
func paymentQueue(队列:SKPaymentQueue,updatedTransactions事务:[SKPaymentTransaction]){
打印(“添加付款”)
对于事务:事务中的任何对象{
let trans=事务处理为!SKPaymentTransaction
打印(传输错误)
开关trans.transactionState{
案例。购买:
打印(“IAP解锁”)
打印(p.productIdentifier)
将prodID=p.productIdentifier设为字符串
开关prodID{
案例“IAP id”:
打印(“删除广告”)
removeAds()
违约:
打印(“IAP未设置”)
}
queue.finishTransaction(trans)
打破
案例。失败:
打印(“购买错误”)
queue.finishTransaction(trans)
打破
违约:
打印(“默认:错误”)
打破
}
}
}
func paymentQueueRestoreCompletedTransactionsFinished(队列:SKPaymentQueue){
打印(“恢复购买”)
_ = []
对于queue.transactions中的事务{
设t:SKPaymentTransaction=作为SKPaymentTransaction的事务
将prodID=t.payment.productIdentifier设为字符串
开关prodID{
案例“IAP id”:
打印(“删除广告”)
removeAds()
违约:
打印(“IAP未设置”)
}
}
}
func finishTransaction(trans:SKPaymentTransaction){
打印(“已完成交易”)
}
func paymentQueue(队列:SKPaymentQueue,removedTransactions交易:[SKPaymentTransaction]){
打印(“删除交易”)
}
}
MenuViewController.swift

import UIKit
import StoreKit
import Social




class MenuViewController: UIViewController, SKProductsRequestDelegate,SKPaymentTransactionObserver {

    @IBOutlet var outRestart: UIButton!
    @IBOutlet var outBuy: UIButton!



    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)


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

        }

    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func buy(sender: UIButton) {
        for product in list{
            let prodID = product.productIdentifier
            if (prodID == "IAP id"){
                p = product
                buyProduct()
                break
            }
        }

    }

    //IAP Functions

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

    func keepOn(){
        buyornot = 1
        Back()
    }

    func buyProduct(){
        print("Buy: "+p.productIdentifier)
        let pay = SKPayment (product: p)
        SKPaymentQueue.defaultQueue().addTransactionObserver(self)
        SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
    }

    func productsRequest(request: SKProductsRequest, didReceiveResponse 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 as SKProduct)
        }
    }

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

    func finishTransaction(trans:SKPaymentTransaction){
        print("Finshed Transaction")
    }

    func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
        print("Remove Transaction")
    }
导入UIKit
进口存储套件
进口社会保险
类MenuViewController:UIViewController、SKProductsRequestDelegate、SKPaymentTransactionObserver{
@IBOutlet var outRestart:ui按钮!
@IBY:UIButton!
重写func viewDidLoad(){
super.viewDidLoad()
}
覆盖功能视图将出现(动画:Bool){
超级。视图将显示(动画)
if(SKPaymentQueue.canMakePayments()){
打印(“IAP已启用,正在加载…”)
让productID:NSSet=NSSet(对象:“IAP id”)
let请求:SKProductsRequest=SKProductsRequest(产品标识符:productID as!Set)
request.delegate=self
request.start()
}
否则{
打印(“请启用IAPS”)
}
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置任何资源
SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
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)