Интеграции с аналитическими системами
Adapty отправляет все события подписок в аналитические сервисы, такие как Amplitude, Mixpanel и AppMetrica. Также можно отправлять события на ваш сервер через интеграцию с webhook. Самое удобное здесь то, что вам не нужно отправлять события самостоятельно — мы сделаем это за вас. Просто настройте интеграцию в дашборде Adapty.
Adapty поддерживает интеграцию со следующими сторонними аналитическими сервисами:
Не нашли своего провайдера аналитики?
Дайте нам знать! Создайте запрос на добавление функции, и мы рассмотрим его.
Свойства событий
Webhook-события отправляются в формате JSON. Все события имеют одинаковую структуру, но набор полей зависит от типа события, стора и вашей конфигурации.
Adapty конвертирует другие валюты в USD по курсу currencylayer.com (обновляется каждые 8 часов). Курс фиксируется на момент транзакции — последующие изменения не влияют на результат конвертации.
| Свойство | Тип | Описание |
|---|---|---|
| profile_id | uuid | ID пользователя Adapty. |
| currency | str | Локальная валюта (по умолчанию USD). |
| price_usd | float | Цена продукта до вычета комиссии Apple/Google. Выручка. |
| proceeds_usd | float | Цена продукта после вычета комиссии Apple/Google. Чистая выручка. |
| net_revenue_usd | float | Чистый доход (после вычета комиссии Apple/Google и налогов) в USD. Может быть пустым. |
| price_local | float | Цена продукта до вычета комиссии Apple/Google в локальной валюте. Выручка. |
| proceeds_local | float | Цена продукта после вычета комиссии Apple/Google в локальной валюте. Чистая выручка. |
| transaction_id | str | Уникальный идентификатор транзакции, например покупки или продления. |
| original_transaction_id | str | Идентификатор транзакции исходной покупки. |
| purchase_date | ISO 8601 date | Дата и время покупки продукта. |
| original_purchase_date | ISO 8601 date | Дата и время исходной покупки. |
| environment | str | Может быть Sandbox или Production. |
| vendor_product_id | str | ID продукта в Apple App Store, Google Play Store или Stripe. Для плана с обязательством на 12 месяцев значение имеет вид <product_id>:monthly. |
| base_plan_id | str | ID базового плана в Google Play Store или ID цены в Stripe. |
| event_datetime | ISO 8601 date | Дата и время события. |
| store | str | Может быть app_store или play_store. |
| trial_duration | str | Длительность пробного периода в днях. Передаётся в формате ” days”, например “7 days”. |
| cancellation_reason | str | Причина отмены подписки пользователем. Возможные значения: iOS и Android voluntarily_cancelled, billing_error, refund iOS price_increase, product_was_not_available, unknown Android new_subscription_replace, cancelled_by_developer |
| subscription_expires_at | ISO 8601 date | Дата истечения подписки. Обычно в будущем. |
| consecutive_payments | int | Количество периодов, в течение которых пользователь непрерывно подписан. Включает текущий период. |
| rate_after_first_year | bool | Булево значение, указывающее, что подписка соответствует условиям пониженной комиссии (как правило, 15%) после одного года непрерывного продления. Размер комиссии зависит от участия в программе и страны. Подробнее см. Комиссия стора и налоги. |
| promotional_offer_id | str | ID promotional offer, указанный в разделе Product дашборда Adapty. |
| store_offer_category | str | Может быть introductory или promotional. |
| store_offer_discount_type | str | Может быть free_trial, pay_as_you_go или pay_up_front. |
| paywall_name | str | Название пейвола, с которого была совершена транзакция. Для флоу — ID экрана пейвола (scr_...). |
| paywall_revision | int | Ревизия пейвола, с которого была совершена транзакция. Значение равно 1. |
| developer_id | str | Developer (SDK) ID плейсмента, с которого была совершена транзакция. |
| ab_test_name | str | Название A/B-теста, с которого была совершена транзакция. Для кросс-плейсментного A/B-теста — название теста на одном плейсменте (<test name> child-N). Для группировки кросс-плейсментного теста по плейсментам используйте ab_test_id. |
| ab_test_revision | int | Ревизия A/B-теста, с которого была совершена транзакция. Значение равно 1. |
| ab_test_id | uuid | ID A/B-теста, с которого была совершена транзакция. Для кросс-плейсментного A/B-теста одинаков на всех плейсментах. |
| ab_test_parent_name | str | Название кросс-плейсментного A/B-теста. Присутствует только для кросс-плейсментных A/B-тестов. |
| ab_test_variant_id | uuid | ID варианта A/B-теста, с которого была совершена транзакция. Используйте для разбивки транзакций по вариантам теста. |
| ab_test_variant_name | str | Название варианта A/B-теста. |
| flow_id | uuid | ID флоу, с которого была совершена транзакция. |
| flow_name | str | Название флоу, с которого была совершена транзакция. |
| flow_variation_id | uuid | ID варианта флоу на данном плейсменте, совпадает с flow.variationId в SDK. |
| cohort_name | str | Название аудитории, к которой относится профиль. |
| profile_event_id | uuid | Уникальный ID события, который можно использовать для дедупликации. |
| store_country | str | Страна, переданная стором. |
| profile_ip_address | str | IP профиля (может быть IPv4 или IPv6; IPv4 предпочтительнее при наличии). Обновляется при каждой смене IP устройства. |
| profile_country | str | Определяется Adapty на основе IP профиля. |
| profile_total_revenue_usd | float | Общая выручка по профилю с учётом возвратов. |
| variation_id | uuid | Уникальный ID пейвола, в котором была совершена покупка. Для флоу — ID экрана пейвола внутри флоу, а не ID варианта A/B-теста. |
| access_level_id | str | ID уровня доступа с оплатой. |
| is_active | bool | Булево значение, указывающее, активен ли платный уровень доступа для профиля. |
| will_renew | bool | Булево значение, указывающее, будет ли продлён платный уровень доступа. |
| is_refund | bool | Булево значение, указывающее, возвращена ли транзакция. |
| is_lifetime | bool | Булево значение, указывающее, является ли платный уровень доступа пожизненным. |
| is_in_grace_period | bool | Булево значение, указывающее, находится ли профиль в льготном периоде. |
| starts_at | ISO 8601 date | Дата и время начала платного уровня доступа для пользователя. |
| renewed_at | ISO 8601 date | Дата и время начала текущего периода платного доступа. До первого продления совпадает с activated_at. |
| expires_at | ISO 8601 date | Дата и время истечения платного доступа. |
| activated_at | ISO 8601 date | Дата и время активации платного доступа. |
| billing_issue_detected_at | ISO 8601 date | Дата и время обнаружения проблемы с оплатой. |
| profile_has_access_level | Bool | Булево значение, указывающее, есть ли у профиля активный уровень доступа (только для вебхуков). |
У каждого события есть следующие свойства:
transaction_id, original_transaction_id, purchase_date, original_purchase_date, environment, vendor_product_id, event_datetime, store.
Кроме того, у некоторых событий есть дополнительные свойства. Для событий subscription_refunded и non_subscription_purchase_refunded необходимо передавать значения price_usd и proceeds_usd в качестве дополнительных свойств.
| Название события | Свойства |
|---|---|
| subscription_initial_purchase | price_usd, proceeds_usd, subscription_expires_at, consecutive_payments, rate_after_first_year, trial_duration |
| subscription_renewed | price_usd, proceeds_usd, subscription_expires_at, consecutive_payments, rate_after_first_year, trial_duration |
| subscription_cancelled | cancellation_reason, trial_duration |
| trial_started | subscription_expires_at, trial_duration |
| trial_converted | price_usd, proceeds_usd, subscription_expires_at, consecutive_payments, rate_after_first_year, trial_duration |
| trial_cancelled | cancellation_reason, trial_duration |
| non_subscription_purchase | price_usd, proceeds_usd |
| billing_issue_detected | subscription_expires_at, trial_duration |
| entered_grace_period | subscription_expires_at, trial_duration |
Пример события
{
"price_usd": 9.99,
"proceeds_usd": 6.99,
"transaction_id": "1000000628581600",
"original_transaction_id": "1000000628581600",
"purchase_date": "2020-02-18T18:40:22.000000+0000",
"original_purchase_date": "2020-02-18T18:40:22.000000+0000",
"environment": "Sandbox",
"vendor_product_id": "premium",
"event_datetime": "2020-02-18T18:40:22.000000+0000",
"store": "app_store"
}
Adapty отправляет события на ваш сервер и в сторонние аналитические системы.
Свойство profile_ip_address синхронизируется с текущим IP-адресом устройства. При каждом обращении к серверам Adapty от SDK IP обновляется, если он отличается от того, что уже хранится в записи.
Настройка идентификатора профиля
- Задайте идентификатор профиля для выбранной аналитики с помощью инструкций для инструкции по установке атрибутов пользователя в вашем приложении iOS, Android, React Native, Flutter и Unity .
Предотвращение дублирования
Не забудьте отключить отправку событий подписок с устройств и вашего сервера, чтобы избежать дублирования.
Отключение внешней аналитики для конкретного пользователя
Иногда нужно прекратить отправку аналитических событий для конкретного пользователя — например, если в приложении есть возможность отказаться от аналитики.
Чтобы отключить внешнюю аналитику для пользователя, используйте метод updateProfile(). Создайте объект AdaptyProfileParameters.Builder и задайте соответствующее значение.
Когда внешняя аналитика заблокирована, Adapty перестаёт отправлять любые события во все интеграции для этого пользователя. Если нужно отключить интеграцию для всех пользователей приложения, просто выключите её в дашборде Adapty.
Блокировка внешней аналитики останавливает доставку событий во все интеграции для этого пользователя, включая пользовательские вебхуки. Не используйте её, если ваш бэкенд опирается на события вебхуков для управления доступом этого пользователя.
Настройка не имеет обратной силы: события, созданные до её применения, всё равно будут доставлены. Она также не влияет на собственную аналитику Adapty — транзакции пользователя по-прежнему учитываются в графиках дашборда.