Ios 不返回swift中应用内购买的结果

Ios 不返回swift中应用内购买的结果,ios,xcode,swift,in-app-purchase,Ios,Xcode,Swift,In App Purchase,大家好, 上周我在应用程序内购买时遇到问题,无法解决,以前从未得到过( 当前我使用swift和xcode 6.1) 我的问题是:(在sanbox模式下测试,但仍然没有上传appstore的任何版本) 首次购买未返回状态。已购买(成功 购买)(但当第二次击中时返回。恢复(已恢复) (已购买) 多次退货失败(无法连接iTunes) 存储但仍购买-->可能是sabox模式?) 这是我的代码: func fetchAvailableProducts() { let productID:NS

大家好,

上周我在应用程序内购买时遇到问题,无法解决,以前从未得到过( 当前我使用swift和xcode 6.1)

我的问题是:(在sanbox模式下测试,但仍然没有上传appstore的任何版本)

  • 首次购买未返回状态。已购买(成功 购买)(但当第二次击中时返回。恢复(已恢复) (已购买)
  • 多次退货失败(无法连接iTunes) 存储但仍购买-->可能是sabox模式?)
这是我的代码:

func fetchAvailableProducts() {

    let productID:NSSet = NSSet(object: self.produto_value);

    let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID);

    productsRequest.delegate = self;

    productsRequest.start();

}

func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {

    var count : Int = response.products.count

    if (count>0) {

        var validProducts = response.products

         validProduct = response.products[0] as SKProduct

        if (validProduct.productIdentifier == self.produto_value) {

            println(validProduct.localizedTitle)

            println(validProduct.localizedDescription)

            println(validProduct.price)

            purchaseMyProduct()

        } else {

            println(validProduct.productIdentifier)

        }

    } else {

        println("nothing")

    }

}



func canMakePurchases() -> Bool

{

    return SKPaymentQueue.canMakePayments()

}



func purchaseMyProduct() {

    if (self.canMakePurchases() && validProduct != nil) {

        println("Purchases are allowed ...")

        var payment: SKPayment = SKPayment(product: validProduct)

        var defaultQueue: SKPaymentQueue  = SKPaymentQueue ()

        defaultQueue.addTransactionObserver(self)

        defaultQueue.addPayment(payment)

    } else {



var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)

        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

        self.presentViewController(alert, animated: true, completion: nil)

        blackScreenTopConstraint.constant = 3000

    }

}


func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)    {

    for transaction:AnyObject in transactions {

        if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{

            switch trans.transactionState {

            case .Restored:

                SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)

                isPro = true

                blackScreenTopConstraint.constant = 3000

                updateMyLayout()

                break;

            case .Purchased:

                SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)

                isPro = true

                blackScreenTopConstraint.constant = 3000

                updateMyLayout()

                break;

            case .Deferred:

var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)



                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

                self.presentViewController(alert, animated: true, completion: nil)

                blackScreenTopConstraint.constant = 3000 

               break

            case .Failed:

var alert = UIAlertController(title: "MyApp", message:stringLocate.getString("PURCHASE_FAILED"), preferredStyle: UIAlertControllerStyle.Alert)



                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

                self.presentViewController(alert, animated: true, completion: nil)

                blackScreenTopConstraint.constant = 3000

                break;

            default:

                break;

            }

        }

    }



}
有人有问题吗,帮我解决,
非常感谢

有人收到我的发行版吗,我在appstore上有发行版,但它仍然存在,当用户点击“购买”时,显示什么也没有,但当再次点击时,它返回购买P>恢复IAPP购买考虑这些要点。 1.非耗材必须实现恢复功能。 2.您需要为SKPaymentQueue添加委托函数

 func paymentQueueRestoreCompletedTransactionsFinished(queue:SKPaymentQueue!)
{

    for transaction:AnyObject in queue.transactions
    {
        let trans : SKPaymentTransaction = transaction as SKPaymentTransaction
        var identifier : NSString = trans.payment.productIdentifier
//            println(identifier)
}

您是否在模拟器中进行测试…??感谢Anil,我正在真实设备上进行测试。当您在应用程序中尝试第一条消息“无法连接到Applestore或itunes”时,这是沙盒模式的常见问题。如果您重试,则会出现“无法连接到itunes”的成功消息和并行消息“。我也这么认为,但我的问题集中在它不是返回成功状态,而是仍然成功,因为第二次点击购买它返回“恢复”状态意味着已经购买。你的英语对我来说太好了。我听不懂你在说什么。如果您购买了应用程序内的内容,则应将其还原,而不是再次购买。一旦你买了任何东西,你应该解锁或做任何想做的事。我用MKStoreKit解决问题,也许是因为我用swift,不知道,谢谢你的anwser Omer。这不是swift的问题。我正在为inApps使用Swift。不管怎样,你解决了这件事对你有好处。