SubscriptionStoreView购买成功后未关闭,如何保留默认处理并关闭?
问题解答
1. 订阅成功后是否应该默认关闭SubscriptionStoreView?
这是官方预期行为——SubscriptionStoreView在订阅成功后不会自动关闭。Apple设计的默认逻辑里,仅会用onInAppPurchaseCompletion的默认处理程序处理错误场景(比如购买失败、用户取消操作等)的提示,成功场景的视图关闭需要开发者主动触发,并非框架Bug。
2. 保留默认处理动作同时关闭视图的实现方式
你可以在自定义的onInAppPurchaseCompletion回调中,先调用官方提供的默认处理逻辑,再添加成功时关闭视图的代码。核心是利用InAppPurchaseCompletionResult.defaultHandler()复用默认行为,无需自己重新实现错误处理逻辑。
示例代码如下:
import SwiftUI import StoreKit struct ContentView: View { @State private var showSubscriptionStore = false var body: some View { Button("订阅会员") { showSubscriptionStore = true } .sheet(isPresented: $showSubscriptionStore) { SubscriptionStoreView() .onInAppPurchaseCompletion { result in // 先执行官方默认处理逻辑,处理错误提示等 InAppPurchaseCompletionResult.defaultHandler()(result) // 仅在购买成功时关闭视图 if case .success(_) = result { showSubscriptionStore = false } } } } }
关键说明:
- 必须先调用
defaultHandler(),确保默认的错误提示等行为正常执行 - 仅在
result为.success时关闭视图,避免错误场景下误关闭(比如用户取消购买时,视图应保留以支持用户后续操作)
内容的提问来源于stack exchange,提问作者Tien Do
相关产品推荐
相关产品推荐

