You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:14:51