iOS 应用内购买交易在交易更新中不返回 appAccountToken

问题描述 投票:0回答:1

我使用 StoreKit 2 框架在我的 iOS 应用程序中添加了不可续订的订阅应用内购买。我仅使用 App Store 来确认购买处理。我在服务器上管理有关用户和订阅的所有详细信息(orderId、userId购买日期、到期日等)。购买的订阅 transactionId 映射到我的数据库中的应用程序用户和 orderId。每次用户打开应用程序时,我都会在数据库中检查该用户是否具有有效的订阅。

由于我要向应用程序的用户提供订阅(而不是映射到 iOS Apple ID),因此数据库的 orderId 需要映射到应用程序商店 transactionId。因此,我使用购买选项启动产品购买,其中我将 orderId 作为

appAccountToken
传递,如下所示:

  let accountTokenUUID = createUUID(from: orderId)
  let purchaseOption = Product.PurchaseOption.appAccountToken(accountTokenUUID)

   do {
        let result = try await product.purchase(options: [purchaseOption])
.
.
.
}

购买完成后,我可以像这样从交易结果的

appAccountToken
中提取orderId

if let uuid = transaction.appAccountToken {
             retrievedOrderId = extractOrderId(from: uuid)
            print("Extracted order ID: \(retrievedOrderId)")
        } else {
            print("No valid UUID string found in transaction's appAccountToken.")
        }

我面临的问题是当我尝试处理待处理或中断的交易时。我有一个侦听器函数,用于接收待处理或中断事务的更新。其中 Transaction 对象显示 appAccountToken 的空值。

有没有办法可以检索我在启动待处理或中断交易时添加到购买中的 appAccountToken?如果不是,还可以做什么来将我的 orderId 与应用程序商店 transactionId 映射到待处理或中断的交易?

ios in-app-purchase
1个回答
0
投票

首先,您还需要在后端集成实时 App Store 通知 系统

基本上你需要提供一个端点来接收来自Apple服务器的POST消息

保存这些请求中的有效负载并对其进行分析以了解发生了什么。

在这里阅读更多内容:

工作流程:

1 - 当您第一次收到新购买的商品时,您还必须保存收据中的原始交易 ID

2 - 将originalTransactionId与此API一起使用并像往常一样解码内容

3 - 您将在其中找到 appAccountToken!

© www.soinside.com 2019 - 2024. All rights reserved.