在此期间,我尝试在我的应用程序中实现在AppStore中的应用程序购买。所以我用Glassfy做了这个,一切都很好。
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
}
}
}
}
但是现在我需要在购买成功完成后为用户更新视图,以显示他购买的内容。
NavigationView {
VStack {
if boughtFirst == false {
BuyExtraContent()
}
if boughtFirst == true {
AllView()
}
}
}
我想做到这一点尽可能简单,只是与AppStorage。但是,如果我将布尔值放在函数purchase中以从false切换到true,则没有任何变化。
我的问题是如何在成功购买后更新视图。
注:我有点迷失在SwiftUI,所以请解释一下,不要太复杂:)
使用一个状态变量。
您使用boughtFirst
作为bool变量。确保它是一个可观察对象。尝试调用可观察对象,当你的变量改变时,视图会自动通知并更新自己。
我不确定你是否遵循了这个策略。