swift SKProduct 的应用内购买问题

swift In App Purchase issue with SKProduct

我正在制作一个带有一些 IAP 的应用程序,但我遇到了一个无聊的问题,这让我感到精神错乱.. 我测试了我的 IAP,但没有用。 (什么都没发生)我检查出了什么问题,发现问题出在 SKProduct。 因此,我尝试请求带有 SKProductsRequest(productIdentifiers: productIds) 的产品,然后如果我打印:response.products.count,结果将是 0。 (response:SKProductsResponse)

这是我请求产品的代码:

class IAPHandler: NSObject {
static let shared = IAPHandler()

fileprivate var productID = ""
public var productIdentifiers:NSSet = ["com.company.app.IAP1","com.company.app.IAP2"]
public var iapProducts = [SKProduct]()
var productsRequest = SKProductsRequest()

var purchaseStatusBlock: ((IAPHandlerAlertType) -> Void)?


func canMakePurchases() -> Bool {  return SKPaymentQueue.canMakePayments()  }

func purchaseMyProduct(index: Int){

    print(iapProducts.count)

    if iapProducts.count == 0 { return } .    //// return 0 !

    if self.canMakePurchases() { .   //// return true

        let product = iapProducts[index]
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(self)
        SKPaymentQueue.default().add(payment)


        productID = product.productIdentifier
    } else {

        purchaseStatusBlock?(.disabled)
    }
}  

 func fetchAvailableProducts(){

    productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)

    productsRequest.delegate = self
    productsRequest.start()
  }
} 

但是response.product 没有捕捉到任何值..

有人知道我的结果等于 0 是什么意思吗? 请帮我弄清楚这个问题。 不要犹豫,问我更多信息。

这是我使用的代码:

public var productIdentifiers:NSSet = "com.company.app.inapp1"
public var iapProducts = [SKProduct]()
var productsRequest = SKProductsRequest()

func fetchAvailableProducts()  {
    let productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
    productsRequest.delegate = self
    productsRequest.start()
}

public func productsRequest (_ request:SKProductsRequest, didReceive response:SKProductsResponse) {
    if (response.products.count > 0) {
        iapProducts = response.products
    }
}

最后,iapProducts 是可用产品的数组。

我发现您发布的代码与此代码有两处不同。

  • 我记得在创建一个 Swift Set<String> 时遇到了挫折,发现如果您首先设置一个包含您的产品的 NSSet 然后将其装入,它就可以工作。
  • 即使在那之后,我的成绩也是零 return。原来我使用的是我创建的 "SKU",认为它应该可以工作。我需要让 StoreKit 产品 ID 成为我在 iTuneConnect 中设置的产品 ID - 通常是 "com.company.app.iapname".

好的,答案很简单。有人告诉我设置 "agreements, tax and banking" Itunes 连接信息... 现在它就像一个魅力!