В 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 для своих мобильных приложений, то попробуйте использовать его и для десктопных. Получилось, что десктопное приложение система воспринимает как веб-сайт, но при этом вы получаете статистику по всем версиям своего приложения в одном месте.
Автор: Mail.Ru Group