Історія про те, як змусити Flurry збирати статистику десктопних додатків

В 2014 році за інформацією Smart Insights кількість користувачів мобільних додатків превысило кількість користувачів десктопних. Одним з найбільш популярних інструментів для збору статистики додатків на мобільних пристроях є Flurry. Інструмент повністю безкоштовний, доступний для основних мобільних платформ і має потужний функціонал. Ось основні показники, які надає даний інструмент:

  • кількість нових та активних користувачів;
  • кількість сесій і їх довжина;
  • частота використання програми;
  • статистика збоїв;
  • аудиторія програми (стать, вік, мова, географія використання);
  • інформація про версії продукту і пристроях;
  • події всередині програми;
  • навігація по екранів і т. д.
Ми испольуем Flurry в мобільних версіях ICQ. Але він не надає ні інструментарію, ні відкритого API для збору статистики для десктопних додатків. Тому ми вирішили адаптувати можливості Flurry для десктопної версії нашого застосування.



В мережі була знайдена Flurry SDK для платформи BlackBerry. Компанія Flurry надає дану бібліотеку за запитом на електронну пошту. Інтегруватися з бібліотекою для BlackBerry не вдалося, вихідні коди також не були знайдені. Але був знайдений інший шлях.

Для типу програми «Mobile Web» Flurry надає минифицированный javascript. Не залишалося нічого, крім як вичленити з нього API. Для цього було створено тестове додаток під Flurry для відстеження статистики, з документації Flurry була взята html-сторінка. Статистика з цієї html-сторінки успішно відсилалася і відображалась на сайті Flurry. Цю сторінку ми використовували в якості тесту працездатності javascript-файлу. Зазначимо, що події долітають до Flurry за 1-20 хвилин, а підсумовування по подіям відстає від реальності на 2-5 годин. Ці обставини ускладнювали тестування.

Після налаштування тестів був проведений рефакторинг минифицированного flurry.js. На початку були розпізнані функції кодування, декодування в Base64 і utf-8, хеш-функція Adler-32. Далі рефакторинг йшов з двох сторін — з функцій, які надавало js (setAppVersion, startSession, logEvent і так далі), оскільки вони мають людські імена та запитів, які js відправляло на сайт Flurry. В результаті був отриманий читабельний і при тому робочий javascript-файл, з якого вже можна було дістати API для роботи з Flurry. Вихідні коди роботи з Flurry, реалізовані на C++, можна подивитися на github.

Для використання статистики рекомендується наступний порядок дій. Спочатку необхідно зареєструватися на сайті Flurry і отримати ключ. Далі в коді визначити події, за якими буде збиратися статистика, наприклад, будемо збирати статистику за успішну відправку повідомлень:

enum class stats_events
{
...
message_sent,
...
} 

Для кожної події є можливість додавати словник параметрів, додамо довжину повідомлення:

...
event_props_type props;
props.emplace_back(std::make_pair("message_length", message_length));
...

І нам залишилося тільки викликати метод класу, який керує статистикою:

...
Statistics stats;
stats.insert_event(stats_events::message_sent, props);
...

Реальне використання можна подивитися в нашому гитхабе. З допомогою Flurry ми маємо можливість стежити за станом нашого продукту, нижче наведено графік кількості відправлених повідомлень, взятий з сторінки статистики.



Пам'ятаєте, ми говорили, що до кожної події можна прив'язати словник властивостей? Нижче наведено графік статистики за налаштувань мови:



І графік статистики операційних систем, на яких стартувало наше додаток:



Якщо ви вже використовуєте Flurry для своїх мобільних додатків, то спробуйте використовувати його і для десктопних. Вийшло, що десктопное додаток система сприймає як веб-сайт, але при цьому ви отримуєте статистику по всіх версіях програми на одному місці.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.