Измерение доходов от внутренних покупок (IAP) и подписки

Премиум

Краткий обзор. Автоматическая проверка и измерение доходов от внутренних покупок и подписки с автопродлением для получения полной картины жизненных циклов подписчика и точного измерения ROAS.

Обзор

Рекламодатели могут использовать проверенные данные о доходах от внутренних покупок (IAP) и подписки для следующих измерений:

  • Все доходы от внутренних покупок продуктов и подписки с управлением посредством App Store Connect (iOS) или Google Play Console (Android).
  • Возвраты.
  • Доходы от незавершенных и отложенных транзакций (Android).
  • Связанные с подпиской события, которые происходят внутри вашего приложения и за его пределами.

Решение для измерения доходов от внутренних покупок и подписки также:

  • Исключает запись дублированных транзакций. В случае iOS оно также позволяет избежать дублирования записей при использовании семейного доступа.
  • Позволяет AppsFlyer передавать вам (рекламодателю) транзакции Apple App Store.
  • Предоставляет данные об истинном доходе, то есть данные о чистом доходе за вычетом комиссии магазина и налогов.

Источники данных о покупках и подписках:

  • Коннектор SDK для покупок в AppsFlyer для Android и iOS (с Unity Wrapper).
  • Уведомления серверов App Store и Google Play (RTDN), отправленные в AppsFlyer.

Данные о доходе от покупок и подписки доступны на дэшбордах и в отчетах AppsFlyer. Их также можно передавать партнерам через постбэки.

Факторы, которые необходимо учитывать:

  • Если вы используете это решение для измерения доходов от внутренних покупок и подписки, вы не должны отправлять внутренние события покупок или выполнять validateAndLogInAppPurchase, поскольку это приведен к дублированию дохода в отчетах.
  • Решение для измерения доходов от подписки начнет регистрировать изменения жизненного цикла имеющихся подписчиков, как только они запустят версию приложения, включающую коннектор SDK для измерения доходов от покупок.

Сценарий:

  1. Пользователь делает внутреннюю покупку или выполняет автоматическое продление подписки.
  2. Приложение делает транзакцию в магазине приложений.
  3. Коннектор SDK AppsFlyer для измерения дохода от покупок автоматически определяет покупку и отправляет ее полезные данные в AppsFlyer для проверки и регистрации.
  4. AppsFlyer проверяет покупку в соответствующем магазине, чтобы убедиться, что она не является мошеннической.
    • После успешной проверки AppsFlyer регистрирует покупку или подписку.
    • Если проверка чека не пройдена, событие отображается в отчете по сырым данным как заблокированное внутреннее событие (доступно для подписчиков Protect360). 
  5. AppsFlyer передает ответ коннектору SDK, который в свою очередь передает ответ по проверке чека (пройдена или не пройдена) в приложение.
  6. Все входящие уведомления сервера также обрабатываются в соответствии с бизнес-логикой AppsFlyer для доходов от покупки или подписки.
    • Уведомления в отношении транзакций, ранее учтенных через коннектор SDK, проходят проверку и обработку и приводят к внутреннему созданию покупки или события жизненного цикла.
    • Уведомления в отношении неизвестных транзакций игнорируются.
    • В iOS все уведомления сервера можно перенаправить на собственные сервера.

 Процесс интеграции доходов от IAP и подписки

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

Шаг Действия
1

Настройте уведомления о доходах от IAP и подписки в Google Play.

2

Настройте уведомления о доходах от IAP и подписки в iOS App Store.

3
4

Интегрируйте API для налога на истинный доход. Это необходимо только в том случае, если вы хотите изменить налоговые ставки по умолчанию. В противном случае налоги сообщаются для любой транзакции, измеряемой ROI360.

5

Протестируйте интеграцию, чтобы проверить следующее:

  • Коннектор SDK интегрирован должным образом.
  • Уведомления сервера правильно настроены, и AppsFlyer получает их должным образом.
6

Выпустите версии приложений для Android и iOS с коннектором SDK для измерения доходов от покупок.

Шаг 1: Настройка уведомлений из Google Play

Прежде чем начать:

  • Настройка измерения доходов от внутренних покупок и подписки состоит из шагов, выполненных в Google Cloud Platform и в пользовательском интерфейсе AppsFlyer. Мы рекомендуем держать вкладки Google Cloud Platform и AppsFlyer открытыми в процессе настройки.
  • Для настройки в пользовательском интерфейсе AppsFlyer требуются права администратора.

Для настройки уведомлений из Google Play следуйте инструкциям на вкладке ниже:

1.1 Привяжите аккаунт разработчика Google Play к проекту Google Cloud

  1. В Google Play Console зайдите в свой аккаунт Google Play Developer.
  2. Привяжите аккаунт к своему проекту Google Cloud. Инструкции приведены в этом разделе справки Google.
  3. Активируйте API Google Play Developer. Инструкции приведены в этом разделе справки Google.

1.2 Создайте аккаунт службы

  1. Зайдите в Google Cloud и откройте проект, привязанный при выполнении шага 1.1.
  2. В своем проекте перейдите в раздел IAM and Admin (IAM и администратор) > Service Accounts (Аккаунты служб) и нажмите  Create service account (Создать аккаунт службы). 

01.png

  1. На странице Создание аккаунта службы заполните шаг Детали аккаунта службы.

02.png

  1. Нажмите Создать и продолжить.
  2. На шаге Предоставить аккаунту службы доступ к проекту выберите роль Подписчик Pub/sub.

03.png

  1. Нажмите Продолжить > Готово.

1.3 Загрузите закрытый ключ аккаунта.

  1. На странице Аккаунты службы найдите соответствующий аккаунт, нажмите  ellipsis.png  и затем Управлять ключами.

08.png

  1. На вкладке Ключи страницы аккаунта службы нажмите ДОБАВИТЬ КЛЮЧ > Создать новый ключ.

10.png

  1. В диалоговом окне Создание закрытого ключа выберите тип ключа JSON.
  2. Нажмите Создать. Загрузится файл JSON закрытого ключа.
  3. В AppsFlyer перейдите в ROI360 > Настройки дохода.

41.png

  1. Выберите свое приложение из списка.
  2. На вкладке Покупки и подписки нажмите upload-2.png, чтобы загрузить файл JSON. 

40.png

 

1.4 Установите разрешения на доступ к API

  1. В Google Play Console перейдите в раздел Пользователи и разрешения.
  2. В списке Пользователи и разрешения найдите аккаунт службы, созданный в п. 1.2, и нажмите Управление.

14.png

  1. В разделе Разрешения перейдите в Разрешения аккаунта и выберите оба варианта:
    • Просмотр финансовых данных.
    • Управление заказами и подписками.

15.png

  1. Нажмите Пригласить пользователя, а затем Отправить приглашение.

Либо шаг 1.5: Отправка уведомлений Google Play непосредственно в AppsFlyer.

Выберите один из двух методов, используемых для получения данных о доходах от IAP и подписки от Google Play.

Одно из:

  • Создайте тему, в которой AppsFlyer будет напрямую получать уведомления RTDN из Google Play (продолжение в этом шаге).

или

  • Установите AppsFlyer в качестве подписчика на уже существующую тему PUB/SUB (перейдите к следующему шагу).

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

  1. В AppsFlyer перейдите в ROI360 > Настройки доходов > Покупки и подписка и выберите Разрешить теме AppsFlyer получать RTDN сообщения непосредственно от Google.

42.png

  1. Скопируйте тему AppsFlyer в буфер обмена.
  2. В Google Play Console > Все приложения выберите свое приложение. Откроется дэшборд.

18.png

  1. Перейдите в раздел Настройка монетизации и в разделе Биллинг Google Play в поле Название темы вставьте адрес темы AppsFlyer, который вы скопировали в подшаге 2.

19.png

  1. Нажмите Сохранить изменения.

Либо шаг 1.6: Перенаправление уведомлений Google Play в AppsFlyer.

Другой способ получения уведомлений о IAP и подписке применим, когда у вас уже есть тема, которая получает уведомления из Google Play. В этом случае вместо того, чтобы создавать новую тему (как в предыдущем шаге), вы можете использовать AppsFlyer в качестве подписчика на уже существующую тему PUB/SUB.

Чтобы установить AppsFlyer в качестве подписчика на уже существующую тему PUB/SUB, выполните следующие действия.

  1. В AppsFlyer перейдите на страницу ROI360 > Настройки дохода > Покупки и подписки, выберите Переслать сообщения темы RTDN в AppsFlyer.
  2. Скопируйте URL конечной точки в буфер обмена.

52.png

  1. В Google Cloud Platform в вашем проекте найдите Pub/Sub.

21.png

  1. В разделе Pub/Sub перейдите в раздел Темы и убедитесь, что у вас есть специальная тема pub/sub для подписок.

22.png

  1. Перейдите в раздел Подписки и нажмите Создать подписку.

25.png

  1. Введите идентификатор подписки.
  2. Выберите соответствующую тему pub/sub подписки из раскрывающегося списка.

26.png

  1. Для Типа доставки выберите Push.
  2. Введите URL конечной точки, который вы записали в подшаге 2.
  3. Для Срока действия выберите Никогда не истекает.

28.png

  1. Нажмите Сохранить.
  2. Перейдите в раздел Подписки и скопируйте название темы в буфер обмена.

46.png

  1. В Google Play Console перейдите в раздел Настройка монетизации и в разделе Биллинг Google Play в поле Название темы вставьте название темы, которое вы скопировали в предыдущем шаге.

19.png

  1. Нажмите Сохранить.

1.7 Настройте автоматические службы

  1. В AppsFlyer перейдите в раздел ROI360 > Настройки дохода > Покупки и подписки, включите одну из опций или обе:
    • Проверять покупки через Google Play.
    • Атрибутировать и учитывать подписки с автопродлением.

50.png

  1. [Необязательно] Установите флажок Разрешить AppsFlyer дедуплицировать транзакции, которые уже были учтены. Таким образом можно исключить дублированную запись транзакций.
  2. Нажмите Сохранить.
Примечание. После установки учетных данных и разрешений аккаунта службы может пройти некоторое время (иногда до 24 часов), прежде чем вы сможете их использовать. Это может привести к появлению ошибок при попытке подключения к Google RTDN.

Шаг 2: Настройте уведомления из iOS App Store

Прежде чем начать:

  • Настройка измерения доходов от внутренних покупок и подписки состоит из шагов, выполненных в App Store Connect и в пользовательском интерфейсе AppsFlyer. Вкладки App Store Connect и AppsFlyer должны быть открыты во время установки.

  • Для настройки в пользовательском интерфейсе AppsFlyer требуются права администратора.

Для измерения доходов от внутренних покупок и подписки:

  1. В App Store Connect перейдите в раздел Features (Функции) > Subscriptions (Подписки) и нажмите Manage (Управлять), чтобы получить общий секретный ключ App Store Connect.
    app_store_connect_shared_secret.png
  2. В AppsFlyer перейдите в раздел ROI360 > Настройки дохода > Покупки и подписки.
    Откроется страница настройки доходов.
    ARS-VIAP.png
  3. Введите общий секретный ключ App Store Connect.
  4. Скопируйте конечную точку AppsFlyer и введите ее в конфигурацию App Store Connect.
    1. Выберите в App Store Connect свое приложение.
    2. В разделе App Information (Информация о приложении) прокрутите вниз до уведомлений сервера App Store и вставьте конечную точку AppsFlyer в поля Production Server URL (URL рабочего сервера) и Sandbox Server URL (URL сервера песочницы).
      ASSN.png
    3. Нажмите Сохранить.
  5. [Необязательно] Выберите отправку уведомлений сервера на конечную точку и введите конечную точку. 
  6. На странице настройки доходов от внутренних покупок и подписки в AppsFlyer включите один из следующих переключателей или оба:
    • Атрибутировать и учитывать подписки с автопродлением.
    • Проверка покупок в Apple App Store.
  7. [Необязательно] Установите флажок Разрешить AppsFlyer дедуплицировать транзакции, которые уже были учтены.
    Таким образом можно исключить дублированную запись транзакций.
  8. [Необязательно] Установите флажок Дедуплицировать доход от покупок с семейным доступом.
    Это исключает дублированную запись доходов от покупок в рамках семейного доступа. События дохода для других членов семьи включают параметр purchase_ownership_type=FAMILY_SHARED и отображают нулевой доход.

Внимание:

  • Apple может отправлять уведомления сервера только на одну конечную точку.
  • Клиенты могут отправлять уведомления сервера Apple со своего бэкенда непосредственно на URL конечной точки уведомления, но запросы должны быть точно такими же, как они получены из App Store.

Шаг 3: Интегрируйте коннектор SDK для измерения дохода от покупок

Интеграция коннектора SDK для измерения дохода от покупок позволяет вашему приложению регистрировать как покупки в приложении, так и подписки с автопродлением. Вы можете выбрать учет одного или обоих типов доходов на странице Настройки доходов > Покупки и подписки в AppsFlyer для Android и iOS.

Для интеграции коннектора SDK:

  1. Попросите своего разработчика Android интегрировать коннектор SDK AppsFlyer для измерения дохода от покупок для Android.
    • Коннектор AppsFlyer для покупок V1 для Android поддерживает библиотеку биллинга Google V4.
    • Коннектор AppsFlyer для покупок V2 для Android поддерживает библиотеку биллинга Google V5.
  2. Попросите своего разработчика iOS интегрировать коннектор SDK AppsFlyer для измерения дохода от покупок для iOS.

Примечание. Для приложений, созданных при помощи инфраструктуры Unity, см. документацию по коннектору Unity.

Шаг 4: Интегрируйте API для налога на истинный доход

Истинный доход — это слой бизнес-логики, созданный для обслуживания решения AppsFlyer по учету доходов от покупки приложений и подписки. Он автоматически рассчитывает стоимость чистого дохода для каждой входящей транзакции в режиме реального времени и включает ее в отчеты. По умолчанию налог указывается в отчете по любой транзакции, измеряемой ROI360, с использованием конфигурации налоговых ставок по умолчанию. Конфигурация может быть отредактирована с помощью специального API для налога.

Узнать больше об истинном доходе

Чтобы отредактировать конфигурацию налогов с помощью API для налогов:

  1. Предоставьте своему разработчику:
    • Токен API V2 для использования в качестве ключа авторизации.
    • Параметры и значения, содержащие информацию о том, какие налоги необходимо рассчитать, как указано в таблице ниже. 
  2. Скажите своему разработчику, чтобы он следовал инструкциям по API для налогов для создания правил расчета налоговых ставок. Примечание: API допускает наличие JSON-файла в теле запроса post. Данный файл JSON содержит все поддерживаемые страны и налоговые ставки. Разработчик может редактировать его или использовать его в API как есть.

Параметры и значения для использования в API

Параметр Обязательно/Не обязательно Примечания Запишите значение (для использования вашим разработчиком)
tax_name Да
  • Название, появляющееся в счете клиента и описывающее конкретный тип налога. 
  • Пример: Продажи, НДС, Федеральный налог на товары и услуги
 
tax_rate Да
  • Число с количеством десятичных знаков до 4, отображающее в процентах налог, который нужно собрать.
  • Пример: 7.25
 
tax_exclusive Нет
  • Логическое значение, true или false.
  • False обозначает, что налог включен в общий доход.
  • True обозначает, что налог добавлены к общему указанному доходу. Например, в США или Канаде, где цена по прейскуранту не включает в себя налог с продаж.
  • По умолчанию установлено значение false.
 
Страна Нет  
subdivision Нет
  • В некоторых странах может быть дополнительно указан штат/муниципальное образование.
  • Обрабатывается в соответствии с кодами муниципальных образований по ISO 3166-2.
  • Должен включать код страны и код муниципального образования.
  • Пример: US-CA
 
postal_code Нет
  • Строка букв и/или цифр
  • Пример: L4J8E3
 
deduction_order Нет
  • Перечисление, либо 0, либо 1, либо 2:
    • 0 означает, что сначала из валового дохода вычитается комиссия магазина, а из оставшейся суммы вычитается налог.
    • 1 означает, что сначала из валового дохода вычитается налог, а из оставшейся суммы вычитается комиссия магазина.
    • 2 означает, что из валового дохода вычитается и налог, и комиссия магазина.
 

Шаг 5: Проверка дохода от внутренних покупок (IAP) и подписки

Рекомендуем проверить интеграцию IAP и доходов от подписки в среде песочницы, чтобы убедиться, что коннектор SDK правильно интегрирован и что уведомления сервера правильно настроены и получены AppsFlyer.

Перед началом тестирования убедитесь, что ваш разработчик настроил среду песочницы в коннекторе SDK (установив переключатель Песочница в положение true). Это позволяет ROI360 создавать для тестов только внутренние события в песочнице нулевыми доходами. Таким образом, рабочие данные не затрагиваются.

Соображения по поводу среды песочницы

В среде песочницы:

  • Только события первичной покупки заставляют коннектор SDK создавать событие, регистрируемое в AppsFlyer. Событие внутренней покупки называется af_purchase_sandbox_sdk. Событие подписки называется af_ars_sandbox_sdk.
  • Все остальные события покупки отбрасываются, то есть коннектор SDK не создает события.
  • Входящие уведомления сервера обрабатываются только в том случае, если коннектор SDK впервые записывает исходную транзакцию. В этом случае событие внутренней покупки создается под названием af_purchase_sandbox_s2s. Событие подписки создается под названием af_ars_sandbox_s2s.
  • Событие не создается для любого уведомления сервера, для которого коннектор SDK сначала не зарегистрировал исходную транзакцию.
  • Для iOS убедитесь, что в разделе уведомлений сервера App Store в App Store Connect конечная точка AppsFlyer настроена как ваш URL сервера безопасной среды.
    ASSN.png
  • Для Android тесты, выполняемые лицензированными тестировщиками, приводят к событиям песочницы, даже если среда песочницы в SDK не настроена.

Проверка дохода от внутренних покупок и подписки

Проверка дохода от внутренних покупок и подписки:

  1. Скажите разработчикам, что для настройки среды песочницы в коннекторе SDK необходимо следовать инструкциям Android, iOS и Unity.
  2. Сделайте тестовую покупку. Также поддерживаются транзакции, выполняемые лицензированным тестировщиком в Google Play и из TestFlight в iOS.
    Примечание. Любой продукт по подписке можно протестировать только один раз с каждого тестового устройства. Другими словами, нельзя зарегистрировать несколько тестовых покупок по одной и той же подписке с одного и того же устройства, поскольку они не будут учтены.
  3. Убедитесь, что событие отображается на дэшборде активности AppsFlyer. Событие внутренней покупки называется af_purchase_sandbox_sdk. Событие подписки называется af_ars_sandbox_sdk. К этим событиям относится следующее:
    • Значение дохода равно 0 (чтобы не искажать реальные отчеты AppsFlyer).
    • Параметр af_sandbox_revenue, который включает в себя значение дохода от приобретенного продукта, чтобы вы могли проверить правильность учтенного дохода.
  4. Если вы проверяете продукт по подписке, дайте AppsFlyer некоторое время на получение уведомления сервера. Обычно это происходит через несколько минут после исходной покупки. 
  5. Убедитесь, что событие отображается на дэшборде активности AppsFlyer. Событие покупки подписки с автопродлением называется af_ars_sandbox_s2s. Оно включает в себя следующее:
    • Значение дохода равно 0 (чтобы не искажать реальные отчеты AppsFlyer).
    • Параметр af_sandbox_revenue, который включает в себя значение дохода от приобретенного продукта, чтобы вы могли проверить правильность учтенного дохода.

Шаг 6: Выпуск версии приложения с коннектором SDK

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

  • Внутренние события приложения, которые вы хотите регистрировать как внутренние покупки или подписки, не блокируются одним из правил проверки, которые вы настроили в AppsFlyer.
  • Ваш разработчик должен отметить все флажки безопасной среды как false.
  • Для iOS убедитесь, что в разделе уведомлений сервера App Store в App Store Connect конечная точка AppsFlyer настроена как ваш URL сервера безопасной среды.
    ASSN.png

Справочник

События и параметры, связанные с внутренними покупками

В следующих разделах отображаются события, связанные с внутренними покупками, которые измеряет AppsFlyer, и параметры, записанные для каждого события. Включенные параметры разъяснены в словаре параметров события.

Все сгенерированные события:

  • Считаются событиями S2S.
  • Доступны в отчетах по сырым данным (как органические и неорганические внутренние события приложения).
  • Можно отправить партнерам посредством постбэков.
  • Можно использовать в SKAN Conversion Studio.

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

Покупка (af_purchase)

Описание

Записывается при совершении покупки пользователем.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_net_revenue
  • af_net_revenue_tax_name
  • af_net_revenue_tax_rate
  • af_net_revenue_tax_exclusive
  • af_net_revenue_country
  • af_net_revenue_subdivision
  • af_net_revenue_postal_code
  • af_net_revenue_factors

Покупка отменена (af_purchase_canceled)

Описание

Записывается, если пользователь отменяет покупку.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment

Ожидаемая покупка (af_purchase_pending)

Описание

Записывается, если пользователь делает покупку, но платеж еще не обработан.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment

Возврат (af_purchase_refund)

Описание

Записывается в случае возврата средств за покупку.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_discount_type
  • event_revenue_usd
  • event_revenue (включается в событие, если доход от больше нуля)
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors
  • af_net_revenue_tax_name
  • af_net_revenue_tax_rate
  • af_net_revenue_tax_exclusive
  • af_net_revenue_country
  • af_net_revenue_subdivision
  • af_net_revenue_postal_code

Тестовая покупка (af_purchase_sandbox_sdk)

Описание

Записывается при тестировании покупки, зарегистрированной посредством SDK в безопасной среде.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_purchase_state
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id

Тестовая покупка (af_purchase_sandbox_s2s)

Описание

Записывается при тестировании покупки, зарегистрированной посредством S2S в безопасной среде.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_purchase_state
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id

События и параметры, связанные с подпиской

В следующих разделах отображаются события, связанные с подпиской, которые измеряет AppsFlyer, и параметры, записанные для каждого события. Включенные параметры разъяснены в словаре параметров события.

Все сгенерированные события:

  • Считаются событиями S2S.
  • Доступны в отчетах по сырым данным (как органические и неорганические внутренние события приложения).
  • Можно отправить партнерам посредством постбэков.
  • Можно использовать в SKAN Conversion Studio.

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

Пробный период начался (af_ars_trial_started)

Описание

Записывается, когда подписчик начинает пробный период.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type

Пробный период отменен (af_ars_trial_canceled)

Описание

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

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type

Отток после пробного периода (af_ars_trial_churned)

Описание

Записывается, когда подписчик уходит после пробного периода. Это происходит после отмены автопродления и истечения пробного периода. Это также может быть следствием проблем с биллингом или технических проблем с продлением, что приводит к оттоку подписчиков.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_reason

Конверсия после пробного периода (af_ars_trial_converted)

Описание

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

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_discount_id
  • af_discount_type
  • event_revenue_usd
  • af_revenue (включается в событие, если доход от события больше нуля). 
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors
  • af_net_revenue_tax_name
  • af_net_revenue_tax_rate
  • af_net_revenue_tax_exclusive
  • af_net_revenue_country
  • af_net_revenue_subdivision
  • af_net_revenue_postal_code

Подписка началась (af_ars_subscription_started)

Описание

Записывается, когда начинается подписка со скидкой или по полной цене.

Внимание:

  • Новые подписки могут быть записаны только через коннектор SDK.
  • Для iOS, если подписчик повторно покупает подписку, которая у него уже есть, коннектор SDK сообщает приложению об успешной проверке чека, но не регистрирует новую транзакцию в AppsFlyer.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_discount_id
  • af_discount_type
  • event_revenue_usd
  • event_revenue (включается в событие, если доход от больше нуля)
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors
  • af_net_revenue_tax_name
  • af_net_revenue_tax_rate
  • af_net_revenue_tax_exclusive
  • af_net_revenue_country
  • af_net_revenue_subdivision
  • af_net_revenue_postal_code

Подписка отменена (af_ars_subscription_canceled)

Описание

Записывается, когда подписка с автопродлением отменяется в середине расчетного периода. Если пользователь не восстанавливает автопродление в течение этого же расчетного периода, наступает событие оттока.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type

Подписка приостановлена (af_ars_subscription_paused) — только для Android

Описание

Записывается, когда пользователь приостанавливает активную подписку.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type

Подписка продолжена (af_ars_subscription_resumed)

Описание

Записывается, когда подписка по полной цене возобновляется после отмены или возврата подписки.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_discount_id
  • af_discount_type
  • af_reason
  • event_revenue (включается в событие, если доход от события больше нуля)
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors

Отток после подписки (af_ars_subscription_churned)

Описание

Записывается, когда подписчик уходит. Это происходит после отмены автопродления и истечения расчетного периода. Это также может быть следствием проблем с биллингом или технических проблем с продлением, что приводит к оттоку подписчиков.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_reason

Возврат стоимости подписки (af_ars_subscription_refunded)

Описание

Записывается, когда подписчик оформляет возврат стоимости подписки.

Внимание:

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

Параметры 

  • app_id
  • customer_user_id
  • af_reason
  • af_subscription_ownership_type
  • af_discount_id
  • af_discount_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_refunded_transaction_ids
  • event_revenue_usd
  • event_revenue (включается в событие, если доход от больше нуля)
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_store
  • af_environment
  • af_period_type
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors
  • af_net_revenue_tax_name
  • af_net_revenue_tax_rate
  • af_net_revenue_tax_exclusive
  • af_net_revenue_country
  • af_net_revenue_subdivision
  • af_net_revenue_postal_code

Льготный период подписки (af_ars_subscription_billing_grace)

Описание

Записывается, когда продление подписки не происходит из-за проблемы с расчетом, и подписчик входит в льготный расчетный период.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • Af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • Af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type

Подписка возобновлена (af_ars_subscription_renewed)

Описание

Записывается, когда происходит автопродление подписки.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_discount_id
  • af_discount_type
  • event_revenue_usd
  • event_revenue (включается в событие, если доход от больше нуля)
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors

Подписка изменена (af_ars_subscription_xgraded)

Описание

Записывается, когда подписчик переходит на другой продукт, понижает или повышает подписку.

Параметры 

  • app_id
  • customer_user_id
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_discount_id
  • af_discount_type
  • event_revenue_usd
  • event_revenue (включается в событие, если доход от больше нуля)
  • store_commission
  • af_net_revenue
  • af_net_revenue_factors

Имеющийся подписчик (af_ars_existing_subscriber)

Описание

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

Параметры 

  • app_id
  • customer_user_id
  • Страна
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_cuids
  • af_validated

Тестовая покупка (af_ars_sandbox_sdk)

Описание

Записывается при тестировании покупки, зарегистрированной посредством SDK в безопасной среде.

Параметры 

  • app_id
  • customer_user_id
  • Страна
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_discount_id
  • af_discount_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_cuids
  • af_validated

Тестовая покупка (af_ars_sandbox_s2s)

Описание

Записывается при тестировании покупки, зарегистрированной посредством S2S в безопасной среде.

Параметры 

  • app_id
  • customer_user_id
  • Страна
  • af_currency
  • af_expires_date_ms
  • af_subscription_ownership_type
  • af_discount_id
  • af_discount_type
  • af_original_transaction_id
  • af_order_id
  • af_purchase_token
  • af_transaction_id
  • af_product_id
  • android_id
  • idfa
  • ip
  • appsflyer_id
  • af_purchase_date_ms
  • af_store
  • af_environment
  • af_period_type
  • af_cuids
  • af_validated

Словарь параметров

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

Параметры с собственными столбцами:

  • app_id
  • customer_user_id
  • country_code
  • af_currency
  • event_revenue_usd
  • af_revenue
  • android_id
  • ip
  • idfa
  • appsflyer_id

Более подробная информация по данным параметрам приведена в словаре полей данных.

В таблице ниже описаны параметры сырых данных, доступные в событиях ARS и VIAP.

Параметр Примечания Продукт
af_cancelation_date_ms Дата отмены IAP
af_reason
  • В событиях, связанных с отменой или оттоком, это причина, по которой пользователь отменил событие или ушел. Возможные значения:
    • iOS:
      • cancel_intent
      • billing_issue
      • declined_price_increase
      • product_unavailable
    • Android:
      • Я недостаточно часто пользуюсь этой услугой
      • Технические проблемы
      • Причины, связанные с затратами
      • Я нашел приложение лучше
      • Другое
  • В событиях возобновления подписки это причина, по которой пользователь возобновил подписку. Возможные значения:
    • Android:
      • приостановлена и возобновлена
      • отключена и включено автопродление
  • В событиях, связанных с возвратом средств, это причина, по которой пользователь получил возврат. Возможные значения:
    • iOS:
      • 1: проблема с приложением
      • 0: другая причина
  • IAP
  • Подписка
af_expires_date_ms

Срок действия текущего платежного цикла подписки

Подписка

af_subscription_ownership_type

FAMILY_SHARED означает, что пользователь использует через общий семейный доступ.  PURCHASED означает, что платящий пользователь совершил покупку.

Подписка

af_discount_id

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

  • IAP
  • Подписка
af_discount_type

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

  • iOS
    • вводный
    • подписка
  • Android;
    • предварительная цена
    • one_time_code (одноразовый код)
    • vanity_code (уникальный код)
Подписка
af_original_transaction_id
  • Идентификатор исходной транзакции
  • Только для iOS
  • IAP
  • Подписка
af_order_id
  • Идентификатор заказа для транзакции
  • Только для Android
  • IAP
  • Подписка
af_purchase_token
  • Токен покупки для транзакции
  • Только для Android
  • IAP
  • Подписка
af_transaction_id
  • Идентификатор транзакции
  • Только для iOS
  • IAP
  • Подписка
af_purchase_state

Возможные значения:

  • Совершил покупку
  • Отменено
  • Pending (Ожидает публикации)

Внутренняя покупка 

af_original_transaction_id
  • Оригинальный идентификатор транзакции
  • Только для iOS
  • IAP
  • Подписка
af_refunded_transaction_ids
  • Массив идентификаторов всех транзакций с возвратом
  • Только для iOS
  • IAP
  • Подписка
af_product_id

Идентификатор продукта подписки

  • IAP
  • Подписка
af_purchase_date_ms

Дата покупки для внутреннего события с записанным ID продукта

  • IAP
  • Подписка
af_store

Магазин приложений, в котором был приобретен продукт подписки

  • IAP
  • Подписка
af_environment

Среда, из которой получены данные, — производственная или песочница.

  • IAP
  • Подписка
af_period_type
  • Тип подписки или пробного периода.
  • Возможные значения:
    • Пробный период
    • введение
    • Обычный

Подписка

store_commission
  • Рассчитанный процент комиссионных, которые магазин получает с купленного товара.
  • Отображается в виде десятичной дроби.
  • Пример: 30
  • IAP
  • Подписка
af_net_revenue

Чистый доход, рассчитанный с учетом всех повлиявших причин. См. af_net_revenue_factors.

  • IAP
  • Подписка
af_net_revenue_factors
  • Массив, представляющий все повлиявшие причины, которые дают сумму af_net_revenue.
  • Пример значения: store_commission
  • IAP
  • Подписка

af_net_revenue_tax_name

  • Название, появляющееся в счете клиента и описывающее конкретный тип налога. 
  • Пример: Продажи, НДС, Федеральный налог на товары и услуги
  • IAP
  • Подписка

af_net_revenue_tax_rate

  • Число с количеством десятичных знаков до 4, отображающее собранный налог в процентах.
  • Пример: 7.25
  • IAP
  • Подписка

af_net_revenue_tax_exclusive

  • Логическое значение, true или false.
  • False обозначает, что налог включен в общий доход.
  • True обозначает, что налог добавлены к общему указанному доходу. Например, в США или Канаде, где цена по прейскуранту не включает в себя налог с продаж.
  • IAP
  • Подписка

af_net_revenue_country

  • IAP
  • Подписка

af_net_revenue_subdivision

  • В некоторых странах может быть дополнительно указан штат/муниципальное образование. Это обозначение обрабатывается в соответствии с кодами муниципальных образований по ISO 3166-2.
  • Включает код страны и код муниципального образования.
  • Пример: US-CA
  • IAP
  • Подписка

af_net_revenue_postal_code

  • Строка букв и/или цифр
  • Пример: L4J8E3
  • IAP
  • Подписка
af_cuids
  • В контексте ARS этот параметр содержит массив со всеми CUID.
  • Массив CUID отображается независимо от идентификаторов устройств. Таким образом, одни и те же CUID могут отображаться для нескольких идентификаторов устройства.
Подписка

Истинный доход

Истинный доход — это слой бизнес-логики, созданный для обслуживания решения AppsFlyer по учету доходов от внутренних покупок и подписки. Он автоматически рассчитывает стоимость чистого дохода для каждой входящей транзакции в режиме реального времени и включает ее в отчеты. Истинный доход учитывает следующие факторы при расчете валового и чистого дохода: 

  • Комиссия магазина:
    • Рассчитывается и сообщается автоматически. Никаких действий с вашей стороны не требуется.
    • При совершении покупок комиссия магазина составляет 30%.
    • Для подписок комиссия рассчитывается автоматически для каждого подписчика с учетом срока использования им приложения (App Store: начиная с комиссии 30% и до 15% через год, Play Store: комиссия 15%).
    • Соответствующие параметры чистого дохода доступны в отчетах по сырым данным.
  • Налог: по умолчанию налог указывается в отчете по любой транзакции, измеряемой ROI360, с использованием конфигурации налоговых ставок по умолчанию. Конфигурация может быть отредактирована с помощью специального API для налога.

При просмотре истинного дохода в отчетах следующие параметры содержат данные о чистом доходе. Более подробную информацию см. в словаре параметров.

Параметр Фактор чистого дохода

store_commission

Комиссия магазина

af_net_revenue_tax_name

Налог

af_net_revenue_tax_rate

Налог

af_net_revenue_tax_exclusive

Налог

af_net_revenue_postal_code

Налог

af_net_revenue_country

Налог

af_net_revenue_subdivision

Налог
af_net_revenue
  • Комиссия магазина
  • Налог
af_net_revenue_factors
  • Комиссия магазина
  • Налог

Спецификации и ограничения

Спецификация Продукт Примечания
Запись установок и анонимизация
  • IAP
  • Доход от подписки
Не поддерживается
Библиотеки биллинга Google V6
  • IAP
  • Доход от подписки
Не поддерживается
Новые подписки

Доход от подписки

Записывается только через SDK AppsFlyer для измерения доходов от покупок
Изменение цен

Доход от подписки

Если решение для измерения доходов от подписки не получает уведомление от SDK с новой ценой продукта, решение продолжает регистрировать доход по предыдущей цене продукта. Как только будет получена новая цена продукта от SDK покупки, регистрируется новая цена.
Валовой доход
  • IAP
  • Доход от подписки
Поддерживается
Чистый доход
  • IAP
  • Доход от подписки
Поддержка только в сырых данных
Налог

Доход от подписки

Поддерживается
Комиссия магазина от чистого дохода
  • IAP
  • Доход от подписки
  • Для iOS, 15% за подписчиков старше 1 года: поддерживается только в сырых данных 
  • Программы для малого бизнеса: не поддерживаются
Возвраты IAP Возможна регистрация в течение 180 дней после исходной покупки.
Дедупликация
  • IAP
  • Доход от подписки
Для транзакций, зарегистрированных в течение 180 дней после даты события.
Строгий режим SDK
  • IAP
  • Доход от подписки
Подписки ROI360 и VIAP поддерживаются в строгом режиме SDK.
Валюта
  • IAP
  • Доход от подписки
Доход отражается в исходной валюте (с помощью параметра event_revenue) и в долларах США (с помощью параметра event_revenue_usd).