da1*_*bi3 1 delegates asynchronous in-app-purchase ios swift
我想SKProduct在显示实际页面之前加载。但是我在创建它时遇到了一些困难。
我当时想制作另一个加载产品的类,如下所示:
class GetIapInfo: NSObject, SKProductsRequestDelegate {
var list = [SKProduct]()
var p = SKProduct()
let audio = "com.xxx";
let video = "com.xxx"
let complete = "com.xxx"
override init() {
super.init()
if SKPaymentQueue.canMakePayments() {
print("starting IAPS")
let productIdentifiers = Set([audio, vídeo, complete])
let request = SKProductsRequest(productIdentifiers: productIdentifiers)
request.delegate = self
request.start()
} else {
print("please enable IAPS")
}
}
internal func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("product request")
let myProduct = response.products
for product in myProduct {
print("product added from ding")
print(product.productIdentifier)
print(product.localizedTitle)
print(product.localizedDescription)
print(product.price)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这仅调用init方法,仅此而已,没有调用productsRequest方法。与代表有关吗?
我该如何保存将以这种方法返回的产品?因为我以后需要它们。
您可能应该保留对在中SKProductsRequest创建的对象的引用GetIapInfo.init()。您当前的代码将解除分配的request对象的瞬间init方法存在后,。这可能解释了为什么根本没有呼叫您的代表;)
确保对请求对象有严格的引用;否则,系统可能会在请求完成之前取消分配该请求。
例如,为其创建一个存储属性:
private let request: SKProductsRequest!
Run Code Online (Sandbox Code Playgroud)
也可以通过实现此委托方法来跟踪任何与请求相关的错误,这也是一个好主意:
func request(_ request: SKRequest, didFailWithError error: Error) {
print("Request failed: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |