Импорт исторических данных в Adapty

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

Импорт данных не обязателен

Adapty автоматически предоставит уровни доступа историческим пользователям и восстановит их события покупок, как только они откроют приложение с интегрированным SDK Adapty. Для этого сценария импорт исторических данных не нужен. Тем не менее импорт данных обеспечивает точную аналитику, если у вас большой объём исторических транзакций, хотя в целом он не является обязательным условием миграции.

Чтобы импортировать данные в Adapty:

  1. Экспортируйте транзакции в CSV-файл (для iOS, Android и Stripe нужны отдельные файлы). Подробные требования к формату файла описаны в разделе Формат файла импорта ниже.
  2. Если какой-либо файл превышает 1 ГБ, подготовьте выборку данных примерно из 100 строк.
  3. Загрузите все файлы на Google Drive (можно сжать их, но держите отдельно).
  4. Для транзакций iOS убедитесь, что раздел In-app purchase API в App settings заполнен Issuer ID, Key ID и Private key (файл .P8) — даже если вы используете StoreKit 1. Подробные инструкции см. в разделах Укажите Issuer ID и Key ID и Загрузите файл In-App Purchase Key.
  5. Поделитесь ссылками с нашей командой по email или через онлайн-чат в дашборде Adapty.

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

Известные ограничения для Android

  1. Восстанавливаются только активные подписки; истёкшие транзакции восстановлены не будут.
  2. Восстанавливаются только последние продления подписки; вся цепочка покупок восстановлена не будет.
  3. Если цена продукта изменилась с момента покупки, будет использоваться текущая цена, что может привести к некорректным данным о стоимости.

Если у вас большой объём Android-транзакций, перед началом импорта может потребоваться запросить увеличение квоты Google Play Developer API, чтобы не превысить лимит по умолчанию.

Формат файла импорта

Если вы мигрируете с RevenueCat, можно отправить файл экспорта RevenueCat напрямую — конвертация не нужна. Инструкции по экспорту см. в документации RevenueCat.

Подготовьте данные в файле или нескольких файлах, соответствующих следующим требованиям:

  • Формат файла — .CSV.
  • Отдельные файлы для Android, iOS и Stripe.
  • Каждый файл импорта содержит все обязательные столбцы.
  • Столбцы в файлах импорта имеют заголовки.
  • Заголовки столбцов точно соответствуют значениям в колонке Column name в таблице ниже. Проверьте наличие опечаток.
  • Необязательные столбцы могут отсутствовать в файле. Не добавляйте пустые столбцы для данных, которых у вас нет.
  • Файлы импорта не должны содержать дополнительных столбцов, не указанных в таблице. Если они есть, удалите их.
  • Значения разделены запятыми.
  • Значения не заключены в кавычки.
  • Если у одного пользователя несколько apple_original_transaction_id, добавьте их отдельными строками для каждого apple_original_transaction_id. В противном случае мы можем не восстановить расходуемые покупки.

В качестве примеров используйте следующие файлы для iOS и Android.

Доступные столбцы файла импорта

Название столбцаНаличиеОписание
user_idобязательныйID вашего пользователя
apple_original_transaction_idобязательный для iOS

Оригинальный идентификатор транзакции или OTID (подробнее), используется в механизме импорта StoreKit 2. Поскольку у одного пользователя может быть несколько OTID, для успешного импорта достаточно указать хотя бы один.

Примечание: Для этого импорта необходимо настроить учётные данные In-app purchase API в дашборде Adapty. Как это сделать — здесь.

google_product_idобязательный для GoogleID продукта в Google Play Store.
google_purchase_tokenобязательный для GoogleУникальный идентификатор, представляющий пользователя и ID продукта для приобретённой встроенной покупки
google_is_subscriptionобязательный для GoogleВозможные значения: 1 | 0
stripe_tokenобязательный для StripeТокен объекта Stripe, представляющий уникальную покупку. Может быть токеном подписки Stripe (sub_...) или Payment Intent (pi_...).
subscription_expiration_dateнеобязательныйДата истечения подписки, т.е. следующая дата списания, дата и время с часовым поясом (2020-12-31T23:59:59-06:00)
created_atнеобязательныйДата и время создания профиля (2019-12-31 23:59:59-06:00)
birthdayнеобязательныйДата рождения пользователя в формате 2000-12-31
emailнеобязательныйЭлектронная почта вашего пользователя
genderнеобязательныйПол пользователя
phone_numberнеобязательныйНомер телефона вашего пользователя
countryнеобязательныйформат ISO 3166-1 alpha-2
first_nameнеобязательныйИмя вашего пользователя
last_nameнеобязательныйФамилия вашего пользователя
last_seenнеобязательныйДата и время с часовым поясом (2020-12-31T23:59:59-06:00)
idfaнеобязательныйИдентификатор для рекламодателей (IDFA) — случайный идентификатор устройства, назначаемый Apple. Применяется только для iOS-приложений
idfvнеобязательныйИдентификатор для поставщиков (IDFV) — уникальный код, назначаемый всем приложениям одного разработчика. Применяется только для iOS-приложений
advertising_idнеобязательныйAdvertising ID — уникальный код, назначаемый операционной системой Android, который рекламодатели могут использовать для уникальной идентификации устройства пользователя
amplitude_user_idнеобязательныйID пользователя из Amplitude
amplitude_device_idнеобязательныйID устройства из Amplitude
mixpanel_user_idнеобязательныйID пользователя из Mixpanel
appmetrica_profile_idнеобязательныйID профиля пользователя из AppMetrica
appmetrica_device_idнеобязательныйID устройства из AppMetrica
appsflyer_idнеобязательныйУникальный идентификатор из AppsFlyer
adjust_device_idнеобязательныйID устройства из Adjust
facebook_anonymous_idнеобязательныйУникальный идентификатор, генерируемый Facebook для пользователей, анонимно взаимодействующих с вашим приложением или сайтом, то есть не вошедших в Facebook
branch_idнеобязательныйУникальный идентификатор из Branch
attribution_sourceнеобязательныйИсточник интеграции атрибуции, например appsflyer
attribution_statusнеобязательныйorganic
attribution_channelнеобязательныйКанал атрибуции, привлёкший транзакцию
attribution_campaignнеобязательныйКампания атрибуции, привлёкшая транзакцию
attribution_ad_groupнеобязательныйГруппа объявлений атрибуции, привлёкшая транзакцию
attribution_ad_setнеобязательныйНабор объявлений атрибуции, привлёкший транзакцию
attribution_creativeнеобязательныйКонкретные визуальные или текстовые элементы рекламного объявления или маркетинговой кампании, которые отслеживаются для оценки эффективности достижения целевых действий: кликов, конверсий или установок
custom_attributesнеобязательныйОпределите до 30 пользовательских атрибутов в виде JSON-словаря в формате ключ-значение:
  • key: (string) название пользовательского атрибута
  • value: (string, integer, float или boolean) значение пользовательского атрибута.

Формат: "{'string_value': 'some_value', 'float_value': 123.0, 'int_value': 456}".

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

Обязательные поля

Для каждой платформы существует 2 группы обязательных полей: user_id и данные, идентифицирующие покупки для соответствующей платформы. Обязательные поля по платформам указаны в таблице ниже.

ПлатформаОбязательные поля
iOS

user_id

apple_original_transaction_id

Android

user_id

google_product_id

google_purchase_token

google_is_subscription

Stripe

user_id

stripe_token

Без этих полей Adapty не сможет получить транзакции.

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

Импорт данных в Adapty

Свяжитесь с нами и поделитесь файлами импорта через [email protected] или через онлайн-чат в дашборде Adapty.