В этой статье мы продолжим изучение представлений StoreKit в SwiftUI, рассмотрев еще одно представление StoreKit под названием SubscriptionStoreView. Этот экран позволяет нам легко отображать и обрабатывать подписки.
Основы
Представление SubscriptionStoreView обеспечивает полный поток управления подписками в одной строке кода.
import SwiftUI import StoreKit struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1") } }
Достаточно разместить экземпляр SubscriptionStoreView с единственным параметром, определяющим группу подписок. Убедитесь, что вы указываете идентификатор группы, а не название группы или любую другую строку. SubscriptionStoreView полностью обрабатывает поток подписок, включая загрузку и покупку продуктов. Вам ничего не нужно делать.
Вы можете настроить список подписок в SubscriptionStoreView, предоставив список идентификаторов продуктов для каждой подписки, которую вы хотите включить в него. Следует помнить, что SubscriptionStoreView может работать только с подписками, входящими в одну группу.
struct ContentView: View { var body: some View { SubscriptionStoreView(productIDs: ["123456789", "987654321"]) } }
Другой вариант — предоставить список загруженных экземпляров типа Product, который StoreKit 2 использует для инкапсуляции конкретного IAP продукта в приложение.
Как я уже говорил, SubscriptionStoreView полностью обрабатывает поток управления подпиской. Поэтому он предоставляет пользовательский интерфейс для апгрейда, понижения, перекрестного обновления и т.д. По умолчанию он отображает все доступные действия, но вы можете управлять доступностью предоставляемых действий с помощью параметра visibleRelationships.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) } }
Параметр visibleRelationships определяется через структуру SubscriptionRelationship. Он предоставляет множество готовых к использованию опций, таких как upgrade, crossgrade, downgrade и current.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .current) } }
В приведенном примере мы используем SubscriptionStoreView только для отображения подписки, на которую пользователь уже подписался.
SubscriptionStoreView поддерживает модификатор вида storeButton, позволяющий установить видимость для набора кнопок, предоставляемых магазином. Чтобы узнать больше, ознакомьтесь со статьей «Осваиваем StoreKit 2. ProductView и StoreView в SwiftUI«.
Стилизация
По умолчанию SubscriptionStoreView использует иконку приложения и название группы подписок в качестве дополнительного содержимого для отображения над списком подписок. Это отлично работает для моих приложений на watchOS, но на iOS или iPadOS отображается совсем не то, что я хочу.
К счастью, можно быстро создать свое настраиваемое представление для отображения над списком подписок. Обычно я использую эту область для предоставления информации о функциях, включенных в подписку.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) { MyMarketingContentView() } } }
Как видно из приведенного примера, мы используем другой вариант SubscriptionStoreView, позволяющий передавать closure ViewBuilder для отображения маркетингового контента.
Настроить фон SubscriptionStoreView можно с помощью нового модификатора вида containerBackground. Он позволяет поместить SwiftUI в качестве фона для SubscriptionStoreView.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) { MyMarketingContentView() .containerBackground(Color.blue, for: .subscriptionStoreHeader) .containerBackground(Color.red, for: .subscriptionStoreFullHeight) } } }
Мы можем управлять размещением фона с помощью второго параметра модификатора вида containerBackground. Можно установить различные фоны для маркетингового контента или всего представления нашего магазина.
Еще одна возможность стилизации, которую предоставляет нам SubscriptionStoreView, — это стиль элемента управления. По умолчанию он использует пикеры, но мы можем легко изменить его на использование кнопок с помощью модификатора вида subscriptionStoreControlStyle.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) .subscriptionStoreControlStyle(.buttons) } }
Модификатор View subscriptionStoreControlStyle позволяет установить стиль для следующих вариантов: кнопки, picker, prominent picker и automatic. SubscriptionStoreView работает на всех платформах Apple, но на некоторых платформах работают только некоторые стили управления. Поэтому по умолчанию используется автоматический стиль, который в зависимости от платформы имеет разный вид.
У нас также есть модификатор вида subscriptionStoreButtonLabel, позволяющий настраивать кнопки магазина. При использовании пикеров в магазине подписки модификатор вида subscriptionStoreButtonLabel влияет только на одну кнопку, призывающую к действию.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) .subscriptionStoreButtonLabel(.multiline) } }
Модификатор View subscriptionStoreButtonLabel позволяет задавать различные предопределенные метки для кнопки призыва к действию. По умолчанию используется автоматическая метка, которая показывает действие в зависимости от выбранной подписки. Так, она может отображать «Попробовать бесплатно», если подписка имеет бесплатную пробную версию, или «Изменить на», если у вас уже есть активная подписка.
struct ContentView: View { var body: some View { SubscriptionStoreView(groupID: "598392E1", visibleRelationships: .all) .subscriptionStoreButtonLabel(.multiline) } }
Для включения в кнопку дополнительной информации о подписке можно использовать многострочную опцию. Если в качестве элемента управления подпиской используется стиль buttons, то модификатор subscriptionStoreButtonLabel влияет и на эту кнопку.
В этой статье мы узнали о SubscriptionStoreView из StoreKit 2 и о том, как использовать его для получения дохода для вашего приложения. Надеюсь, вам понравился этот пост. Спасибо, что прочитали, и до встречи в следующей статье!