---
title: "Google Cloud Storage"
description: "Интегрируйте Google Cloud Storage с Adapty для безопасного хранения данных."
---

Включите интеграцию с Google Cloud Storage, чтобы безопасно хранить [события подписок](events) и [данные о посещениях пейволов](paywall-metrics) в одном месте — в вашем бакете Google Cloud Storage.

Каждый день в 4:00 UTC Adapty загружает .csv-файлы с данными за предыдущий день в ваши бакеты. Вы можете выбрать, что получать: данные о **событиях**, данные о **посещениях пейволов** или **и то и другое**. Экспортировать данные также можно [вручную](#manual-data-export) в любое время и за любой период.

Чтобы настроить интеграцию, [создайте ключ доступа к бакету](#create-google-cloud-storage-credentials) в Google Cloud Console и [добавьте его в настройки Adapty](#set-up-google-cloud-storage-integration).

## Расписание и продолжительность загрузки \{#upload-schedule-and-duration\}

Adapty загружает данные в Google Cloud Storage каждые 24 часа в 04:00 UTC.

Файлы содержат данные о событиях, созданных в течение предыдущего календарного дня (UTC). Файл, загруженный 8 марта, будет содержать все события, созданные 7 марта с 00:00:00 до 23:59:59 UTC.

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

## Настройка интеграции с Google Cloud Storage \{#set-up-google-cloud-storage-integration\}

Вам понадобится действующий ключ сервисного аккаунта Google Cloud с **правом на запись**. Чтобы его создать, следуйте инструкциям в разделе [создания учётных данных](#create-google-cloud-storage-credentials).

:::warning
Для событий и посещений пейволов можно использовать разные бакеты с разными учётными данными. Однако если **хотя бы один** набор учётных данных окажется недействительным, [**обе загрузки завершатся ошибкой**](#troubleshooting).
:::

Перейдите в [**Integrations** -> **Google Cloud Storage**](https://app.adapty.io/integrations/google-cloud-storage) и откройте нужную вкладку (**Events** или **Paywall visits**). Включите интеграцию.

Загрузите файл с вашим **ключом сервисного аккаунта Google Cloud**. Укажите целевой **бакет** и **папку**. Сохраните изменения.

### Дополнительные настройки для данных о событиях \{#optional-settings-for-event-data\}

Вы можете указать, какие события включать в отчёт, и задать для них пользовательские названия. Полный список доступных событий см. в статье [Events](events).

| Название | Значение по умолчанию | Описание |
| ------------------------------ | ----------------- | ----------- |
| Exclude historical events | true | Исключить информацию о событиях, произошедших до интеграции Adapty SDK в ваше приложение. <br /> <br />Если ваша аналитическая платформа получала события подписок **до** того, как вы начали использовать Adapty, этот параметр предотвращает появление дублирующих событий. <Details summary="Практический пример"><p>Пользователь оформил ежемесячную подписку 10 января. Обновление приложения от 1 марта было первым, включавшим Adapty SDK. <br /> <br /> Если этот параметр **включён**, отчёт не будет содержать событие «подписка оформлена» от января и событие «подписка продлена» от февраля. **Будет** включено событие «подписка продлена» от 10 марта.</p> </Details> |
| Include events without profile | false | Включить транзакции, не связанные с профилем пользователя или не привязанные к конкретному пользователю. Сюда могут входить покупки, совершённые до установки Adapty SDK, или транзакции, полученные через серверные уведомления. |
| Send user attributes | false | Включить [пользовательские атрибуты](setting-user-attributes), например данные о пользователе и использовании приложения. Выберите этот параметр, если ваш тарифный план поддерживает более 10 тегов. Превышение лимита тегов может привести к ошибкам. |

## Создание учётных данных Google Cloud Storage \{#create-google-cloud-storage-credentials\}

Это руководство поможет вам создать необходимые учётные данные в Google Cloud Platform Console.

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

:::warning
Обратите внимание, что поддерживается только авторизация через HMAC-ключ сервисного аккаунта. Убедитесь, что вашему HMAC-ключу присвоены роли «Storage Object Viewer», «Storage Legacy Bucket Writer» и «Storage Object Creator» — это необходимо для корректного доступа к Google Cloud Storage.
:::

1. Для начала перейдите в раздел [IAM](https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts) вашего аккаунта Google Cloud и выберите нужный проект или создайте новый.

  

1. Затем создайте новый сервисный аккаунт для Adapty, нажав кнопку "+ CREATE SERVICE ACCOUNT".

    

2. Заполните поля на первом шаге — доступ будет предоставлен позже. Подробнее об этой странице читайте в [документации](https://docs.cloud.google.com/iam/docs/service-accounts-create).

    

3. Чтобы создать и скачать [приватный JSON-ключ](https://docs.cloud.google.com/iam/docs/keys-create-delete), перейдите в раздел KEYS и нажмите кнопку "ADD KEY".

    

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

    
    
5. Перейдите на страницу [Buckets](https://console.cloud.google.com/storage/browser) в Google Cloud Storage, выберите существующий бакет или создайте новый для хранения отчётов о событиях или посещениях из Adapty. Затем перейдите в раздел PERMISSIONS и выберите [GRANT ACCESS](https://docs.cloud.google.com/identity/docs/how-to?hl=en).

    

6. В разделе PERMISSIONS введите Email сервисного аккаунта, полученный на пятом шаге, выберите роль Storage Object Creator и нажмите SAVE для сохранения изменений.

    

    Запомните название бакета — оно понадобится в будущем.

## Ручной экспорт данных \{#manual-data-export\}

Помимо автоматического экспорта данных о событиях в Google Cloud Storage, Adapty поддерживает ручной экспорт файлов. С его помощью вы можете выбрать конкретный временной интервал и экспортировать данные о событиях в бакет GCS вручную. Это даёт вам больше контроля над тем, какие данные и когда экспортировать.

Указанный диапазон дат используется для экспорта событий, созданных с Даты А 00:00:00 UTC до Даты Б 23:59:59 UTC.

## Структура данных \{#data-structure\}

Adapty использует файлы `.csv` для экспорта данных в табличном формате.

:::warning
Состав событий может меняться со временем — мы или наши партнёры можем добавлять новые данные. Убедитесь, что ваш код, обрабатывающий эти данные, достаточно гибок и опирается на конкретные поля, а не на структуру в целом.
:::

### События \{#events\}

Вы можете [изменить](#optional-settings-for-event-data) список событий, включаемых в отчёты.

| Столбец | Описание |
|------|-----------|
| **profile_id** | Идентификатор пользователя Adapty. |
| **event_type** | Название события в нижнем регистре. Типы событий см. в разделе [Events](events). |
| **event_datetime** | Дата в формате ISO 8601. |
| **transaction_id** | Уникальный идентификатор транзакции (например, покупки или продления). |
| **original_transaction_id** | Идентификатор транзакции оригинальной покупки. |
| **subscription_expires_at** | Дата истечения срока действия подписки. Как правило, в будущем. |
| **environment** | Может быть Sandbox или Production. |
| **revenue_usd** | Выручка в USD. Может быть пустым. |
| **proceeds_usd** | Поступления в USD. Может быть пустым. |
| **net_revenue_usd** | Чистая выручка (после вычета налогов) в USD. Может быть пустым. |
| **tax_amount_usd** | Сумма налоговых вычетов в USD. Может быть пустым. |
| **revenue_local** | Выручка в местной валюте. Может быть пустым. |
| **proceeds_local** | Поступления в местной валюте. Может быть пустым. |
| **net_revenue_local** | Чистая выручка (после вычета налогов) в местной валюте. Может быть пустым. |
| **tax_amount_local** | Сумма налоговых вычетов в местной валюте. Может быть пустым. |
| **customer_user_id** | Идентификатор пользователя разработчика. Например, UUID пользователя, email или любой другой идентификатор. Null, если не задан. |
| **store** | Может быть *app_store* или *play_store*. |
| **product_id** | Идентификатор продукта в Apple App Store, Google Play Store или Stripe. |
| **base_plan_id** | [Идентификатор базового плана](https://support.google.com/googleplay/android-developer/answer/12154973) в Google Play Store или [идентификатор цены](https://docs.stripe.com/products-prices/how-products-and-prices-work#use-products-and-prices) в Stripe. |
| **developer_id** | ID разработчика (SDK) пейвола, из которого пришла транзакция. |
| **ab_test_name** | Название A/B-теста, из которого пришла транзакция. |
| **ab_test_revision** | Ревизия A/B-теста, из которого пришла транзакция. |
| **paywall_name** | Название пейвола, из которого пришла транзакция. |
| **paywall_revision** | Ревизия пейвола, из которого пришла транзакция. |
| **profile_country** | Страна профиля, определённая Adapty по IP-адресу. |
| **install_date** | Дата установки в формате ISO 8601. |
| **idfv** | [identifierForVendor](https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor) на устройствах iOS |
| **idfa** | [advertisingIdentifier](https://developer.apple.com/documentation/adsupport/asidentifiermanager/advertisingidentifier) на устройствах iOS |
| **advertising_id** | Уникальный код, присваиваемый операционной системой Android, который рекламодатели могут использовать для однозначной идентификации устройства пользователя |
| **ip_address** | IP-адрес устройства (может быть IPv4 или IPv6; при наличии предпочтение отдаётся IPv4). Обновляется при каждом изменении IP-адреса устройства |
| **cancellation_reason** | <p>Причина отмены подписки пользователем.</p><p></p><p>Возможные значения:</p><p>**iOS и Android** — *voluntarily_cancelled*, *billing_error*, *refund*</p><p>**Только iOS** — *price_increase*, *product_was_not_available*, *unknown*, *upgraded*</p><p>**Только Android** — *new_subscription_replace*, *cancelled_by_developer*</p> |
| **android_app_set_id** | [AppSetId](https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/appsetid/AppSetId) — уникальный, сбрасываемый пользователем идентификатор для каждого устройства и аккаунта разработчика, предназначенный для некоммерческих рекламных сценариев. |
| **android_id** | На Android 8.0 (API level 26) и выше — 64-битное число (в шестнадцатеричном формате), уникальное для каждой комбинации ключа подписи приложения, пользователя и устройства. Подробнее см. в [документации для разработчиков Android](https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID). |
| **device** | Название модели устройства, отображаемое конечному пользователю. |
| **currency** | Трёхбуквенный код валюты транзакции (ISO-4217). |
| **store_country** | Страна профиля, определённая Apple/Google store. |
| **attribution_source** | Источник атрибуции. |
| **attribution_network_user_id** | Идентификатор пользователя, присвоенный источником атрибуции. |
| **attribution_status** | Может быть organic, non_organic или unknown. |
| **attribution_channel** | Название маркетингового канала. |
| **attribution_campaign** | Название маркетинговой кампании. |
| **attribution_ad_group** | Группа объявлений атрибуции. |
| **attribution_ad_set** | Набор объявлений атрибуции. |
| **attribution_creative** | Ключевое слово креатива атрибуции. |
| **attributes** | JSON с [пользовательскими атрибутами](setting-user-attributes#custom-user-attributes). Включает любые пользовательские атрибуты, настроенные для отправки из мобильного приложения. Для отправки включите параметр **Send User Attributes** на странице [Integrations -> Webhooks](https://app.adapty.io/integrations/customwebhook). |
| **integration_ids** | Все идентификаторы интеграций, связанные с профилем. Словарь. Пример: &#123;&#39;mixpanel_user_id&#39;: &#39;mixpanelUserId-test&#39;, &#39;facebook_anonymous_id&#39;: &#39;facebookAnonymousId-test&#39;&#125; |

### Посещения пейволов \{#paywall-visits\}

| Столбец | Описание |
| :-------------------- | :----------------------------------------------------------------------------------------------------------- |
| **profile_id** | Идентификатор пользователя Adapty. |
| **customer_user_id** | Идентификатор пользователя разработчика. Например, UUID пользователя, email или любой другой идентификатор. Null, если не задан. |
| **profile_country** | Страна профиля, определённая Apple/Google store. |
| **install_date** | Дата установки в формате ISO 8601. |
| **store** | Может быть *app_store* или *play_store*. |
| **paywall_showed_at** | Дата, когда пейвол был показан пользователю. |
| **developer_id** | ID разработчика (SDK) пейвола, из которого пришла транзакция. |
| **ab_test_name** | Название A/B-теста, из которого пришла транзакция. |
| **ab_test_revision** | Ревизия A/B-теста, из которого пришла транзакция. |
| **paywall_name** | Название пейвола, из которого пришла транзакция. |
| **paywall_revision** | Ревизия пейвола, из которого пришла транзакция. |

## Устранение неполадок \{#troubleshooting\}

Adapty проверяет действительность ключей доступа **до** начала загрузки. Если хотя бы один ключ Google Cloud Storage окажется недействительным, Adapty **прерывает загрузку** и выдаёт ошибку.

Чтобы загрузки проходили без перебоев, заменяйте ключи до истечения срока их действия. Если вы обновляете ключ для **событий**, не забудьте обновить ключ для **посещений пейволов**, и наоборот.