【发布时间】:2018-02-03 13:39:16
【问题描述】:
我正在制作一个带有一些 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,有人知道这意味着什么吗?
请帮我解决这个问题。
不要犹豫,向我询问更多信息。
【问题讨论】:
-
这是使用 Swift 3,但没有太大变化。 code.tutsplus.com/tutorials/… 它会引导您完成从创建沙盒帐户到通过购买和恢复购买来寻找产品的所有过程。一个问题 -
productIds是类型Set<String>... 你为此提供了什么。您不需要给出具体的值,但至少需要给出“格式”。好的,第二个问题。 :-) 你能提供你的代码吗? -
我邀请您阅读我编辑的问题以及我的代码示例。
-
在这里评论而不是我的回答。 :-) 你正在做一些我还没有做的事情——多个 IAP。也许只尝试一个 - 如果找到它,您就知道问题与您如何处理倍数有关。另一件事是我没有看到类似于我的
fetchAvailableProducts的电话。您在原始代码中有它。也许您在编辑时不小心遗漏了它? -
是的,对不起,我刚刚在上面添加了这个功能。我也尝试只设置一个产品 ID,但它仍然不起作用.. 该值始终返回为零。我会再次检查问题是否来自代码或我的 iTunes Connect 配置,即使我不相信。
-
还有一件事 - 我在第一条评论的链接中对此进行了解释,但也许你没有这样做。如果 IAP 尚未获得批准,您需要在 iTuneConnect 沙箱中工作。您也可能不想想使用您的 Apple ID,而是创建一个沙盒帐户(或多个用于不同地区和货币的测试)。然后从设备(我不知道这是否适用于模拟器)使用 that 帐户登录到应用商店。希望对你有用。
标签: swift in-app-purchase skproduct