Уровни авто-возобновляемых подписок в iOS-приложении

  • Tutorial

image


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


Что такое уровень подписки?


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



Два уровня подписки в приложении газеты The New York Times.


Как настроить уровни подписки?


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



Перетаскивание подписки на уровень выше.


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


Изменение подписки


Пользователь может сменить подписку в приложении App Store после ее оформления. Он может повысить (апгрейд), понизить (даунгрейд) уровень или сменить подписку в пределах одного уровня (кроссгрейд).


Повышение уровня подписки (апгрейд)


Если текущая подписка пользователя активна, то он немедленно перейдет на новый тариф, а неиспользованная часть оплаченного периода вернется на карту.



Уведомление о том, что при апгрейде подписки возвратится часть средств.


В конце статьи рассмотрим, как отлавливать повышение уровня подписки и вычислять сумму возврата.


Понижение уровня подписки (даунгрейд)


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


Смена подписки в рамках одного уровня (кроссгрейд)


Это распространённая ситуация, она делится на два типа: смена подписки одной длительности и разных. При смене подписки с другой длительностью произойдет то же самое, что и при даунгрейде: подписка применится по окончании текущего оплаченного периода.


Если длительности совпадают, текущая подписка отменится и немедленно начнется новая. Деньги спишутся за новую подписку, а неиспользованная часть старой подписки вернется пользователю.


Как узнать о смене подписки на сервере?


Можно валидировать App Store чек или слушать серверные уведомления Apple.


Во время проверки каждой новой транзакции нужно смотреть, не изменился ли product_id. Изменение product_id говорит о том, что пользователь сменил подписку в настройках App Store.


Кроме этого можно смотреть на значение auto_renew_product_id в pending_renewal_info. Оно поможет узнать об изменении product_id еще до вступления новой подписки в силу.


Если у вас настроены серверные уведомления, слушайте уведомление DID_CHANGE_RENEWAL_PREF, которое вызывается при смене продукта. Можно ограничиться этим уведомлением и достать новый product_id из параметров запроса, а можно выполнить повторную проверку App Store чека. Во последнем случае серверные уведомления Apple будут служить только триггером для внеплановой проверки.


Как вычислить сумму возврата при апгрейдах?


Чтобы понять, был ли апгрейд, нужно проверить значение поля is_upgraded. Значение true говорит о том, что следующая транзакция относится уже к новой подписке.


Заметим, is_upgraded будет равно true еще и при смене подписки с одинаковыми длительностями в рамках одного уровня. То есть is_upgraded = true означает не повышение уровня, а факт того, что была произведена смена подписки с возвратом средств.


Кроме поля is_upgraded в этой транзакции появится поле cancellation_date, которое указывает на время отмены подписки. Оно равно или почти совпадает с датой начала следующей транзакции.


Получается, поле cancellation_date появляется не только при возврате подписки, но и при апгрейде.


Заметим, что при апгрейдах в Sandbox-подписках поле cancellation_date отсутствует. Поэтому при тестировании в Sandbox нужно вместо cancellation_date использовать purchase_date следующей транзакции. Подробнее о cancellation date можно почитать в документации Apple.


Чтобы вычислить сумму, которая должна вернуться пользователю, нужно разделить неиспользованный период на полный период предыдущей подписки и умножить на ее стоимость:


# upgrade_date is `cancellation_date` in prodiction or `purchase_date` of new transaction in sandbox
# to_f converts date to float timestamp value
prorate_amount = price * (upgrade_date.to_f - cancellation_date.to_f) / (expires_date.to_f - purchase_date.to_f)

Как это реализовано в Apphud?


Apphud автоматически отслеживает изменения в подписках и вычисляет возврат неиспользованной части.



Пример смены подписки в рамках одного уровня с возвратом части средств в Apphud.


От iOS-разработчика не требуется самому обрабатывать эти ситуации. Нужно только интегрировать SDK, остальное сделает Apphud.


Заключение


Оказывается, просто обновлять значение product_id недостаточно: нужно также учитывать возврат средств при апгрейдах. Работа с подписками требует обработки многих пограничных ситуаций. Мы делаем Apphud – сервис, который сильно упрощает работу с подписками. Можно начать пользоваться бесплатно. Регистрация – по этой ссылке.

Apphud
Сервис для работы с подписками в iOS-приложениях
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 2

    0
    Apphud случаем не планирует поддержку Google Play и Amazon для андроида?
      0
      Добрый день! Планируем в начале следующего года.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое