Подключение MyTracker Personalize Премиум план

Чтобы подключить MyTracker Personalize к мобильному приложению и запустить персональные рекомендации для пользователей, нужно выполнить три шага:

  1. Подключить MyTracker SDK
  2. Задать настройки рекомендаций
  3. Настроить интеграцию с Personalize API

1. Подключение MyTracker SDK

MyTracker SDK соберёт статистику по каждому пользователю приложения и сформирует базу данных необходимую для построения рекомендаций.

  1. Подключите SDK к приложениям, с которыми будет взаимодействовать пользователь. Подробнее см. разделы iOS, Android, Unity.
  2. Убедитесь, что вы настроили трекинг покупок и верификацию платежей. Подробнее см. раздел Трекинг покупок.
  3. Выберите способ идентификации пользователей:
    • Если ваше приложение предусматривает регистрацию, и каждый пользователь получает уникальный идентификатор, то настройте трекинг пользователей через параметр customUserId (см. документацию на iOS, Android, Unity).
    • customUserId не должен меняться с момента первого запуска приложения

    • Если в приложении нет системы регистрации или уникальный идентификатор присваивается не с самого начала использования приложения, то настройте получение instanceId (см. документацию на iOS, Android, Unity) и отправляйте instanceId в параметре customUserId.
    • instanceId идентифицирует физическое устройство, но не пользователя, поэтому рекомендация для одного и того же пользователя может отличаться на разных платформах


  4. Согласно инструкции по передаче произвольных событий (для iOS, Android, Unity), настройте отправку следующих событий:
    • Триггер товара offer_trigger
    • Покупка товара purchase_offer
    • Открытие/закрытие карточки товара offer_card
    • Состояние аккаунта пользователя account_status

    Все события должны отправляться с устройства (не с сервера). При отправке событий, рекомендуем указывать параметр flush, чтобы события не скапливались в буфере, (см. инструкцию по принудительной отправке событий для iOS, Android, Unity).

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

    Ниже дано подробное описание перечисленных событий и их параметров.

Триггер товара

Событие offer_trigger должно отправляться в тот момент, когда пользователь попадает под условие показа товара или выпадает из этого условия (например, начинает/заканчивает действовать акция в приложении).

Параметры события должны быть переданы в виде строки:

Название параметра Описание Пример
action* Если пользователь начал попадать под условия показа товара, то значение параметра — "start". Если перестал попадать — "end". "start"
placement_id* ID места размещения товара "A"
sku** Название бандла в сторе (может быть не уникальным для предмета в сторе) "com.app.10dollars"
payload** Уникальное название предмета внутри приложения "offer.for.unpaid"
timestamp* Дата и время события в timestamp (UTC+3 в секундах) "1597316958"

* — обязательный параметр.

** — обязательный параметр для рекомендации item и необязательный для рекомендации set.

Пример кода:

let eventCustomParams = [
    "action": "start",
    "placement_id": "A",
    "payload": "offer.for.unpaid",
    "timestamp": "1597316958"
]
MRMyTracker.trackEvent(withName: "offer_trigger", eventParams:eventCustomParams)
val eventCustomParams = HashMap<String, String>()
    eventCustomParams["action"] = "start";
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.trackCustomEvent("offer_trigger", eventCustomParams);
var IDictionary<String, String> eventCustomParams = new Dictionary<String, String>();
    eventCustomParams["action"] = "start";
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.TrackEvent("offer_trigger", eventCustomParams));

Покупка товара

Событие purchase_offer должно отправляться непосредственно после покупки/попытки покупки товара, участвующего в рекомендации.

Если в покупке несколько товаров, то каждый из них должен быть отправлен отдельным событием.

Параметры события должны быть переданы в виде строки:

Название параметра Описание Пример
placement_id* ID места размещения товара "A"
placement_type Тип места размещения предмета (поскольку карточка с товаром может быть доступна с разных экранов приложения).

Значение по умолчанию: "any"
"main"
"store"
"pop-up"
sku* Название бандла в сторе (может быть не уникальным для предмета в сторе) "com.app.10dollars"
payload* Уникальное название предмета внутри приложения "offer.for.unpaid"
result* Успех покупки (списание денег) "true"
"false"
offer_id* Идентификатор товара "42"
timestamp* Дата и время покупки в timestamp (UTC+3 в секундах) "1597316958"

* — обязательный параметр.

let eventCustomParams = [
    "placement_id":"A",
    "placement_type":"store",
    "sku": "com.app.10dollars",
    "payload": "offer.for.unpaid",
    "result": "true",
    "offer_id": "42",
    "timestamp":"1597316958"
]
MRMyTracker.trackEvent(withName: "purchase_offer", eventParams:eventCustomParams)
val eventCustomParams = HashMap<String, String>()
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["placement_type"] = "store";
    eventCustomParams["sku"] = "com.app.10dollars";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["result"] = "true";
    eventCustomParams["offer_id"] = "42";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.trackCustomEvent("purchase_offer", eventCustomParams);
var IDictionary<String, String> eventCustomParams = new Dictionary<String, String>();
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["placement_type"] = "store";
    eventCustomParams["sku"] = "com.app.10dollars";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["result"] = "true";
    eventCustomParams["offer_id"] = "42";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.TrackEvent("purchase_offer", eventCustomParams));

Открытие/закрытие карточки товара

Событие offer_card должно отправляться при каждом открытии/закрытии карточки/экрана с товаром, участвующего в рекомендации.

Параметры события должны быть переданы в виде строки:

Название параметра Описание Пример
action* Действие с карточкой товара: открытие "open" или закрытие "close". Если пользователь открыл и закрыл карточку, то нужно отправить 2 события с разным action "open"
placement_id* ID места размещения товара "A"
placement_type Тип места размещения предмета (поскольку карточка с товаром может быть доступна с разных экранов приложения).

Значение по умолчанию "any"
"main"
"store"
"pop-up"
sku** Название бандла в сторе (не уникально для предмета) "com.app.10dollars"
payload** Уникальное название предмета внутри приложения "offer.for.unpaid"
offer_id* Идентификатор предмета "42"
timestamp* Дата и время открытия/закрытия карточки в timestamp (UTC+3 в секундах) "1597316958"

* — обязательный параметр.

** — обязательный параметр для рекомендации item и необязательный для рекомендации set.

let eventCustomParams = [
    "action": "open",
    "placement_id": "A",
    "placement_type": "store",
    "sku": "com.app.10dollars",
    "payload": "offer.for.unpaid",
    "offer_id": "42",
    "timestamp":"1597316958"
]
MRMyTracker.trackEvent(withName: "offer_card", eventParams:eventCustomParams)
val eventCustomParams = HashMap<String, String>()
    eventCustomParams["action"] = "open";
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["placement_type"] = "store";
    eventCustomParams["sku"] = "com.app.10dollars";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["offer_id"] = "42";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.trackCustomEvent("offer_card", eventCustomParams);
var IDictionary<String, String> eventCustomParams = new Dictionary<String, String>();
    eventCustomParams["action"] = "open";
    eventCustomParams["placement_id"] = "A";
    eventCustomParams["placement_type"] = "store";
    eventCustomParams["sku"] = "com.app.10dollars";
    eventCustomParams["payload"] = "offer.for.unpaid";
    eventCustomParams["offer_id"] = "42";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.TrackEvent("offer_card", eventCustomParams));

Состояние аккаунта пользователя

Событие account_status должно отправляться не реже, чем при каждом запуске приложения.

В таблице ниже приведены общие параметры, которые могут охарактеризовать состояние аккаунта. Попробуйте найти аналог в своём приложении для максимального числа перечисленных параметров. Чтобы добавить дополнительные параметры, свяжитесь со службой поддержки MyTracker.

Параметры события должны быть переданы в виде строки:

Название параметра Описание Пример
in_game_currency_<name> Любые балансы внутриигровых ресурсов, где name — название ресурса "444"
in_game_currency_diamonds Любые балансы внутриигровых ресурсов, например кристаллы "5"
in_game_currency_food Любые балансы внутриигровых ресурсов, например еда "5"
in_game_currency_gold Любые балансы внутриигровых ресурсов, например золото "5"
account_level Уровень аккаунта "5"
clan ID клана "123123123",
"0" — если не состоит в клане
achievements_count Количество достижений "12"
ranking Рейтинг аккаунта "99"
power Ценность аккаунта "12312312"
friends_count Количество друзей "56"
matches_count Количество матчей "21312"
wins_count Количество побед "12121"
timestamp* Дата и время события в timestamp (UTC+3 в секундах) "1597316958"

* — обязательный параметр.

let eventCustomParams = [
    "in_game_currency_diamonds": "5",
    "in_game_currency_food": "10001",
    "in_game_currency_gold": "356",
    "account_level": "5",
    "clan": "123123123",
    "achievements_count": "12",
    "ranking": "99",
    "power": "12312312",
    "friends_count": "56",
    "matches_count": "21312",
    "wins_count": "12121",
    "timestamp": "1597316958"
]
MRMyTracker.trackEvent(withName: "account_status", eventParams:eventCustomParams)
val eventCustomParams = HashMap<String, String>()
    eventCustomParams["in_game_currency_diamonds"] = "5";
    eventCustomParams["in_game_currency_food"] = "10001";
    eventCustomParams["in_game_currency_gold"] = "356";
    eventCustomParams["account_level"] = "5";
    eventCustomParams["clan"] = "123123123";
    eventCustomParams["achievements_count"] = "12";
    eventCustomParams["power"] = "12312312";
    eventCustomParams["friends_count"] = "56";
    eventCustomParams["matches_count"] = "21312";
    eventCustomParams["wins_count"] = "12121";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.trackCustomEvent("account_status", eventCustomParams);
var IDictionary<String, String> eventCustomParams = new Dictionary<String, String>();
    eventCustomParams["in_game_currency_diamonds"] = "5";
    eventCustomParams["in_game_currency_food"] = "10001";
    eventCustomParams["in_game_currency_gold"] = "356";
    eventCustomParams["account_level"] = "5";
    eventCustomParams["clan"] = "123123123";
    eventCustomParams["achievements_count"] = "12";
    eventCustomParams["power"] = "12312312";
    eventCustomParams["friends_count"] = "56";
    eventCustomParams["matches_count"] = "21312";
    eventCustomParams["wins_count"] = "12121";
    eventCustomParams["timestamp"] = "1597316958";
MyTracker.TrackEvent("account_status", eventCustomParams));

2. Настройка рекомендаций

Свяжитесь с командой MyTracker для настройки персональных рекомендаций:

Для связи вы можете использовать любой удобный вам способ

  1. Выберите показатель, который вы хотите улучшить, например APRU или CR. По выбранной метрике вы сможете оценить эффективность использования рекомендаций.
  2. Выберите товар, который будет участвовать в рекомендации: один предмет или набор предметов (item или set).
  3. Определите целевую аудиторию, для которой будет строится рекомендация:
    • вся аудитория приложения
    • сегмент аудитории, который можно задать по нескольким параметрам (подробнее см. раздел Сегменты)
    • аудитория, которую нельзя определить с помощью сегмента (в этом случае вы можете предоставить словесное описание целевой аудитории)
  4. Определите все возможные предложения по товару, среди которых MyTracker Personalize будет подбирать рекомендации. Каждое предложение должно быть описано следующими полями:
    • offer_id — идентификатор товара, который соответствует паре sku+payload (должен совпадать с тем, который отправляется в кастомных событиях).
    • sku — идентификатор товара в магазине приложений (sku соответствует цене предмета в магазине).
    • payload — уникальное внутреннее имя товара в приложении.

    Вместе со всеми возможными вариантами товара, необходимо передать резервный вариант, параметры которого должны быть идентичны контрольному

    Например, три варианта товара для получения рекомендации item:
    offer_id sku payload Является контрольным вариантом, который показывается по умолчанию
    "0" "com.app.id.1" "offer.for.unpaid" да (резервный)
    "1" "com.app.id.1" "offer.for.unpaid" да
    "2" "com.app.id.2" "offer.for.unpaid" нет
    "3" "com.app.id.3" "offer.for.unpaid" нет
    Например, три варианта товара для получения рекомендации set:
    offer_id sku payload Является контрольным вариантом, который показывается по умолчанию
    "0" subscription_month "month" да (резервный)
    "0" subscription_year "year" да (резервный)
    "0" subscription_forever "forever" да (резервный)
    "1" subscription_month "month" да
    "1" subscription_year "year" да
    "1" subscription_forever "forever" да
    "2" subscription_month "month" нет
    "2" subscription_year "year" нет
    "2" subscription_forever "forever" нет
    "3" subscription_month "month" нет
    "3" subscription_year "year" нет
    "3" subscription_forever "forever" нет
  5. Определите параметры A/B тестирования:
    • Перечислите платформы, на которых будет проведено тестирование: iOS, Android.
    • Определите размер контрольной и тестируемой групп. Например, в сегменте Игроки с 10 уровнем для 30% игроков показывать стандартную цену, а для 70% игроков — предложение от Personalize.
    • Выберите дефолтный товар (item или set), который попадёт в контрольную группу.
    • Задайте идентификаторы мест, где будут крутиться предложения — placement_id. Для каждого теста должен быть задан свой placement_id.
  6. Определите характер показа рекомендаций:
    • Как часто можно менять цену на товар.
    • Какая периодичность и продолжительность показов товара (например, предложение показывается по таймеру, по выходным каждую неделю и т.д.).

3. Интеграция с Personalize API

Настройте интеграцию с Personalize API, чтобы в режиме реального времени отправлять запросы на рекомендацию на сервер MyTracker и показывать персонализированные предложения внутри приложения.

  1. Ознакомьтесь с особенностями отправки запросов:
    • Запросы с разных платформ (iOS, Android, Unity, Flutter) должны приходить отдельно, каждый со своим sdk_key. Чтобы получить sdk_key нужно подключить SDK к приложению.
  2. Выберите один из вариантов отправки запросов:
    • С мобильного устройства. В этом случае оптимальным будет асинхронный запрос на получение рекомендаций сразу после загрузки приложения.
    • С бэкенда мобильного приложения. Рекомендуем отправлять запросы не раньше, чем пользователь получит доступ к рекомендуемым товарам, чтобы MyTracker успел собрать как можно больше сведений о пользователе. Повторные запросы необходимо совершать как минимум раз в сутки.
  3. Предусмотрите следующие возможности:
    • Кэширование последних рекомендаций на стороне клиента. Это нужно для того, чтобы при неполадках в сети, задержке в получении рекомендации или ошибке со стороны сервера, отдать самую актуальную рекомендацию для пользователя.
    • Асинхронная отправка запроса.
    • Использование параметра reset в запросах к API (опционально). Если reset=True, то сервис отдает самую свежую рекомендацию для пользователя (цена товара может измениться). Если reset=False, то будет возвращена последняя выданная ранее рекомендация (цена товара останется прежней).

Документацию на API смотрите в разделе Personalize API.

Результаты

После подключения MyTracker Personalize, пользователи приложения будут получать индивидуальные предложения. В зависимости от заданных вами условий, рекомендуемые цены могут быть отображены как скидка или как цена по умолчанию:



Автоматические отчёты по результатам A/B теста и сведения о прибыли, полученной в результате персональных рекомендаций, будут приходить вам на почту, в Telegram-канал или другим удобным для вас способом.

Была ли эта статья полезна?