Разработка
Осваиваем StoreKit 2: модификаторы представлений в SwiftUI
В целом, представления StoreKit полностью справляются с загрузкой и покупками в приложении. Но иногда для реагирования необходимо знать текущий шаг в потоке.
В этой серии статей мы говорили о StoreKit 2. На этой неделе мы завершим цикл, рассмотрев набор модификаторов представлений, которые StoreKit 2 предоставляет нам для использования в представлениях SwiftUI.
В целом, представления StoreKit полностью справляются с загрузкой и покупками в приложении. Но иногда для реагирования необходимо знать текущий шаг в потоке. Например, может потребоваться отключить платный экран, когда пользователь завершает покупку, или показать индикатор загрузки в ожидании результата работы сервера App Store.
struct PaywallView: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
SubscriptionStoreView(groupID: "598392E1")
.onInAppPurchaseStart { product in
print(product.displayName)
}
.onInAppPurchaseCompletion { product, result in
dismiss()
}
}
}
StoreKit 2 предоставляет нам модификаторы представления onInAppPurchaseStart и onInAppPurchaseCompletion для обработки начала и завершения любой покупки в иерархии представлений с помощью представлений StoreKit. Оба модификатора принимают closure для выполнения и имеют в качестве параметров продукт и результат покупки.
Еще одним модификатором представления, упрощающим нашу работу, является модификатор subscriptionStatusTask. Он позволяет нам постоянно наблюдать за состоянием определенной группы подписок. Он обновляет информацию при каждом изменении состояния подписки.
xxxxxxxxxx
struct ContentView: View {
@State private var paywallShown = false
@State private var isPro = false
var body: some View {
RootView()
.sheet(isPresented: $paywallShown) {
PaywallView()
}
.subscriptionStatusTask(for: "598392E1") { taskState in
if let value = taskState.value {
isPro = !value
.filter { $0.state != .revoked && $0.state != .expired }
.isEmpty
} else {
isPro = false
}
}
}
}
Как видно из приведенного примера, мы используем модификатор представления subscriptionStatusTask для наблюдения за состоянием конкретной группы подписок. Как вы могли заметить, мы предоставляем замыкание, обрабатывающее изменение статуса подписки, и в качестве параметра оно принимает массив статусов подписки. Массив вместо одного значения используется потому, что пользователь может как приобрести подписку, так и иметь доступ к ней через семейный шаринг.
Модификатор представления subscriptionStatusTask работает только с подписками. StoreKit 2 предоставляет модификатор представления currentEntitlementTask для расходуемых и нерасходуемых покупок. Он работает аналогично модификатору представления subscriptionStatusTask, но вместо этого предоставляет опциональную транзакцию конкретного продукта.
xxxxxxxxxx
struct ContentView: View {
@State private var paywallShown = false
@State private var isPro = false
var body: some View {
RootView()
.sheet(isPresented: $paywallShown) {
PaywallView()
}
.currentEntitlementTask(for: "1232") { taskState in
if let verification = taskState.transaction,
let transaction = try? verification.payloadValue {
isPro = transaction.revocationDate == nil
} else {
isPro = false
}
}
}
}
Модификатор представления currentEntitlementTask позволяет нам предоставить closure, принимающее опциональную транзакцию, обернутую в тип VerificationResult. Необязательной она является потому, что для данного товара транзакция может отсутствовать. Всякий раз, когда пользователь приобретает или отказывается от покупки товара, StoreKit 2 запускает подключенное замыкание.
Еще один модификатор представления, который предоставляет нам StoreKit 2, — это модификатор storeProductsTask. Он позволяет загрузить список товаров и наблюдать за ними. Он запускает предоставленное замыкание при каждом изменении любого товара в коллекции.
xxxxxxxxxx
struct ContentView: View {
@State private var paywallShown = false
var body: some View {
RootView()
.sheet(isPresented: $paywallShown) {
PaywallView()
}
.storeProductTask(for: "12763") { taskState in
print(taskState.product?.displayName)
}
}
}
Сегодня мы узнали, как работать со StoreKit 2 из представлений SwiftUI с помощью новых модификаторов представлений. Надеюсь, вам понравился этот пост.
Другие статьи о StoreKit 2
- Осваиваем StoreKit 2
- Осваиваем StoreKit 2: ProductView и StoreView в SwiftUI
- Осваиваем StoreKit 2: SubscriptionStoreView в SwiftUI
- Осваиваем StoreKit 2: модификаторы представлений в SwiftUI
-
Видео и подкасты для разработчиков4 недели назад
Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.10
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.11
-
Видео и подкасты для разработчиков2 недели назад
Javascript для бэкенда – отличная идея: Node.js, NPM, Typescript