В сентябре Apple добавили поддержку льготных периодов (или grace-периодов) для возобновляемых подписок. Она позволяет пользователям, оформившим подписку, сохранить доступ к платному сервису, даже если ее не удалось продлить вовремя из-за проблем с оплатой. Подписка возобновится, когда пользователь обновит способ оплаты.
Длительность льготного периода зависит от длительности подписки. Для недельной подписки он равен 6 дням, для всех остальных – 16 дням.
Grace можно активировать в App Store Connect там, где настраиваются встроенные покупки. Но поддержку льготного периода в самом приложении реализовать тоже придется.
Как узнать, что пользователь находится в льготном периоде?
Для этого потребуется валидация чека App Store, чтобы получить JSON данные. Конечно, лучше использовать свой сервер для валидации чеков во избежание man-in-the-middle атак, как рекомендует Apple.
Валидации App Store чеков мы посвятили отдельную статью.
Если произойдет проблема с оплатой при включенном grace-периоде, в JSON в pending_renewal_info
появится новое поле: grace_period_expires_date
. Эта дата получается путем добавления 6 или 16 дней к дате истечения последней транзакции.
Если текущая дата находится между датой истечения последней транзакции и датой истечения грейс периода, то пользователь находится в grace-периоде. Значение expiration_intent
также должно быть равно 2
.
Если пользователь обновит платежные данные, то появится новая транзакция в массиве latest_receipt_info
и поле grace_period_expires_date
исчезнет из pending_renewal_info
.
А если пользователь не исправит проблему, то по истечении grace подписка должна считаться истекшей и вы должны заблокировать пользователю доступ к премиум-функциям.
Разница между грейс периодом и is_in_billing_retry_period
Кроме поля grace-периода, остался и is_in_billing_retry_period
в pending_renewal_info
. Если значение равно 1
, то у пользователя возникла проблема с оплатой, и он не находится в льготном периоде. Отличите в том, что тут вы сами решаете, давать платный функционал или нет. Получается, что каждый разработчик до этого времени сам выбирал как поступать.
С включенным grace-периодом Apple обязывает всех разработчиков давать премиум.
Уведомляйте пользователя о проблемах с оплатой в приложении
В обоих случаях рекомендуем уведомлять пользователя о проблемах прямо в приложении и предлагать ему обновить платежные данные.
Вы можете отобразить пользователю баннер или полноразмерный экран с просьбой обновить платежную информацию и кнопку перехода:
// example of navigating user to account billing
func handleOpenBilling(){
let urlString = "https://apps.apple.com/account/billing"
if let url = URL(string: urlString), UIApplication.shared.canOpenURL(url){ UIApplication.shared.open(url)
}
В Apphud это уже сделано за вас
Если возникнет проблема с оплатой, пользователь получит пуш-уведомление с просьбой обновить платежную информацию. А если уведомления были отключены, то экран появится при следующем запуске приложения.
Экран обновления платежной информации
А еще Apphud учитывает льготный период и возвращает статус подписки, как активный. Если у вас нет времени реализовать эту фичу самостоятельно, попробуйте наш сервис по ссылке.
Удерживать пользователей важно как никогда
Уменьшать количество отписок и удерживать пользователей стало важно как никогда. С выходом iOS 13 Apple упростила механизм отписки: предложение отменить подписку показывается при удалении приложения, а экран с настройками стал еще доступнее:
Настройки подписок в iOS 13
Это означает, что конверсия в платные подписки снизится, потому что пользователи реже будут забывать отменять подписку. И вы наверняка будете искать решение для увеличения прибыли с текущих пользователей.
Правила в Apphud
Механика решения проблем с оплатой у нас называется "Правилом". Мы рассмотрели лишь одно из правил. У нас есть и другие правила, которые помогут вам увеличить прибыль и удержать пользователей. Подробнее – в нашем блоге.