Русский
Русский
English
Статистика
Реклама

Apple Grace Period и Billing Retry статусы при обработке чеков пользователей


Привет. В этой статье мы поговорим про такую частую проблему, как ошибка оплаты в мобильных приложениях с подписочной моделью. Если взять средние данные из системы Qonversion, то 15-20% триалов переходят в Billing Issue. Из них около 15% возвращаются в платное состояние. Поддержка Grace Period позволит улучшить пользовательский опыт и повысить процент возврата в платное состояние.


План:


  • Как устроен Billing Retry?
  • Что такое Grace Period?
  • Продуктовые подходы для работы с Billing Retry

Как устроен Billing Retry?


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



За некоторое время до завершения очередного оплаченного периода, Apple совершает попытку списать средства со счёта пользователя. Если при этом возникает ошибка, пользователь переходит в состояние Billing Retry. В таком состоянии он может находиться до 60 дней. При этом Apple периодически совершает попытку произвести оплату за следующий период подписки. Всё это время доступ к приложению для пользователя закрыт. На примере видно, что через 10 дней после успешного совершения оплаты возобновляется цикл списания средств. Всё это усложняет расчёт LTV, а также приводит к ухудшению пользовательского опыта.


При проверке чека пользователя мы обнаружим поле is_in_billing_retry_period и expiration_intent:


"pending_renewal_info": [    {        "expiration_intent": "2",        "auto_renew_product_id": "product.99.trial.3d",        "original_transaction_id": "10000000306492965",        "is_in_billing_retry_period": "1",        "product_id": "product.99.trial.3d",        "auto_renew_status": "1"    }]

Эти поля сообщают нам о неудачной попытке списать средства.


Что такое Grace Period?


Для улучшения пользовательского опыта в течение периода, когда Apple не может совершить списание средств за следующий автовозобновляемый период, ваше приложение может предоставлять доступ к контенту. Для этого вам необходимо использовать Grace Period. Grace Period включается для авто-возобновляемых подписок Enable Billing Grace Period for Auto-Renewable Subscriptions, в этом случае пользователь сохраняет полный контроль над приложением, пока Apple пытается произвести оплату.


Продолжительность Grace Period зависит от продолжительности вашей подписки:



Давайте рассмотрим два примера:


Пример 1: успешное списание в течение Grace Period



За некоторое время до завершения первого автовозобновляемого периода, Apple совершает неудачную попытку списать средства. Такой результат при отключенном Grace Period означал был моментальный переход в состояние Billing Retry с заблокированным доступом к приложению. Однако при включённом Grace Period, начинается следующий автовозобновляемый период, а пользователь продолжает сохранять доступ к контенту. Через некоторое время Apple совершает успешное списание средств, таким образом существующий цикл оплаты не прерывается.


Пример 2: неудачное списание в течение Grace Period



Во втором примере Apple не удаётся списать средства в течение Grace Period, что приводит к изменению текущего цикла списаний, а пользователь переходит в статус Billing Retry с заблокированным доступом. Через некоторое время Apple удаётся произвести списание денежных средств, при этом запускается новый автовозобновляемый период со дня списания.


После включения Grace Period в настройках приложения, JSON response, который вы получаете при валидации чека будет содержать дополнительное поле grace_period_expires_date_ms, именно это поле и означает новый период завершения доступа к контенту в приложении.


"pending_renewal_info": [    {        "expiration_intent": "2",        "grace_period_expires_date": "2020-09-05 23:41:42 Etc/GMT",        "auto_renew_product_id": "product.99.trial.3d",        "original_transaction_id": "10000000306492965",        "is_in_billing_retry_period": "1",        "grace_period_expires_date_pst": "2020-09-05 16:41:42 America/Los_Angeles",        "product_id": "product.99.trial.3d",        "grace_period_expires_date_ms": "1599349302000",        "auto_renew_status": "1"    }]

Как только платеж будет успешно совершён, поле исчезнет из чека вместе с is_in_billing_retry_period. В этом случае актуальным по истечению срока действия подписки станет поле expires_date_ms
которое нужно брать уже из receipt.in_app


"in_app": [            {                "quantity": "1",                "product_id": "product.99.trial.3d",                "transaction_id": "0000000306492966",                "original_transaction_id": "0000000306492965",                "purchase_date": "2020-08-25 02:53:10 Etc/GMT",                "purchase_date_ms": "1598323990000",                "purchase_date_pst": "2020-08-24 19:53:10 America/Los_Angeles",                "original_purchase_date": "2020-08-25 02:53:12 Etc/GMT",                "original_purchase_date_ms": "1598323992000",                "original_purchase_date_pst": "2020-08-24 19:53:12 America/Los_Angeles",                "expires_date": "2020-09-25 02:53:10 Etc/GMT",                "expires_date_ms": "1601002390000",                "expires_date_pst": "2020-09-24 19:53:10 America/Los_Angeles",                "web_order_line_item_id": "000000003253190",                "is_trial_period": "false",                "is_in_intro_offer_period": "false"            }        ]

Если платёж не будет успешно совершен после истечения 60 дней, поля is_in_billing_retry_period и grace_period_expires_date исчезнут из чека, и можно будет использовать expires_date_ms, однако в этом случае подписка будет истёкшей, а поле auto_renew_status будет равно 0


Продуктовые подходы для работы с Billing Retry и Grace Period


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


Для этого вам необходимо обрабатывать рецепт на серверной стороне исходя из изменений выше или использовать готовые решения.


Qonversion.checkPermissions { (permissions, error) in  if let error = error {    // handle error    return  }  if let premium = permissions["premium"], premium.isActive {    switch premium.renewState {       case .billingIssue:         // Grace period: permission is active, but there was some billing issue.         // Prompt the user to update the payment method.         break       default: break    }  }}
Источник: habr.com
К списку статей
Опубликовано: 09.09.2020 16:16:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка под ios

Монетизация мобильных приложений

Аналитика мобильных приложений

Ios

Subscriptions

Billing issue

Apple grace period

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru