返回

在 iOS 应用中畅通无阻地获取内购产品:常见问题解答与完整指南

IOS

在 iOS 应用中顺利获取内购产品:全方位指南

问题

尽管在 Xcode 环境中可以顺利购买内购产品,但在 TestFlight 构建中却无法获取这些产品。这给开发者带来了困惑,阻碍了应用内购买功能的正常运行。

解决方案步骤

要解决此问题,请遵循以下步骤:

  1. 确保产品状态为“审核通过” :检查 App Store Connect 中的产品状态,确认其已通过审核。只有处于审核通过状态的产品才可被用户购买。

  2. 检查产品 ID :比对代码中使用的产品 ID 与 App Store Connect 中配置的 ID 是否一致。任何不匹配都会导致无法获取产品。

  3. 使用正确的代码片段 :更新获取产品的代码片段,以确保它与 Apple 最新 StoreKit2 框架相符。这里提供了一个示例代码片段:

func fetchProducts(productIds: [String]) async throws -> [Product] {
    let request = SKProductsRequest(productIdentifiers: Set(productIds))
    request.delegate = self
    request.start()
    
    return try await withCheckedThrowingContinuation { continuation in
        self.productRequestCompletionHandler = { success, products, error in
            if success {
                continuation.resume(returning: products ?? [])
            } else {
                continuation.resume(throwing: error ?? NSError(domain: "com.example.myapp", code: 1, userInfo: nil))
            }
        }
    }
}
  1. 设置产品请求委托 :在代码中实现 SKProductsRequestDelegate 协议,并实现 productsRequest(_:didReceive:_) 方法。该方法会在请求完成后被调用,并提供获取到的产品数组。

  2. 日志记录和调试 :添加日志记录语句,帮助调试过程。这能让你查看请求的状态和错误消息。

结论

通过遵循这些步骤,你可以在 iOS 应用中顺利获取内购产品。定期查看 App Store Connect,以了解产品状态更新,并确保你的代码是最新的。

常见问题解答

  1. 为什么即使在 Xcode 环境中购买成功,但在 TestFlight 中却无法获取产品?

    • 可能的原因是产品状态尚未通过审核,或者产品 ID 不匹配。
  2. 如何检查产品状态?

    • 在 App Store Connect 中,点击“我的应用”,然后选择“内购项目”选项卡,查看产品的状态。
  3. 如何更新代码片段?

    • 查看 Apple 官方文档,获取最新版本的 StoreKit2 框架。
  4. 如何设置产品请求委托?

    • 在代码中,将你的类声明为 SKProductsRequestDelegate 协议的遵循者,并实现 productsRequest(_:didReceive:_) 方法。
  5. 如何添加日志记录?

    • 在代码中使用 print() 函数或 NSLog() 方法输出日志信息,以帮助你调试问题。