ios - “SwiftyStoreKit.completeTransactions() 应该只在应用启动时调用一次。”
问题描述
我将 SwiftyStoreKit 与 SwiftUI 和 App 而不是 App Delegate 一起使用,并在控制台中收到此消息:“SwiftyStoreKit.completeTransactions() 应仅在应用启动时调用一次。” 我相信它,因为我在下面的块中调用了 completeTransactions,我可以从 Print 语句中看到,它比以前调用 AppDelegate 的 didFinishLaunching 更频繁。我关注此消息的原因是我在尝试购买时因崩溃而被 App Review 拒绝。我还应该在哪里调用 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
}
}
}
解决方案
尝试在 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
确实完成启动回调。
推荐阅读
- ruby - 在 Ruby 中,如何获取发送者,更准确地说是调用方法的实例变量?
- c# - 在 C# 中编码用于反序列化的 xml
- php - 从由 Digital Ocean 上的反向代理链接的 docker 容器中的静态站点发送电子邮件
- python - 如何通过 Selenium 和 Python 在嵌套的 div 标签中找到按钮?
- amazon-web-services - 使用无服务器将 aws sqs 添加为 aws lambda 函数触发器
- firebase - Firebase 函数:ReferenceError:decodedToken 未定义
- mongodb - Mongo 聚合在 3.4.7 版本中将字符串转换为日期
- c - for 循环中的 AT 命令
- react-native - ReactNative TextView 中的链接
- powershell - Login-AzureRMAccount noninteractive 使用组织帐户失败