Разработка и продвижение сравнительно серьезных мобильных приложений практически невозможна без анализа того, что делает пользователь в вашем приложении, из какого источника он произвел установку и анализа различных статистических параметров в магазине приложений. На сегодняшний день существует три основных направления в аналитике мобильных приложений:
- Трекинг источников установок (такие инструменты как Mobile App Tracking, AppsFlyer и ADXtracking, используются, как правило, для продвижения приложений);
- Аналитика внутри приложения (наиболее известные инструменты – это Flurry, Google Analytics, Яндекс.Метрика и Mixpanel, которые предоставляют возможность наблюдать за поведением пользователей внутри мобильного приложения, что позволяет принять решение о дальнейшем развитии вашего продукта);
- Сбор статистики из магазинов приложений (самые популярные сервисы – это App Annie и Distimo, позволяют отслеживать позицию в сторе как вашего приложения, так и конкурентов).
Описание сервиса
Flurry – самый популярный инструмент, в первую очередь благодаря тому, что он полностью бесплатный, доступен для всех основных мобильных платформ и имеет достаточно мощный функционал. Рассмотрим основные показатели, которые предоставляет данный инструмент:- Количество новых и активных пользователей;
- Количество сессий и их длина;
- Частота использования приложения;
- Статистика сбоев;
- Аудитория приложения (пол, возраст, язык, география использования);
- Информация о версиях продукта и устройствах;
- События внутри приложения;
- Навигация по экранам и т.д.
Интеграция Flurry SDK в приложение Windows Phone
После создания аккаунта на сайте https://dev.flurry.com у вас появится возможность создать новое приложение для любой из основных платформ.Для этого Вам потребуется указать имя приложения и категорию, к которой оно относится.
Для приложения будет сгенерирован уникальный ключ и станет доступна загрузка Flurry SDK. Можно приступать к разработке!
Первым делом нужно добавить в проект ссылку на сборку FlurryWP8SDK.dll и внести некоторые изменения в манифест приложения. А именно, установить ID_CAP_NETWORKING для передачи данных аналитики на сервер Flurry и ID_CAP_IDENTITY_DEVICE для доступа к информации об устройстве.
Чтобы начать сбор аналитики, Вам потребуется при старте приложения запустить новую сессию:
private void Application_Launching(object sender, LaunchingEventArgs e) { FlurryWP8SDK.Api.StartSession("Your API Key"); }
В качестве параметра функция принимает уникальный ключ Вашего приложения. Также следует запускать новую сессию после повторной активации приложения:
private void Application_Activated(object sender, ActivatedEventArgs e) { FlurryWP8SDK.Api.StartSession("Your API Key"); }
При этом вся аналитика будет отслеживаться в рамках старой сессии. Однако, если приложение активируется после более чем 10 секунд, то создается новая сессия и аналитика будет отслеживаться уже в рамках новой сессии. Чтобы изменить срок, в течение которого старый сеанс может быть возобновлен, Вы можете использовать функцию SetSessionContinueSeconds, передав ей в качестве параметра нужное количество секунд:
private void Application_Deactivated(object sender, DeactivatedEventArgs e) { FlurryWP8SDK.Api.SetSessionContinueSeconds(60); }
Существует также функция принудительного завершения сессии, однако вызывать ее не обязательно, так как она по умолчанию уже связана с закрытием приложения. Но если Вам в каком-то случае потребуется завершить текущую сессию это можно сделать так же просто:
private void Application_Closing(object sender, ClosingEventArgs e) { FlurryWP8SDK.Api.EndSession(); }
Регистрация сбоев приложения
При обработке исключений, как правило, мы ожидаем определённый тип ошибок, но иногда возникают непредвиденные ситуации и приложение просто “падает”. В этом случае получить информацию о необработанном исключении – бесценно! Flurry предоставляет нам такую возможность:
public App() { UnhandledException += Application_UnhandledException; } private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { FlurryWP8SDK.Api.LogError("Some error", e.ExceptionObject); }
В качестве параметров функция LogError принимает сообщение об ошибке и само исключение.
Регистрация событий
Чтобы отслеживать пользовательские события, которые происходят во время сеанса, следует воспользоваться функцией LogEvent. Она имеет ряд перегрузок, это обусловлено тем, что Flurry поддерживает несколько типов событий:
- Обычные события (events);
- События с заданными параметрами (event parameters);
- События с измеряемой продолжительностью (timed event).
protected override void OnNavigatedFrom(NavigationEventArgs e) { // Завершение события FlurryWP8SDK.Api.EndTimedEvent("Timed event"); // Завершение события с параметрами FlurryWP8SDK.Api.EndTimedEvent("Timed event with parameters"); } protected override void OnNavigatedTo(NavigationEventArgs e) { // Обычное событие FlurryWP8SDK.Api.LogEvent("Simple event"); var list = new List<FlurryWP8SDK.Models.Parameter> { new FlurryWP8SDK.Models.Parameter("Parameter name", "Parameter value") }; // Событие с заданными параметрами FlurryWP8SDK.Api.LogEvent("Simple event with parameters", list); // Событие с измеряемой продолжительностью FlurryWP8SDK.Api.LogEvent("Timed event", true); // Событие с измеряемой продолжительностью и параметрами FlurryWP8SDK.Api.LogEvent("Timed event with parameters ", list, true); }
Как видно из кода при регистрации обычного события Вам просто надо передать уникальный идентификатор этого события в виде строки. В случае параметризованного события добавляется список параметров, который требуется связать с событием. Если же Вы хотите создать timed event (к примеру, определить, как долго пользователь находился на определенной странице, как это сделано в примере), Вам нужно передать true и когда это потребуется, завершить событие вызовом функции EndTimedEvent, передав ей тот же самый идентификатор события. Так же существует возможность связать с timed event список параметров.
Все достаточно просто, однако, есть ряд ограничений:
- Каждый проект поддерживает не более 300 событий;
- Каждое событие может иметь не более 10 параметров;
- Уникальный идентификатор события, имя параметра и значения параметра не может превышать 255 символов.
Конфигурация Flurry
В дополнение Flurry SDK имеет несколько методов конфигурации. Их следует вызывать (хотя и не обязательно) после запуска новой сессии (вызова метода StartSession).
// Устанавливает номер версии аналитических данных FlurryWP8SDK.Api.SetVersion(string version); // Устанавливает уникальный идентификатор пользователя FlurryWP8SDK.Api.SetUserId(string userId); // Устанавливает возраст пользователя FlurryWP8SDK.Api.SetAge(int age); // Устанавливает пол пользователя FlurryWP8SDK.Api.SetGender(Gender gender); // Устанавливает текущее местоположение пользователя FlurryWP8SDK.Api.SetLocation(double latitude, double longitude, float accuracy);
Продвинутый сценарий
Если при регистрации событий Вас не устраивает каждый раз в коде вызывать метод LogEvent, можно пойти на небольшую хитрость — создать вспомогательный класс для Flurry:
public class FlurryBehavior : Behavior<UIElement> { public string EventMessage { get { return (string)GetValue(EventMessageProperty); } set { SetValue(EventMessageProperty, value); } } public static readonly DependencyProperty EventMessageProperty = DependencyProperty.Register("EventMessage", typeof (string), typeof (FlurryBehavior), new PropertyMetadata(string.Empty)); protected override void OnAttached() { base.OnAttached(); AssociatedObject.Tap += OnTap; } protected override void OnDetaching() { base.OnDetaching(); AssociatedObject.Tap -= OnTap; } private void OnTap(object sender, GestureEventArgs gestureEventArgs) { if (string.IsNullOrEmpty(EventMessage)) return; FlurryWP8SDK.Api.LogEvent(EventMessage); } }
Здесь мы просто подписываемся на событие Tap элемента управления и при возникновении данного события регистрируем событие на сервере Flurry. Пример использования этого класса можно посмотреть на стандартном шаблоне Panorama App:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:behaviors="clr-namespace:FlurryApp"
<phone:PanoramaItem Header="first item"> <phone:LongListSelector Margin="0,0,-22,0" ItemsSource="{Binding Items}"> <phone:LongListSelector.ItemTemplate> <DataTemplate> <StackPanel Margin="0,-6,0,12"> <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/> <i:Interaction.Behaviors> <behaviors:FlurryBehavior EventMessage="{Binding LineOne}"> </i:Interaction.Behaviors> </StackPanel> </DataTemplate> </phone:LongListSelector.ItemTemplate> </phone:LongListSelector> </phone:PanoramaItem>
Теперь, при тапе на элементе списка у нас будет регистрироваться событие без лишнего кода.
Данный пример элементарный, но его можно улучшить:
- добавить передачу параметров;
- уникальные идентификаторы событий вынести в ресурсы;
- отслеживать события навигации по страницам приложения и т.д.
И не забудьте, что для работы данного примера, потребуется подключить к проекту сборку System.Windows.Interactivity.
Выводы
Итак, Flurry Analytics умеет измерять наиболее популярные аналитические показатели, большинство из которых можно просматривать без дополнительной настройки, что называется “из коробки”. Сервис предоставляется бесплатно, а интеграция в приложение очень проста. В качестве недостатка можно отметить не полную детализацию отчетов о сбоях в приложении и то, что обновление аналитических данных на портале требует некоторого времени (хотя это актуально и для других систем).
Комментариев нет:
Отправить комментарий