Импорт исторических данных в Adapty
После установки SDK и выпуска приложения вы получите доступ к своим пользователям и подписчикам в разделе Profiles. Но что, если у вас есть legacy-инфраструктура и нужно перейти на Adapty, или вы просто хотите видеть имеющиеся данные в Adapty?
Импорт данных не обязателен
Adapty автоматически предоставит уровни доступа историческим пользователям и восстановит их события покупок, как только они откроют приложение с интегрированным SDK. Для этого случая импорт исторических данных не нужен. Однако импорт данных обеспечивает точную аналитику при наличии большого количества исторических транзакций, хотя в целом он не является обязательным при миграции.
Чтобы импортировать данные в Adapty:
- Экспортируйте транзакции в CSV-файл (для iOS, Android и Stripe должны быть отдельные файлы). Подробные требования см. в разделе Формат файла для импорта ниже.
- Если какой-либо файл превышает 1 ГБ, подготовьте выборку данных примерно из 100 строк.
- Загрузите все файлы на Google Drive (можно сжать, но сохраняйте их отдельно).
- Для транзакций iOS убедитесь, что раздел In-app purchase API в App settings заполнен: указаны Issuer ID, Key ID и Private key (файл .P8) — даже если вы используете StoreKit 1. Подробные инструкции см. в разделах Provide Issuer ID and Key ID и Upload In-App Purchase Key file.
- Отправьте ссылки нашей команде по электронной почте или через онлайн-чат в дашборде Adapty.
Не волнуйтесь: импорт исторических данных не создаст дубликатов, даже если они пересекаются с уже существующими записями в Adapty.
Известные ограничения для Android
- Восстанавливаются только активные подписки; истёкшие транзакции восстановлены не будут.
- Восстанавливаются только последние продления подписки; вся цепочка покупок восстановлена не будет.
- Если цена продукта изменилась с момента покупки, будет использоваться текущая цена, что может привести к некорректным данным о стоимости.
Если у вас большой объём Android-транзакций, перед началом импорта может потребоваться запросить увеличение квоты Google Play Developer API, чтобы не превысить лимит по умолчанию.
Формат файла импорта
Если вы мигрируете с RevenueCat, можно отправить файл экспорта RevenueCat напрямую — конвертация не нужна. Инструкции по экспорту см. в документации RevenueCat.
Подготовьте данные в файле или нескольких файлах, соответствующих следующим требованиям:
- Формат файла — .CSV.
- Отдельные файлы для импорта Android, iOS и Stripe.
- Каждый файл импорта содержит все обязательные столбцы.
- Столбцы в файле(ах) импорта имеют заголовки.
- Заголовки столбцов совпадают с названиями в столбце Column name в таблице ниже. Проверьте на опечатки.
- Необязательные столбцы могут отсутствовать в файле. Не добавляйте пустые столбцы для данных, которых у вас нет.
- В файлах импорта не должно быть лишних столбцов, не упомянутых в таблице. Если они есть — удалите их.
- Значения разделяются запятыми.
- Значения не заключаются в кавычки.
- Если у одного пользователя несколько 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 | обязательный для Google | ID продукта в 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 |
| необязательный | Электронная почта вашего пользователя | |
| 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-словаря в формате ключ-значение:
Формат: Обратите внимание на использование двойных и одинарных кавычек в формате. Имейте в виду, что булевы значения и целые числа будут преобразованы в числа с плавающей точкой. |
Обязательные поля
Для каждой платформы существует 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
Свяжитесь с нами и отправьте файлы для импорта на support@adapty.io или через онлайн-чат в дашборде Adapty.