Как отправлять свойства пользователей

Свойства пользователей описывают разные сегменты пользовательской базы (по языку, географическому местоположению и т. д.). Некоторые свойства пользователей регистрируются автоматически. Если вам нужны дополнительные сведения, можно добавлять до 25 свойств пользователей на проект. Подробнее…

Данные о свойствах пользователей помогают лучше сегментировать аудиторию, но часто они доступны только на стороне сервера. Measurement Protocol позволяет дополнять данные, собранные на стороне клиента, информацией с сервера. Обычно это невозможно сделать, используя только клиентские решения.

Зарезервированные названия

Эти названия свойств пользователей зарезервированы, и вы не можете их использовать:

  • first_open_time
  • first_visit_time
  • last_deep_link_referrer
  • user_id
  • first_open_after_install

Также названия свойств пользователей не могут начинаться с таких префиксов:

  • google_
  • ga_
  • firebase_

Пример использования

Допустим, у нас есть CRM-система со свойством пользователей customer_tier, у которого может быть два значения: premium и standard. Вы хотите добавить свойство customer_tier в отчеты. Вот как это реализовать.

Сначала клиент должен отправить событие add_payment_info вместе с вызовом API сервера, у которого есть доступ к вашей CRM-системе:

Клиентский код

FirebaseAnalytics.logEvent("add_payment_info")
ServerAPI.addCustomerTier(
  FirebaseAnalytics.getAppInstanceId(),
  "[{name: \"add_payment_info\"}"]
);

Затем ваш сервер дополняет данные о взаимодействии свойством пользователя customer_tier с помощью Measurement Protocol:

Серверный код

const firebaseAppId = "FIREBASE_APP_ID";
const apiSecret = "API_SECRET";

function addCustomerTier(appInstanceId, events) {

  // Request the customer tier from the CRM.
  const customerTier = getCustomerTier(appInstanceId);

  const queryParams = `?firebase_app_id=${firebaseAppId}&api_secret=${apiSecret}`;
  fetch(`https://www.google-analytics.com/mp/collect${queryParams}`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      "app_instance_id": "APP_INSTANCE_ID",
      "user_properties": {
        "customer_tier": {
          "value": "CUSTOMER_TIER"
        }
      },
      "events": JSON.parse(events)
    })
  });
}

Эти данные помогут разбить пользовательскую базу на два сегмента: premium и standard.

Подробную информацию о том, как отправлять события с помощью Measurement Protocol, можно найти в статье Отправка событий.

Переопределить временную метку

Measurement Protocol использует первую временную метку, найденную в следующем списке, для каждого свойства пользователя в запросе:

  1. timestamp_micros записи в user_properties.
  2. timestamp_micros запроса
  3. Время, когда Measurement Protocol получает запрос.

В примере ниже показано, как отправить временную метку на уровне запроса, которая применяется ко всем свойствам пользователя в запросе. В результате Measurement Protocol присваивает свойствам пользователя customer_tier и customer_group временную метку requestUnixEpochTimeInMicros.

{
  "timestamp_micros": requestUnixEpochTimeInMicros,
  "user_properties": {
      "customer_tier": {
        "value": customerTierValue
      },
      "customer_group": {
        "value": customerGroupValue
      }
  }
}

В приведенном ниже примере отправляются временная метка на уровне запроса и временная метка для свойства пользователя customer_tier. В результате Measurement Protocol присваивает событию customer_tier временную метку customerTierUnixEpochTimeInMicros, а событию customer_group – временную метку requestUnixEpochTimeInMicros.

"timestamp_micros": requestUnixEpochTimeInMicros,
"user_properties": {
    "customer_tier": {
      "value": customerTierValue,
      "timestamp_micros": customerTierUnixEpochTimeInMicros
    },
    "customer_group": {
      "value": customerGroupValue
    }
}