我在SwiftUI和应用程序中使用SwiftUI,而不是App,并在控制台中得到这样的消息:"SwiftyStoreKit.completeTransactions()只能在应用程序启动时调用一次。“我相信这是因为我在下面的块中调用completeTransactions,我可以从Print语句中看到它比以前调用AppDelegate的didFinishLaunching更频繁。我之所以关注这条信息,是因为在试图购买时,我因为崩溃而被App拒绝。我还应该在哪里打电话给completeTransactions?
.onChange(of: scenePhase) { newScenePhase in
switch newScenePhase {
case .active:
print("App is active")
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
let downloads = purchase.transaction.downloads
if !downloads.isEmpty {
SwiftyStoreKit.start(downloads)
} else if purchase.needsFinishTransaction {
// Deliver content from server, then:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
print("\(purchase.transaction.transactionState.debugDescription): \(purchase.productId)")
case .failed, .purchasing, .deferred:
break // do nothing
@unknown default:
break // do nothing
}
}
}发布于 2021-01-11 17:07:47
尝试在app main init中这样做,比如
@main
struct MyApp: App {
init() {
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
// ... other code here
}
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}注意:,如果为时尚早,那么您可以定义应用程序委托适配器(如这里的https://stackoverflow.com/a/62538373/12299030),并调用SwiftyStoreKit on确实完成了启动回调。
https://stackoverflow.com/questions/65671263
复制相似问题