Pull to refresh
0
Adapty
Сервис для аналитики и роста мобильных подписок

iOS in-app purchases часть 1: конфигурация и добавление в проект

Reading time 6 min
Views 21K

Всем привет, меня зовут Виталий, я основатель Adapty. Подписки — один из способов монетизировать приложение. С их помощью вы можете дать пользователю возможность получить постоянный доступ к обновляемому контенту в приложении или же к предоставляемому сервису. В отличие от обычных покупок, где Apple берет себе 30% комиссию, на подписках эта комиссия сокращена до 15% в случае, если пользователь подписан в течение 1 года и более. Важный момент: если пользователь отменит подписку, то данный счетчик сбросится через 60 дней.


Мы выпускаем цикл статей, закрывающих все вопросы добавления встроенных покупок в iOS:


  1. iOS in-app purchases, часть 1: конфигурация и добавление в проект. — Вы тут.
  2. iOS in-app purchases, часть 2: Инициализация и обработка покупок.
  3. iOS in-app purchases, часть 3: Серверная валидация покупки.
  4. iOS in-app purchases, часть 4: Локальное тестирование покупок в XCode.
  5. iOS in-app purchases, часть 5: Обработка ошибок SKErrors.

​​В этой части мы научимся:


  • cоздавать покупки в App Store Connect;
  • конфигурировать подписки — указывать длительность, стоимость, пробные периоды;
  • получать список покупок в приложении

когда подключаешь покупки в приложении


​​Создание покупок


Перед тем, как начать внедрять покупки внутри приложения необходимо:


  • Оплатить Apple Developer аккаунт как физическое лицо или организация.
  • Приняты все соглашения в App Store Connect. Обновленные соглашения будут появляться сверху в личном кабинете App Store Connect, их легко заметить.

​​Предположим, что в нашем приложении будет два вида подписок: месячная и годовая. У каждой из них мы сделаем пробный период длиной в 7 дней.


​​На странице нашего приложения в App Store Connect открываем вкладку In-App Purchases → Manage. На этой вкладке отображается список созданных нами покупок. Для того, чтобы создать новую покупку, необходимо нажать на кнопку (+), которая находится около заголовка In-App Purchases.



Интерфейс создания покупок


​​Далее мы попадаем в диалог создания покупки. Наш выбор – Auto-Renewable Subscription.



Выбираем 3 пункт


​​Следующим шагом нам будет предложено создать группу подписок (Subscription Group). Группа подписок — это множество подписок с главным свойством, что пользователь не может активировать две подписки одновременно из одной группы. Дополнительно, все introductory offers такие как триал применяются ко всей группе сразу. Группы нужны для того, чтобы отделять бизнес логику внутри приложения.


Назовем нашу группу Premium Access. При добавление следующей подписки интерфейс предложит добавить ее в уже существующую группу. Позже вы можете управлять группами в меню In-App Purchases → Subscription Groups



Создание Группы подписок


Далее конфигурируем название подписки


  • Reference Name — то, как будет отображаться подписка в App Store Connect, а также в разделе Sales и в отчетах
  • Product ID — уникальный идентификатор продукта, который используется в коде приложения

Рекомендую выбирать читаемое название для Product ID, из которого можно почерпнуть максимальное количество информации. Хорошей практикой является указание длины подписки, так меньше запутаетесь потом в аналитике.



Добавим второй продукт точно так же, в итоге наш интерфейс вкладки In-App Purchases → Manage будет выглядеть следующим образом:



Две подписки в приложении


​​Конфигурация подписок


Покупки добавили, но пока они не готовы к использованию: Status выше имеет значение Missing Metadata. Это означает, что мы пока не добавили информацию по цене и периоду подписки. Сейчас мы это исправим.


​​Длительность и цены


Кликаем на продукт и конфигурируем его.



​​Здесь нам необходимо выбрать период (Subscription Duration). В нашем случае, выбираем 1 Month или 1 Year. После чего переходим в меню конфигурации цен. Можно гибко настраивать цены в зависимости от стран, но мы ограничимся автоматическими ценами, выбрав только цену в USD. App Store Connect автоматически переведет цены в другую валюту, не всегда ясно, как это происходит. Скорее всего для ваших целевых рынков вы захотите поменять цену руками.



Бесплатный пробный период (free trial)


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


Чтобы зайти в нужное нам меню, нажмите на кнопку (+) рядом с заголовком и выберите пункт Create Introductory Offer из выпадающего списка:



Выбираем список стран



Выбираем длительность оффера. Можно поставить No End Date, если не хотите себя ограничивать.



​​Последний этап – выбор типа оффера. Как видно на следующем скриншоте, существует три типа:


  • ​​Pay as you go — использование со скидкой: пользователь платит сниженную цену в течение нескольких начальных периодов, а после становится обычным подписчиком со стандартными ценами.
  • ​​Pay up front — предоплата за использование приложения: пользователь сразу платит некоторую стоимость и получает возможность использовать приложение в течение определенного времени, а затем, также становится обычным подписчиком.
  • ​​Free — бесплатный пробный период, по истечение которого пользователь может стать подписчиком.

​​Нас интересует третий вариант, а продолжительность (Duration) устанавливаем на 1 неделю.



​​Сохраняем настройки.


Получение списка SKProduct


Проверим, что мобильное приложение видит покупки и заложим фундамент для дальнейшей реализации проведения покупок.


Хорошим правилом является создание класса-синглтона для работы со StoreKit. Такой класс имеет только один инстанс во всем приложении. Множество productIdentifiers будет хранить в себе идентификаторы наших покупок:


import StoreKit

class Purchases: NSObject {
    static let `default` = Purchases()

    private let productIdentifiers = Set<String>(
        arrayLiteral: "barcode_month_subscription", "barcode_year_subscription"
    )

    private var productRequest: SKProductsRequest?

    func initialize() {
        requestProducts()
    }

    private func requestProducts() {
        // Will implement later
    }
}

Только идентификаторов недостаточно, чтобы полноценно пользоваться покупками необходимо получить: стоимость, валюту, локализацию, скидки. Возвращает всю эту и дальше большую информацию класс SKProduct. Чтобы получить эту информацию, нам необходимо сделать запрос к Apple. Создадим объект SKProductsRequest, назначим ему delegate — в методы delegate будет приходить результат запроса. Вызываем метод start(), который инициализирует асинхронную процедуру:


private func requestProducts() {
        productRequest?.cancel()

        let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
        productRequest.delegate = self
        productRequest.start()

        self.productRequest = productRequest
}

​​Если операция пройдет успешно, будет вызван метод productsRequest(didReceive response:)​, в котором и будет содержаться вся необходимая нам информация:


extension Purchases: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        guard !response.products.isEmpty else {
            print("Found 0 products")
            return
        }

        for product in response.products {
            print("Found product: \(product.productIdentifier)")
        }
    }

    func request(_ request: SKRequest, didFailWithError error: Error) {
        print("Failed to load products with error:\n \(error)")
    }
}

​​Если все прошло успешно, то в результате в лог будет выведены две строчки:


Found product: barcode_month_subscription
Found product: barcode_year_subscription

При этом, если будет ошибка, то SKProduct с таким ID не вернется. Такое может быть, если продукт по какой-то причине стал не валидный.


Про Adapty


Как видите, покупки на iOS требуют серьёзных трудозатрат, поэтому советуем познакомиться с SDK Adapty для in-app покупок на iOS. Он не только упрощает работу по добавлению покупок:


  • Встроенная аналитика позволяет быстро понять основные метрики приложения.


  • Когортный анализ отвечает на вопрос, как быстро сходится экономика.


  • А/Б тесты увеличивают выручку приложения.


  • Интеграции с внешними системами позволяют отправлять транзакции в сервисы атрибуции и продуктовой аналитики.


  • Промо-кампании уменьшают отток аудитории.


  • Open source SDK позволяет интегрировать подписки в приложение за несколько часов.


  • Серверная валидация и API для работы с другими платформами.



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


Спасибо Алексею Гончарову x401om за подготовку статьи. В следующей статье мы разберемся, как проводить покупки внутри приложения: открывать/закрывать транзакции, обрабатывать ошибки, валидировать receipt и другое.


Читайте дальше iOS in-app purchases: Инициализация и обработка покупок

Tags:
Hubs:
+8
Comments 1
Comments Comments 1

Articles

Information

Website
adapty.io
Registered
Founded
Employees
11–30 employees
Location
США