检查 SKProduct 是否已购买

use*_*155 5 ios swift

Android Google Billing 应用内提供有关产品的所有信息(包括是否购买)

iOS 应用内购买 (IAP) 怎么样?

我不想在用户购买后将购买的商品保存在本地(iOS 的 UserDefaults)或保存到我自己的服务器

Android 使用 Google Play 服务、AIDL即使在离线模式下也能获取已购买的商品

为了Android的安全,我们可以验证用户是否真的购买了商品(并且没有使用一些黑客应用程序免费获取它) - https://developer.android.com/google/play/billing/billing_best_practices#validating-purchase-服务器

当用户的设备互联网启用时,我们可以对已购买的物品进行这种额外验证(尽管仅在购买物品期间检查它应该足够了),如果互联网被禁用,我们可以暂时说用户购买了它(但如果他没有购买)购买它然后无论如何都需要互联网,在这种情况下我们无论如何都会在我们的服务器上验证它)

那么 iOS 是如何工作的呢?它是否有一些(我不知道)iTunes 服务来获取特定应用程序的 IAP 信息?

小智 -3

是的,在 iOS 上,您应该使用 StoreKit 来获取有关该应用程序可用的所有应用内购买的详细信息。

在 App Store connect 中设置应用内购买后,您将获得购买 ID。

要检索有关它们的信息,您应该使用购买 ID 发出 SKProductRequest。这将返回所需的信息。

import StoreKit

class YourPurchaseManagerClass: NSObject {
  var productsRequest: SKProductsRequest?
  var products: [SKProduct]?

  func validateProductIdentifiers(productIdentifiers: Set&ltString>) {
    // Create and start the 
    productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
    productsRequest?.delegate = self
    productsRequest?.start()
  }
}

extension YourPurchaseManagerClass: SKProductsRequestDelegate {

  func productsRequest(_ request: SKProductsRequest,
                       didReceive response: SKProductsResponse) {

    // Store the products data. This will contain the information about the purchases
    products = response.products;

    for invalidIdentifier in response.invalidProductIdentifiers {
      // Handle any invalid product identifiers.
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个专门讨论检索应用内购买信息并包含示例代码的链接。

以下是有关整个应用内购买设置流程的 Apple 文档的链接

  • 您在哪里检查产品是否已购买? (3认同)