Привет, это Ренат из Apphud. Если у вас есть приложение с авто-возобновляемыми подписками или вы собираетесь выпустить свое первое приложение с подписками, то рано или поздно перед вами встанет вопрос, как правильно пересылать выручку с подписок в свои аналитики. Поговорим об этом. Выручку с подписок нужно считать, чтобы отправлять ее в продуктовые аналитики и системы атрибуции, которые не умеют этого делать: Amplitude, Mixpanel, AppsFlyer, Branch, Adjust. Вам пригодится свой сервер, чтобы отслеживать подписочные события: конвертации, продления, отмены – и отправлять их в вашу аналитику. К сожалению, не все продуктовые аналитики поддерживают Server-to-Server API. Например, Firebase или Flurry. У них нет API для отправки событий со своего сервера, и они не поддерживают трекинг подписок. Как говорится, и сами не делают, и другим не дают. В этой статье я расскажу, с какими трудностями вы можете столкнуться, если решите делать это самостоятельно. Вообще, аналитика в App Store Connect не является аналитикой вовсе. Вы можете увидеть лишь общую картину: конверсии, количество событий и retention. Apple даже и не претендует на звание полноценного конкурента продуктовым аналитикам. App Store Connect примитивен: 
Обзор подписок в App Store Connect Основная проблема – нельзя отправлять подписочные события, когда приложение не запущено. Списание средств случается в начале каждого периода подписки, и не известно, когда пользователь запустит приложение. Это может случиться через день, через неделю или никогда. В последнем случае ничего отправлено не будет. На первый взгляд, достаточно только двух событий: начало триала и списание средств. В действительности, событий много и происходят они часто. Вы можете составить набор из 5 событий, а можете из 20. Все зависит от ваших нужд. Ниже указан примерный набор событий, связанных с подписками. Продления
Обычное продление, активация триала, оформление вводного и промо-предложения (бесплатного и платного). Конвертация в регулярную подписку
Конвертация триала, платного вводного и промо-предложения (бесплатного и платного). Истечения
истечение регулярной подписки, истечение триала, истечение платного вводного предложения, истечение бесплатного промо-предложения, истечение платного промо-предложения Возвраты
возврат регулярной подписки, возврат платного вводного предложения, возврат платного промо-предложения Прочие события
включение возобновления, отключение возобновления, переход в льготный период, апгрейд подписки Довольно много событий, не так ли? Apphud отслеживает 19 типов событий. Вы можете задать каждому событию свое название и объединить некоторые списания средств под одним событием. Самая большая трудность в том, что в чеке Apple не указывает сумму списания. Возможно Apple когда-нибудь добавит это в чек, но пока приходится обрабатывать вручную следующие ситуации. При повышении стоимости подписки разработчик может указать, применять ли новые цены для новых подписчиков. Если выбрано применять, то тут все просто. Подписка просто истечет, если пользователь отказался от повышения цены. А если выбрано не применять, то для старых подписчиков необходимо использовать те цены, на которые они изначально подписались. StoreKit не возвращает информацию о том, по какой цене пользователь оформил подписку, поэтому нужно где-то хранить цену для каждого пользователя. Оформив подписку, пользователь сам может сменить ее длительность и цену в настройках подписки в приложении App Store. Нужно проверять идентификатор продукта при продлении подписки и доставать соответствующую ему цену. Смена подписки бывает трех видов: даунгрейд, кросс-грейд и апгрейд. Об этом мы написали отдельную статью на хабре, также можете почитать официальную документацию здесь. Да, бывает и такое. При кросс-грейдах и апгрейдах подписки неиспользованная оплаченная часть вовзращается пользователю, и сразу же списывается стоимость новой подписки. 
Пример пользователя в Apphud, который сменил подписку c возвратом неиспользованной части В App Store Connect может создать для одной подписки разные цены для разных стран. Поэтому нужно хранить цены для каждой страны отдельно и использовать цену, соответствующую стране пользователя. Не все продуктовые аналитики поддерживают конвертацию валют. Необходимо конвертировать цены в базовую валюту (например, USD) и везде использовать только ее. В Apphud мы регулярно обновляем курсы валют, используя Open Exchange Rates. Комиссия Apple составляет 30%. Но после года пользования подпиской, комиссия Apple снижается до 15%. Важный нюанс: разрывы в подписке суммой более 60 дней сбрасывают дату непрерывного пользования. Это значит, что триал и платные вводные предложения могут быть не только в начале подписки, их можно оформить и при возвращении в подписку, если ранее пользователь не оформлял вводное предложение.  Необходимо хранить на сервере цены и тип вводных предложения для каждой страны: триал, предоплата или оплата по мере использования. Подробнее о вводных предложениях читайте тут. Промо-предложения могут чередоваться и сменять друг друга, потому что могут быть использованы неограниченное число раз. Нужно хранить не только цену основной подписки, но и цены всех промо-предложений для каждой страны. Подробнее о промо-предложениях читайте тут. 
Пример пользователя в Apphud, который оформил подписку с вводным предложением, а затем воспользовался промо-предложением. Нужно вычислять транзакции, по которым был произведен возврат, и отправлять в аналитики отрицательные суммы. Пользователь может запустить приложение с другого устройства. Важно правильно определять user ID, под которым послать данные в аналитику. В некоторых случаях придется объединять пользователей на сервере. Продления должны отправляться по корректному user ID. Напоследок, нужно сохранять чеки пользователей и проверять их перед предполагаемой датой истечения и при событиях, которые присылает Apple в своих уведомлениях. Одна из функций Apphud – интеграции, позволяющие отправлять подписочные события в продуктовые аналитики через наш сервер. Чтобы включить интеграции с Amplitude или Mixpanel, нужно добавить API key в настройках Apphud. После добавления интеграции в вашу аналитику будут приходить события в реальном времени. Вы сможете узнать ARPU, MRR, показатели конверсии триала, отписок и др. И, конечно, связать все это с вашими собственными событиями внутри приложения. Еще вам будут доступны показатели по каждому пользователю: потраченная им сумма, количество транзакций и другие. 
Пример пользователя в Mixpanel после добавления интеграции в Apphud Если вы рекламируете ваше приложение или собираетесь это делать, то интеграция Apphud с AppsFlyer или Branch поможет вам отследить эффективность ваших рекламных кампаний. Вы сможете сравнивать каналы трафика по общей выручке с подписок и другим метрикам. 
Выручка с подписок по разным каналам трафика в Branch Еще вы можете получать информацию о новых триалах или продлениях в реальном времени в Slack или Telegram. Интеграция займет не более одной минуты. Считать точную выручку с подписок самостоятельно сложно. Кроме наличия собственного сервера, вам нужно будет правильно вычислять сумму списания. На реализацию у вас уйдет много времени и ресурсов, которые стоит потратить на улучшение продукта. Apphud поможет вам правильно посчитать выручку с подписок и перешлет их в ваши аналитики. Основатель Apphud.com | Упрощаем подписки в iOS