【问题标题】:Xcode 12 In App Purchase Implementation - SKProductsRequestDelegate does not get calledXcode 12 In App Purchase Implementation - SKProductsRequestDelegate 没有被调用
【发布时间】:2020-11-02 17:19:54
【问题描述】:

我正在尝试了解使用 Xcode 12 和 SwiftUI 实现 IAP。我使用 App Store Connect 准备了所有内容并注册了产品 ID。

我正在使用适应 SKProductsRequestDelegate 协议的 StoreManager 类来获取指定产品 id 的对应 SKProduct。

但是,即使我使用物理设备,func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) 也不会被调用。实际上,控制台什么也没打印。

我不明白为什么这个函数永远不会被调用。

class StoreManager: NSObject, SKProductsRequestDelegate {

override init() {
    super.init()
    getProducts()
}

func getProducts() {
    let productID = "com.dev8882.MyDungeon.IAP.PowerSword"
    let request = SKProductsRequest(productIdentifiers: Set([productID]))
    request.delegate = self
    request.start()
}

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    print("Did receive response")
}

}

【问题讨论】:

    标签: swift xcode in-app-purchase


    【解决方案1】:

    我的代码有点不同。大约 3 年了,所以我无法详细解释 为什么 这行得通,但基本上我将我的产品 ID 创建为 NSSet,然后将其强制转换为SetStrings

    let productID = NSSet(objects: "com.dev8882.MyDungeon.IAP.PowerSword")
    let request = SKProductsRequest(productIdentifiers: productID as! Set<String>)
    

    【讨论】:

      【解决方案2】:

      我不确定为什么这解决了我的问题:

      根据 Apple 文档,应该使用强参考 SKProductsRequest 来启动请求。所以我像这样更新了我的代码:

      类 StoreManager: NSObject, SKProductsRequestDelegate {

      var request: SKProductsRequest!
      
      override init() {
          super.init()
          request = SKProductsRequest()
          self.getProducts()
      }
      
      func getProducts() {
          print("OK")
          let productID = "com.dev8882.MyDungeon.IAP.PowerSword"
          let request = SKProductsRequest(productIdentifiers: Set([productID]))
          request.delegate = self
          request.start()
      }
      
      func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
          print("Did receive response")
      }
      

      }

      现在可以正常使用了。

      【讨论】:

        猜你喜欢
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2013-08-18
        相关资源
        最近更新 更多