Реализация Custom Event Tracking для мониторинга бизнес-метрик мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Custom Event Tracking для мониторинга бизнес-метрик мобильного приложения
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    864
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация Custom Event Tracking для мониторинга бизнес-метрик мобильного приложения

Стандартные события screen_view и app_open отвечают на вопрос «пользователь был в приложении». Custom Event Tracking отвечает на вопросы бизнеса: сколько пользователей дошло до оплаты, какой тип контента приводит к подписке, в какой момент flow регистрации пользователи уходят.

Без продуманной таксономии событий трекинг превращается в свалку: 400 уникальных event names, половина из которых устарела, данные от iOS и Android называются по-разному, и никто не может ответить, что значит btn_click_3.

Таксономия событий

Хорошая схема именования — [object]_[verb] или [screen]_[action]:

product_viewed
product_added_to_cart
checkout_started
checkout_step_completed  ← с property step_name
checkout_abandoned
payment_initiated
payment_succeeded
payment_failed           ← с property error_code
subscription_started
subscription_cancelled

Антипаттерн: buttonClicked, screenOpened, userAction — эти события ничего не говорят без дополнительного контекста.

Схема свойств (Property Schema)

Каждое событие имеет набор свойств. Схему нужно зафиксировать в документе (или в системе вроде Avo.app, Segment Protocols) до начала реализации:

Событие Обязательные свойства Опциональные
product_viewed product_id, product_name, category source, position
checkout_started cart_total, item_count promo_code
payment_succeeded order_id, total, currency, payment_method installments
subscription_started plan_id, billing_period, price trial_used

Реализация: Android + Firebase Analytics

// Wrapper над FirebaseAnalytics для типобезопасности
object Analytics {
    private val firebaseAnalytics = FirebaseAnalytics.getInstance(context)

    fun trackProductViewed(product: Product, source: String) {
        firebaseAnalytics.logEvent("product_viewed") {
            param("product_id", product.id)
            param("product_name", product.name)
            param("category", product.category)
            param("price", product.price)
            param("currency", "USD")
            param("source", source)
        }
    }

    fun trackCheckoutStarted(cart: Cart) {
        val items = cart.items.mapIndexed { index, item ->
            Bundle().apply {
                putString(FirebaseAnalytics.Param.ITEM_ID, item.productId)
                putString(FirebaseAnalytics.Param.ITEM_NAME, item.name)
                putDouble(FirebaseAnalytics.Param.PRICE, item.price)
                putLong(FirebaseAnalytics.Param.QUANTITY, item.quantity.toLong())
                putLong(FirebaseAnalytics.Param.INDEX, index.toLong())
            }
        }
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.BEGIN_CHECKOUT) {
            param(FirebaseAnalytics.Param.VALUE, cart.total)
            param(FirebaseAnalytics.Param.CURRENCY, "USD")
            param(FirebaseAnalytics.Param.ITEMS, items.toTypedArray())
        }
    }
}

Используем стандартные константы FirebaseAnalytics.Event.* и FirebaseAnalytics.Param.* для e-commerce событий — они автоматически маппятся в Google Ads и BigQuery без дополнительной настройки.

Реализация: iOS + Amplitude

// Amplitude SDK v1.x (Swift)
import AmplitudeSwift

final class AnalyticsService {
    static let shared = AnalyticsService()

    private let amplitude = Amplitude(
        configuration: Configuration(
            apiKey: "YOUR_API_KEY",
            defaultTracking: DefaultTrackingOptions(
                sessions: true,
                appLifecycles: true,
                deepLinks: false,  // управляем вручную
                screenViews: false // управляем вручную
            )
        )
    )

    func trackPaymentSucceeded(order: Order) {
        amplitude.track(
            eventType: "payment_succeeded",
            eventProperties: [
                "order_id": order.id,
                "total": order.total,
                "currency": order.currency,
                "payment_method": order.paymentMethod.rawValue,
                "item_count": order.items.count
            ]
        )
    }

    // Глобальные свойства пользователя
    func setUserProperties(user: User) {
        let identify = Identify()
        identify.set(property: "plan", value: user.plan.rawValue)
        identify.set(property: "registration_date", value: user.registrationDate.iso8601)
        amplitude.identify(identify: identify)
    }
}

Дедупликация событий

Одна из частых проблем — событие стреляет дважды. Например, payment_succeeded вызывается и при успешном ответе API, и в completion handler URLSession:

// Android — гарантируем однократную отправку
class CheckoutViewModel : ViewModel() {
    private var paymentEventSent = false

    fun onPaymentSuccess(order: Order) {
        if (paymentEventSent) return
        paymentEventSent = true
        Analytics.trackPaymentSucceeded(order)
    }
}

Для e-commerce событий Firebase рекомендует передавать transaction_id — это позволяет дедуплицировать на уровне аналитической платформы.

Тестирование трекинга

Без верификации события уходят в продакшен непроверенными — и через месяц обнаруживается, что purchase на iOS и payment_success на Android — это одно и то же событие с разными именами.

# Firebase DebugView — включить на устройстве
adb shell setprop debug.firebase.analytics.app com.myapp

# Amplitude — debug mode
amplitude.configuration.logLevel = LogLevelEnum.DEBUG

Инструмент Avo.app позволяет создать схему событий и сгенерировать типизированный SDK-wrapper для iOS/Android — нарушение схемы сразу видно на compile time.

Что делаем

  • Проектируем таксономию событий вместе с продакт-командой
  • Создаём схему свойств с разбивкой на обязательные и опциональные
  • Реализуем typed wrapper над Firebase/Amplitude/Mixpanel
  • Настраиваем DebugView для верификации событий на этапе разработки
  • Конфигурируем BigQuery export для сырых данных
  • Создаём первичный дашборд конверсионной воронки

Сроки

Таксономия и схема событий: 1 день. Реализация wrapper и интеграция в кодовую базу: 2–4 дня. Стоимость рассчитывается индивидуально.