Как работают In-App покупки в iOS | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 30.11 Забрать скидку! →
Выбрать курс

Как работают In-App покупки в iOS

В маркетах сейчас можно найти приложения на любой вкус. В основном они бывают бесплатные и платные. Бесплатные приложения могут быть с рекламой или встроенными покупками.

В кейсе с платными приложениями пользователь покупает приложение и получает полный функционал и весь контент. При этом Apple забирает комиссию 30 %, а разработчик получает уже оставшуюся сумму.

В бесплатных приложениях с рекламой пользователь получает полный функционал, но ему будет показываться реклама. Доход от рекламы проходит такой же путь: Apple берет комиссию, остатки — разработчику.

Приложения со встроенными покупками (In-App Purchases) подразумевают бесплатные для загрузки приложения, но с платным контентом. Под платным контентом можно рассматривать многое: внутри-игровые валюты, товары, контент, дополнительный функционал. Через In-App Purchase можно продавать только электронные товары/услуги, а не материальные предметы. Доход со встроенных покупок все так же по стандартной схеме: комиссия 30 % — Apple, остальное — разработчику. Но эту комиссию все же можно уменьшить: она снижается после года, если разработчик использует у себя автопродление подписок в приложении.

Встроенные покупки — это механизм для организации продаж внутри своего приложения. Настраиваются они через AppStore, а взаимодействовать можно через StoreKit.framework (он доступен с iOS 3.0).

In-App Purchases бывает трех типов: • Consumables; • Non-Consumables; • Subscriptions.

Consumable — потребляемый тип. Покупки такого типа можно приобретать несколько раз. В основном это различные монетки, энергия — всё, что может закончиться и необходимо покупать еще раз.

Non-Consumable — непотребляемый тип. Такие покупки покупаются только один раз. Его обычно используют для разблокировки новых тем, дополнительных уровней и подобного.

Subscription — подписка. В основном такой тип используется для приобретения дополнительного функционала или контента внутри приложения. У подписок есть определенный срок действия. От потребляемого типа отличается тем, что здесь пользователь приобретает подписку, а не товар или валюту внутри приложения. Подписка открывает для пользователя контент, действие которого не закончится (только если подписка активна).

Подписки бывают возобновляемые (Auto-Renewable Subscription) и невозобновляемые (Non-Renewable Subscription). Первый тип подразумевает автоматические продление подписки при условии, что она не отменена пользователем. Второй тип инициируется пользователем, длится выбранный разработчиком период времени и затем прекращается. Подписки могут быть созданы на разные сроки: месяц, полгода, год. Самым популярным вариантом для возобновляемых подписок являются месячные и годовые подписки.

Реализовать встроенные покупки можно без или с использованием сервера. В основном встроенную модель применяют при внедрении потребляемого типа In-App (consumable). Для невозобновляемых подписок обязательна реализация с использованием сервера. А для всех остальных вариантов желательно использование сервера, но однако можно обойтись и без него.

Обычно при использовании встроенной модели StoreKit позволяет понять, прошла ли покупка или нет. То есть при этом нам нужно знать, что была совершена покупка, но дополнительной информации об этой покупке нам хранить не нужно.

При серверной модели принимают участие три сущности: приложение, сервер Apple и наш сервер. Принцип работы этой модели такой:

  1. Приложение запрашивает список продуктов у своего сервера.
  2. Приложение отображает новые продукты пользователю.
  3. Пользователь покупает что-то.
  4. Приложение запрашивает покупку у сервера Apple через StoreKit.
  5. StoreKit возвращает ответ.
  6. Приложение отсылает ответ на свой сервер.
  7. Еще раз проверяется ответ (обязательно проверяется, что ответ пришел от Apple).
  8. После этого приложение получает от сервера новый продукт.

В нашем приложении мы используем подписочную и consumable модели покупок и реализовали ее через серверную модель. Потребляемый тип мы используем для покупки отдельных фильмов, сериалов. У нас есть несколько купонов на определенные суммы: для покупки фильмов и сериалов в разном качестве по модели DTO (навсегда) и по арендной модели.

Для того, чтобы пользователь узнал о встроенных покупках, используют различные способы. Контент, который доступен для покупки, выделяется по-разному, но одно всегда остается одинаковым — это использование ценников. И у Apple есть определенные требования к описанию ценников In-App-покупок.

При использовании встроенных покупок в приложении у пользователя должна быть возможность попробовать само приложение до покупки, то есть должна поддерживаться концепция freemium. Freemium — это условно бесплатное приложение.

Например, главная цель онлайн-кинотеатра — это просмотр видео. Наше приложение находится в бесплатном доступе для любого пользователя, а значит, перед покупкой должна быть возможность попробовать посмотреть контент — трейлеры фильмов находятся в свободном доступе. А так как Okko Фильмы — это платформа без рекламы, поэтому весь лицензионный контент мы предоставляем после покупки. Но есть некоторые виды контента, который мы можем предоставить пользователю бесплатно. Так мы сейчас показываем онлайн-концерты и некоторые партнерские поставки спектаклей.

1_mWWf1g5kX_mH2__jXgG0MA_1-1801-791762.jpeg

Apple уделяет особое внимание подписочным ценникам, а особенно возобновляемым, потому что при их использовании есть множество нюансов. Часто вместе с этим типом используют механизмы вводных предложений. Это ограниченные по времени вводные цены со скидкой (Pay As You Go, Pay Up Front) или триальный период (Free Trial). После этого периода происходит списание оплаты за следующий период самой подписки. Возможная продолжительность вводных предложений в таблице.

1_E1CA1J5mQAof0aURRieodQ_1-1801-29d3a6.png

Free Trial

Самое популярное — это триальный период. Обычно для пользователя дается ознакомительный период, когда можно воспользоваться подпиской, получить полный доступ к платным функциям и контенту, но без оплаты. После этого начинаются обычные списания полной стоимости подписки. Отличить этот тип можно по значению paymentMode SKProductDiscountPaymentModeFreeTrial в SKProductDiscount (introductoryPrice у SKProduct).

1_m4gFg42CDRCjCKsb3bigsg_1-1801-39468c.png

Pay As You Go

SKProductDiscountPaymentModePayAsYouGo означает оплату по факту использования. Эта модель оплаты предусматривает единовременную скидку на один или несколько платежных периодов. По окончании этих периодов с пользователя будет списана обычная стоимость подписки.

1_8TgrieB65TUbV9xAKPxIxg_1-1801-dfc436.png

Pay Up Front

Оплату по предоплате представляет значение SKProductDiscountPaymentModePayUpFront. В этой модели вы предлагаете пользователю заплатить сразу за несколько месяцев (1, 2, 3, 6 или 12) вперед. По окончании этого периода пользователь будет оплачивать подписку по стандартным условиям.

1_VuLbRoIKdOTDYRMf1FzD9Q_1-1801-ab9bdb.png

При этом стоимость предоплаты не обязательно должна быть меньше стоимости основной подписки. А количество периодов действия предложения всегда равно 1. Иными словами, предложение действует в течение только одного периода длительностью 1, 2, 3, 6 или 12 месяцев. Это отличает предоплату от оплаты по факту использования.

Стоит отметить, что любым вводным предложением можно воспользоваться лишь один раз. Поэтому перед тем, как показать его, необходимо проверить доступность предложений.

В StoreKit нет методов, позволяющих узнать, может ли пользователь воспользоваться вводным предложением или нет. Единственный вариант — это сохранять на сервере чеки (receipts) от всех подписок этого пользователя по каждой группе покупок. И тогда необходимо просматривать все транзакции каждого чека, принадлежащего нужной группе подписок, в поисках полей is_trial_period и is_in_intro_offer_period, чтобы понять, было ли использовано вводное предложение.

Для того, чтобы выделять ценники и мотивировать пользователя покупать именно подписку, можно использовать разные варианты отображения. И даже тут у Apple есть своё мнение и советы, как это надо делать лучше. Несоблюдение этих правил может оказаться причиной реджекта при прохождении ревью, что у нас и случалось.

Во-первых, при использовании возобновляемой подписки необходимо быть максимально прозрачными. Поэтому, помимо добавления пользовательского соглашения и политики конфиденциальности, в описание в App Store Connect нужно добавить описание и на ценниках, продающих возобновляемую подписку. В описании стоит указать период вводного предложения, если он есть, период подписки, стоимость и порядок продления и отмены подписки.

Во-вторых, по правилам оформления необходимо рассказать пользователю все привилегии, которые он может получить после покупки.

1_gVWjEftZFXm6BdL7RMyGJg_1-1801-eb0bbd.png

Верно: 1_3A3kWckJAYbEhdxC3lCl7g_1-1801-59438c.png

В-третьих, цена подписки и триальный период считаются стоимостью, поэтому они должны легко считываться и быть одинакового размера. Также не стоит вводить в заблуждение пользователя и писать на триальном предложении «Попробовать бесплатно», так как это всего лишь временное предложение, которое потом продлится по полной стоимости подписки (даже несмотря на то, что «Free trial», «Try for free» логичнее всего переводить именно так 😅).

Неверно: 1_vjyM4vmDeWyjZV6GOBr8WQ_1-1801-9f5259.png

Мы нашли решение в переименовании «Пробовать бесплатно» на «Оформить подписку», но при этом мы рядом с ценой пишем о триальном периоде. Поэтому для пользователя коммуникация о вводном предложении сохраняется.

По гайдлайнам Apple цена должна быть ясно видна. Ранее предлагалось располагать цену прямо на кнопке. В нашем приложении мы использовали разные способы для выделения цены: без цены, с ценой на кнопке и рядом с кнопкой.

1_VzgFbCKw5uLLDQXqW2dmpA_1-1801-e578a0.png

Для того, чтобы выяснить, как влияет цена, триальный период или цвет на решение пользователя о покупке, мы проводили сплиты: • красили кнопки в разные цвета (фиолетовый или розовый); • убирали с кнопки дополнительную информацию про цену; • добавляли дополнительное описание про триальный период на кнопку; • выделяли триальный период; • выделяли лучшее подписочное предложение цветом.

Но в итоге после нескольких итераций сплитов и реджектов мы остановились на варианте выделения триального периода цветом и добавлением рядом цены за подписку. Оказалось, на покупательную способность цвет самой кнопки не влияет, но влияет выделение специального предложения, что логично.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 30.11 →