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 连接信息...
现在它就像一个魅力!
我正在制作一个带有一些 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 连接信息... 现在它就像一个魅力!