Интеграция с Google Analytics (GA4)

Краткий обзор: Интеграция AppsFlyer с Google Аналитикой (GA4) позволяет рекламодателям отправлять данные атрибуции и выбранные события в приложении из AppsFlyer в GA4. Эта интеграция работает с приложениями на iOS и Android, в которых уже реализован SDK Google Аналитика для Firebase.

Важно!

Эта интеграция работает с приложениями iOS и Android, в которых уже реализован SDK Google Analytics для Firebase.  Для успешной интеграции SDK AppsFlyer должен собирать значение app_instance_id из SDK Firebase. См. инструкцию о том, как извлечь идентификатор экземпляра приложения из SDK Firebase.

Как это работает?

  • Когда происходит новая установка, AppsFlyer отправляет в GA4 детали точки касания – медиаисточник, название кампании и идентификатор кампании. Также отправляется app_instance_id от SDK Firebase, чтобы обеспечить запись точки касания в GA4 для этого пользователя.
  • Когда происходит внутреннее событие приложения, GA4 будет атрибутировать событие к последней точке касания.

Настройка интеграции с Google Analytics (GA4)

Настроить интеграцию с Google Analytics (GA4) с помощью инструкции ниже.

1. На Маркетплейсе партнёров выберите Google Analytics (GA4).

Необходимые условия: Перед настройкой интеграции обязательно свяжитесь с партнёром и откройте у него аккаунт.

Чтобы активировать или изменить интеграцию:

  1. Чтобы активировать: В AppsFlyer в боковом меню выберите Сотрудничество> Маркетплейс партнёров. Чтобы изменить: В AppsFlyer в боковом меню выберите Сотрудничество> Активные интеграции.
  2. Найдите Google Аналитику (GA4) и выберите её.
  3. Нажмите Настроить интеграцию. Вы будете перенаправлены на страницу настройки интеграции.

Конфигурация Google Аналитики включает в себя только вкладку Интеграция.

Подробное описание заголовка окна «Partner Configuration» (Настройки партнёра) см. здесь.

2. Настройте интеграцию GA4 в AppsFlyer.

Настройте следующие параметры:

  1. На вкладке Интеграция выберите приложение для интеграции и нажмите Активировать партнёра.

    Примечание: статус этого переключателя должен быть (activated)/(включён) всё время, пока вы работаете с этим партнёром.

    Дополнительная информация по активации партнёров доступна здесь.

  2. В идентификаторе приложения Firebase введите идентификатор приложения Firebase. Чтобы узнать, как найти идентификатор приложения Firebase, см. документацию Firebase.
  3. В строке API Secret введите API Secret (API секрет) для аутентификации постбэков в Google Аналитике. API Secret генерируется через пользовательский интерфейс Google Аналитики. Чтобы просмотреть, отредактировать или создать API секрет, следуйте инструкциям в документации Google. Когда вас попросят выбрать поток веб-данных, выберите поток данных для Android или iOS.
  4. Включите Идентификатор пользователя клиента, чтобы отправлять идентификатор пользователя клиента (CUID) вместо рекламного идентификатора (IDFA).
  5. В разделе Постбэки по умолчанию, в разделе для пользователей из, выберите Все медиаисточники, включая органические.

     Примечание

    Постбэк установки включает только детали точки касания (медиаисточник, название кампании и идентификатор кампании).

3. Постбэки по внутренним событиям приложений.

На вкладке Интеграция сопоставьте события в приложении AppsFlyer с событиями Google Аналитики (GA4), отправляемыми через постбэки.

 Примечание

  • Постбэки для мобильных событий в приложении, отправленные через S2S, не поддерживаются.
  • GA4 не удаляет дубликаты событий, отправленных из SDK Firebase и AppsFlyer. Поэтому мы рекомендуем настраивать постбэки внутренних событий приложений только для событий, которые уже не отправляются в GA4 через SDK Firebase.
  1. Активируйте Постбэки по внутренним событиям приложения.
  2. Чтобы добавить в список событие, определенное в SDK, нажмите Добавить событие. В таблице ниже описаны поля, которые необходимо заполнить:

    Имя параметра Описание
    Событие AppsFlyer

    Название события, полученное от SDK AppsFlyer, интегрированного в ваше приложение.

    Совет: Не нашли здесь нужное событие?

    • Убедитесь, что событие активировано на устройстве с неорганической установкой, и повторите поиск.
    • Введите его в поле Событие AppsFlyer и нажмите Добавить другое.

    Подробнее о сопоставлении пользовательских событий читайте здесь.

    сопоставлено с событием партнёра

    Уникальное имя или идентификатор каждого события, определённые партнёром. Возможны следующие настройки сопоставления:

    • Текстовое поле: Получите соответствующий идентификатор события от партнёра.
    • Раскрывающийся список: Выберите наиболее подходящее предопределённое событие AppsFlyer.
    • Как есть: События отправляются в исходном виде, без сопоставления названий.
    для пользователей от

    Выберите вариант отправки для события:

    • Все медиа-источники и органический трафик: Отправляйте постбэки для событий, связанных с любым партнёром, а также для органических событий.
    включая
    • Без данных (по умолчанию): Отправлять только само событие без каких-либо значений.
    • Значения и доход: отправляются все параметры события, включая значение дохода (если оно есть в событии).
    • Значения без дохода: Отправляются все параметры, за исключением значения выручки.
  3. [Необязательно] Нажмите на значок (condition-2.png) Добавить условие, чтобы задать условия для события.
  4. Нажмите Сохранить интеграцию.
  5. Отправьте сопоставление постбэка события.

4. Отправьте сопоставление события постбэка своему разработчику.

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

  • Событие AF (AF event): название события AppsFlyer.
  • Сопоставлено с событием Google (Mapped to Google event): название события в Google Аналитике.

    Важно!

    Не используйте зарезервированные события Google в качестве названий для пользовательских событий Google Аналитики.

  • Параметры события AF (AF event parameters) [ОБЯЗАТЕЛЬНО]: Предопределённые параметры событий AppsFlyer, которые должны быть включены в постбэк события, отправляемого в Google Аналитику.

    Важно!

    Обязательно включайте все предопределённые параметры событий AF в определение события в таком же виде, как они указаны в таблице. Несоблюдение этого требования приведёт к отклонению постбэка Google Аналитика.

Таблица сопоставления событий

Следующая таблица включает в себя все события Google Аналитики и их предопределённые параметры AppsFlyer. Отправьте своему разработчику таблицу, содержащую только те события, которые вы сопоставили.

 

Рекомендуемое название AF (необязательно) Имя события Google Ads Предопределённые параметры события AF (Predefined AF event parameters) [ОБЯЗАТЕЛЬНО]
af_add_payment_info add_payment_info af_currency, af_revenue, af_price, af_content_id, af_content
  add_shipping_info af_currency, af_revenue, af_price, af_content_id, af_content
af_add_to_cart add_to_cart af_currency, af_revenue, af_price, af_content_id, af_content
af_add_to_wishlist add_to_wishlist af_currency, af_revenue, af_price, af_content_id, af_content
af_initiated_checkout begin_checkout af_currency, af_revenue, af_price, af_content_id, af_content
  campaign_details campaign_id, campaign_name
af_spent_credits earn_virtual_currency af_revenue
  generate_lead af_currency,af_revenue
  join_group  
af_level_achieved level_up  
af_login login  
  post_score af_user_score
af_purchase purchase af_currency, af_revenue, af_price, af_content_id, af_content, af_receipt_id
  refund af_currency, af_revenue, af_price, af_content_id, af_content, af_receipt_id
  remove_from_cart af_currency, af_revenue, af_price, af_content_id, af_content
  screen_view  
af_search search  
  select_content  
  select_item af_price, af_content_id, af_content
  select_promotion af_price, af_content_id, af_content
  share  
  sign_up  
  spend_virtual_currency af_revenue
  tutorial_begin  
af_tutorial_completion tutorial_complete  
af_achievement_unlocked Unlock_achievement af_achievement_id
  view_cart af_currency, af_revenue, af_price, af_content_id, af_content
  view_item af_currency, af_revenue, af_price, af_content_id, af_content
  view_item_list af_price, af_content_id, af_content
  view_promotion af_currency, af_revenue, af_price, af_content_id, af_content
  view_search_results  
af_ad_view ad_impression af_currency, af_revenue

Зарезервированные названия событий Google

Следующие названия событий зарезервированы и не могут использоваться в качестве пользовательских названий событий:

  • ad_activeview
  • ad_click
  • ad_exposure
  • ad_query
  • ad_reward
  • adunit_exposure
  • app_clear_data
  • app_exception
  • app_install
  • app_remove
  • app_store_refund
  • app_update
  • app_upgrade
  • dynamic_link_app_open
  • dynamic_link_app_update
  • dynamic_link_first_open
  • error
  • firebase_campaign
  • firebase_in_app_message_action
  • firebase_in_app_message_dismiss
  • firebase_in_app_message_impression
  • first_open
  • first_visit
  • in_app_purchase
  • notification_dismiss
  • notification_foreground
  • notification_open
  • notification_receive
  • notification_send
  • os_update
  • session_start
  • user_engagement

5. Получите идентификатор экземпляра приложения в SDK AppsFlyer

Идентификатор экземпляра приложения уникально идентифицирует конкретную установку приложения Firebase. SDK получает это значение из SDK Firebase.

Ваш разработчик реализует код для:

  1. сбора данных поля app_instance_id из Firebase.
  2. вызова setAdditionalData перед первым запуском, для включения идентификатора приложения и ga_session_id (если используется) в установки, сессии и внутренние события приложения.

Важно!

setAdditionalData (Android / Unity / React Native) и customData (iOS) принимают отображение пар ключ-значение. Если ваше приложение отправляет как app_instance_id, так и ga_session_id (см. шаг 6), отправьте их вместе в одном отображении, чтобы оба значения были включены. Если вы отправите их в отдельных setAdditionalData вызовах, более поздний вызов перезапишет более ранний.

Нативный Android Нативный iOS Unity Нативный React

Kotlin


FirebaseAnalytics.getInstance(this).appInstanceId.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       AppsFlyerLib.getInstance().setAdditionalData("app_instance_id", task.result)
    }
}

 

Java


FirebaseAnalytics.getInstance(this).getAppInstanceId().addOnCompleteListener(task -> {
       if (task.isSuccessful()) {
           AppsFlyerLib.getInstance().setAdditionalData("app_instance_id", task.getResult());
       }
  });

Справочник API: setAdditionalData

Нативный iOS


let appInstanceId = Analytics.appInstanceID()
    AppsFlyerLib.shared().customData = ["app_instance_id": appInstanceId]

 

Objective C


(void) fetchAnalyticsInstanceId {
           NSString *instanceID = [FIRAnalytics appInstanceID];
           [[AppsFlyerLib shared] setAdditionalData:@{@"app_instance_id": instanceID}];
}

Справочник API: customData


using Firebase.Analytics;
    public class AnalyticsManager : MonoBehaviour
    {
        private async void Start()
        {
           AppsFlyer.initSDK(devKey, appID, this);
           string appInstanceId = await FirebaseAnalytics.GetAnalyticsInstanceIdAsync();
           Dictionary <string, string> customData = new Dictionary<string, string>();
           customData.Add("app_instance_id", appInstanceId);
           AppsFlyer.setAdditionalData(appInstanceId);
           AppsFlyer.startSDK();
        }
}

Справочник API: setAdditionalData

Справочник API: setAdditionalData

6. Получите идентификатор сессии GA4 в SDK AppsFlyer.

ga_session_id уникально идентифицирует сессию в приложении Firebase. Это значение должно быть получено из SDK Firebase и отправлено в GA4 с использованием API setAdditionalData.

Ваш разработчик реализует код для:

  1. сбора данных поля ga_session_id из Firebase.
  2. Вызовите setAdditionalData перед первым запуском для включения идентификатора сессии (и app_instance_id, если используется).
  3. Используйте ключ ga_session_id при вызове API.

Важно!

setAdditionalData (Android / Unity / React Native) и customData (iOS) принимают отображение пар ключ-значение. Если ваше приложение отправляет как app_instance_id, так и ga_session_id (см. шаг 5), отправьте их вместе в одном отображении, чтобы оба значения были включены. Если вы отправите их в отдельных setAdditionalData вызовах, более поздний вызов перезапишет более ранний.

Нативный Android Нативный iOS Unity

Kotlin


FirebaseAnalytics.getInstance(this).sessionId.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        AppsFlyerLib.getInstance().setAdditionalData("ga_session_id", task.result)
    }
}

 

Java


FirebaseAnalytics.getInstance(this).getSessionId().addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        AppsFlyerLib.getInstance().setAdditionalData("ga_session_id", task.getResult());
    }
});

Справочник API: setAdditionalData

Swift


if #available(iOS 14.0, *) {
    Analytics.sessionID { sessionID, error in
        if let sessionID = sessionID {
            AppsFlyerLib.shared().customData = ["ga_session_id": sessionID]
        }
    }
}

 

Objective-C


- (void)fetchAnalyticsSessionId {
    if (@available(iOS 14.0, *)) {
        [FIRAnalytics sessionIDWithCompletion:^(NSString * _Nullable sessionID, NSError * _Nullable error) {
            if (sessionID) {
                [[AppsFlyerLib shared] setAdditionalData:@{@"ga_session_id": sessionID}];
            }
        }];
    }
}

Справочник API: customData


using Firebase.Analytics;
using System.Threading.Tasks;
using AppsFlyerSDK;
using UnityEngine;
using System.Collections.Generic;

public class AnalyticsManager : MonoBehaviour
{
    private async void Start()
    {
        AppsFlyer.initSDK("yourDevKey", "yourAppID", this);

        // Get session ID
        string sessionId = await FirebaseAnalytics.GetSessionIdAsync();

        Dictionary<string, string> customData = new Dictionary<string, string>();
        customData.Add("ga_session_id", sessionId);
        AppsFlyer.setAdditionalData(customData);

        AppsFlyer.startSDK();
    }
}

Справочник API: setAdditionalData

7. Выполните валидацию интеграции GA4

Убедитесь, что события в постбэках, которые вы отправляете в GA4, зарегистрированы и прочитаны Google аналитикой. Существует два метода, которые рекламодатели могут использовать для просмотра своих данных:

  • Используя GA4 Исследования, вы можете исследовать сырые данные событий со всеми связанными параметрами. Необходимые условия: в вашем ресурсе должен быть настроен экспорт Big Query.
  • Отчёт о событиях позволяет рекламодателям просматривать свои события с постбэками. Отчёт можно найти в одной или нескольких коллекциях отчётов.
    Например, Отчёты о событиях можно найти в коллекциях Жизненный цикл или Отчётность по играм в разделе Вовлеченность > События
    Для получения дополнительной информации об отчёте о событиях см. документацию Google.
  • Отчёт о привлечении трафика помогает вам понять, откуда приходят ваши посетители сайта и приложения.

    В разделе Коллекция жизненного цикла перейдите в Привлечение > Привлечение трафика).

    Для получения дополнительной информации об отчёте о привлечении трафика см. документацию Google.