如何在SwiftUI中将subscriptionStatusTask应用到TabView

问题描述 投票:0回答:1

我正在开发一个 SwiftUI 应用程序,我需要在 TabView 中使用 subscriptionStatusTask 集成订阅状态检查。我尝试在 AppTabView 中实现此功能,但遇到了订阅状态任务似乎未在 TabView 中按预期运行的问题。当应用于其他视图时,它可以完美地工作。

这是我的方法的简要概述:

我在 AppTabView 中有一个 TabView 设置,这是我的应用程序的主视图。 每个选项卡都应该在选择时检查订阅状态。 但是,当我在选项卡之间切换时,subscriptionStatusTask 似乎不会触发或更新视图。 我尝试在 TabView 块中添加 .subscriptionStatusTask ,但这并没有解决问题。这是我的代码结构的简化版本:

    struct AppTabView: View {
    // Environment objects and state variables

    var body: some View {
        TabView(selection: $selectedTab.selected) {
            DashboardView(resetState: $resetDashboardState)
                .tabItem { Label("Home", systemImage: "house.fill") }
                .tag(0)
            // Other tabs...
        }
        .subscriptionStatusTask(for: passIDs.group) { taskStatus in
            // Handle subscription status
        }
        // Other modifiers...
    }
}

有人遇到过类似的问题或知道如何在 TabView 中正确实现 subscriptionStatusTask 吗?任何有关如何确保在切换选项卡时检查订阅状态并更新视图的指导将不胜感激。

ios swift swiftui storekit storekit2
1个回答
0
投票

这能解决您的问题吗?

导入 SwiftUI 导入 StoreKit

struct ContentView: View {
    @State private var paywallShown = true
    @State private var isPro = false
    
    
    var body: some View {
        Text("Demo")
            .sheet(isPresented: $paywallShown) {
                PaywallView()
            }
        
            .subscriptionStatusTask(for: "506F71A6") { taskState in
                if let value = taskState.value {
                    isPro = !value
                        .filter { $0.state != .revoked && $0.state != .expired }
                        .isEmpty
                } else {
                    isPro = false
                }
            }
    }
}

struct PaywallView: View {
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        SubscriptionStoreView(groupID: "506F71A6")
            .onInAppPurchaseStart { product in
                print(product.displayName)
            }
            .onInAppPurchaseCompletion { product, result in
                dismiss()
            }
    }
}

#Preview {
    ContentView()
}
© www.soinside.com 2019 - 2024. All rights reserved.