ios - 应用内购买 : list of product identifiers is always empty

标签 ios swift in-app-purchase

我正在尝试为我的应用程序创建一个商店页面,以便用户可以购买硬币或其他任何东西,但是当我尝试获取项目列表时,它似乎没有显示。它打印“产品请求”但不打印该项目。这些项目出现在 itunes 连接页面中,我使用了相同的 ID,所以我很确定我的代码有问题。

   class storeController : UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

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



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

        override func viewDidLoad() {

            if(SKPaymentQueue.canMakePayments()) {
                print("IAP is enabled, loading...")
                var productID : NSSet = NSSet(object: "myapp.iap.500coins")
                var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
                request.delegate = self
                request.start()
            } else {
                print("please enable IAPs")
            }

        }

        func requestDidFinish(request: SKRequest) {

        }

        func request(request: SKRequest, didFailWithError error: NSError) {

        }

        func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])    {
            print("add payment")

            for transactions:AnyObject in transactions {
                var trans = transactions as! SKPaymentTransaction
                print(trans.error)

                switch trans.transactionState {

                case .Purchased:
                    print("unlock iap here")
                    print(p.productIdentifier)

                    let prodID = p.productIdentifier as String
                    switch prodID {
                    case "myapp.iap.500coins" :
                        print("give coins")
                    default:
                        print("didnt go through")
                    }
                    queue.finishTransaction(trans)
                    break;
                case .Failed:
                    print("error")
                    queue.finishTransaction(trans)
                    break;
                default:
                    print("default")
                }
            }
            }

        func finishTransaction(trans:SKPaymentTransaction) {
            print("finished trans")
        }

        func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
            print("remove trans")
        }

        func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
            print("Product Request")
            let myProduct = response.products

            for product in myProduct {
                print("product found")
                print(product.productIdentifier)
                print(product.localizedTitle)
                print(product.localizedDescription)
                list.append(product)
            }
        }
    }

最佳答案

您的代码看起来不错。但是我怀疑您的产品标识符有问题。

SKProductsResponse 包含一系列未被 Apple App Store 识别的产品标识符。当一切顺利时,这个列表是空的。检查该列表以查看您的产品是否存在问题:

func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {                   
    if !response.invalidProductIdentifiers.isEmpty {
        print("invalid:" + response.invalidProductIdentifiers)
    }

    print("Product Request")
    let myProduct = response.products
    ...
}

这不会解决您的问题,但至少您会知道为什么您的回复中没有产品。

关于ios - 应用内购买 : list of product identifiers is always empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33845350/

相关文章:

ios - 为什么同一个应用程序在不同设备上的大小不同

ios - UINavigationBar 在 iOS7 和 iOS8 中的外观不同

ios - 通知 iOs 推送已交付?

ios - 沙盒应用程序内购买恢复以前登录的 Apple 帐户的购买

ios - 选择器 View 快速出错

ios - 对 CoreData 中的 1 个条目使用 Fetched Results Controller

arrays - 如何在 Swift 中将一组自定义对象一次性保存到核心数据存储中

android - 如何测试订阅的Google Play实时通知?

android - 在 SharedPreferences 中存储 Android 应用内购买

ios - Swift - 桥接头失败。 '*' 没有名为 '*' 的成员