我使用 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 映射到待处理或中断的交易?
首先,您还需要在后端集成实时 App Store 通知 系统
基本上你需要提供一个端点来接收来自Apple服务器的POST消息
保存这些请求中的有效负载并对其进行分析以了解发生了什么。
在这里阅读更多内容:
工作流程:
1 - 当您第一次收到新购买的商品时,您还必须保存收据中的原始交易 ID
2 - 将originalTransactionId与此API一起使用并像往常一样解码内容
3 - 您将在其中找到 appAccountToken!