Ash*_*lls 8 storekit swift storekit2
如何返回Transaction.currentEntitlements应用程序关闭时发生的订阅自动续订交易?
我已经在 macOS 应用程序中实现了自动续订订阅。
我有一个可以在和StoreManager上创建听众的Transaction.currentEntitlementsTransaction.updates
如果在应用程序运行时续订订阅,Transaction.updates则会按预期接收最新交易。
但是,当应用程序未运行时自动发生续订时,重新打开应用程序时Transaction.currentEntitlements不会返回续订交易。
按照以下步骤进行重现:
Transaction.currentEntitlements什么也不返回。在应用程序启动时检查StoreKit Transactions调试窗口,应用程序关闭时发生的续订交易显示为“未完成”。
未完成的交易是指未返回的交易。
如果在应用程序运行时再次续订订阅,则会Transaction.updates触发侦听器,并返回新的续订以及任何未完成的事务。
这是来自的相关代码StoreManager
@MainActor
class StoreManager: ObservableObject {
var updates: Task<Void, Never>? = nil
var transactions: Task<Void, Never>? = nil
init() {
updates = updatesListenerTask()
transactions = transactionsListenerTask()
}
@Published private (set) var transaction: StoreKit.Transaction?
func updatesListenerTask() -> Task<Void, Never> {
Task.detached(priority: .background) {
for await result in Transaction.updates {
Task { @MainActor in
do {
let transaction = try self.validateResult(result)
self.transaction = transaction
await transaction.finish()
} catch {
print("Failed verification =\(error.localizedDescription)")
}
}
}
}
}
func transactionsListenerTask() -> Task<Void, Never> {
Task.detached(priority: .background) {
for await result in Transaction.currentEntitlements {
Task { @MainActor in
do {
let transaction = try self.validateResult(result)
self.transaction = transaction
await transaction.finish()
} catch {
print("Failed verification =\(error.localizedDescription)")
}
}
}
}
}
func validateResult(_ result: VerificationResult<StoreKit.Transaction>) throws -> StoreKit.Transaction {
switch result {
case let .verified(transaction):
return transaction
case .unverified:
throw StoreManagerError.failedVerification
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新
Transaction.latest(for: <productId>)返回的是最新的成品,因此不是自动更新的产品。
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |