Update a View after an in app purchase was done

419 Views Asked by At

In the meantime a try to implement in app purchases in my app that is in the AppStore. So I done this with Glassfy and everything works fine.

final class IAPManager {
    static let shared = IAPManager()

    private init() {}

    enum Product: String {
        case comfirstmember

        var sku: String {
            "numberOne"
        }
    }
    
    @AppStorage("boughtFirst") var boughtFirst = false
    

    func configure() {
        Glassfy.initialize(apiKey: "31876r5654fgz4f95f0e6e6bh5d")
    }

    func getProduct(completion: @escaping (Glassfy.Sku) -> Void) {
        Glassfy.sku(id: "numberOne") { sku, error in
            guard let sku = sku, error == nil else {
                return
            }
            completion(sku)
        }
    }

    func purchase(sku: Glassfy.Sku) {
        Glassfy.purchase(sku: sku) { transaction, error in
            guard let t = transaction, error == nil else {
                return
            }

            if t.permissions["numberOne"]?.isValid == true {
                NotificationCenter.default.post(
                    name: Notification.Name("numberOne"),
                    object: nil
                )
                self.boughtFirst = true
                
            }
        }
    }

    func getPermissions() {
        Glassfy.permissions { permissions, error in
            guard let permissions = permissions, error == nil else {
                return
            }

            if permissions["numberOne"]?.isValid == true {
                NotificationCenter.default.post(
                    name: Notification.Name("numberOne"),
                    object: nil
                )
                self.boughtFirst = true
            }
        }
    }

    func restorePurchases() {
        Glassfy.restorePurchases { permissions, error in
            guard let permissions = permissions, error == nil else {
                return
            }

            if permissions["numberOne"]?.isValid == true {
                NotificationCenter.default.post(
                    name: Notification.Name("numberOne"),
                    object: nil
                )
                self.boughtFirst = true
                
            }
        }
    }
}

But now I need to update a View after the purchase was successfully done buy the user to display the Content that he purchased.

 NavigationView {
        VStack {
            if boughtFirst == false {
                BuyExtraContent()
            }
            if boughtFirst == true {
                AllView()
            }
        }
    }

I want do this as easy as possible just with AppStorage. But if I place the Boolean in the func purchase to switch from false to true nothings changes.

So my question is how I can update a view after a successful purchase.

P.S. I´m a bit lost in SwiftUI so please explain it not to complex :)

1

There are 1 best solutions below

0
On

use a state variable for this .

you used boughtFirst as a bool variable. make sure it's an observable . try to call with observable object and when your variable will change the view will automatically notify and update by itself.

I am not sure you followed this strategy or not.