Статистика та аналітика для мобільного додатка: використовуємо Flurry в Windows Phone 8

image

Розробка і просування порівняно серйозних мобільних додатків практично неможлива без аналізу того, що робить користувач у вашому додатку, з якого джерела він виготовив установку і аналізу різних статистичних параметрів в магазині додатків. На сьогоднішній день існує три основних напрями в аналітиці мобільних додатків:
  • Трекінг джерел установок (такі інструменти як Mobile App Tracking, AppsFlyer і ADXtracking, використовуються, як правило, для просування додатків);
  • Аналітика всередині додатка (найбільш відомі інструменти — це Flurry, Google Analytics, Яндекс і Mixpanel, які надають можливість спостерігати за поведінкою користувачів всередині мобільного додатка, що дозволяє прийняти рішення про подальший розвиток вашого продукту);
  • Збір статистики з магазинів додатків (найбільш популярні сервіси — це App Annie і Distimo, дозволяють відстежувати позицію в сторі як програми, так і конкурентів).
Оскільки дана стаття призначена для розробників, мова в ній піде про те, як впровадити аналітику в додаток Windows Phone. В якості системи аналітики буде розглянута Flurry Analytics.

Опис сервісу

Flurry — найпопулярніший інструмент, в першу чергу завдяки тому, що він повністю безкоштовний, доступний для всіх основних мобільних платформ і має досить потужний функціонал. Розглянемо основні показники, які надає даний інструмент:
  • Кількість нових та активних користувачів;
  • Кількість сесій і їх довжина;
  • Частота використання програми;
  • Статистика збоїв;
  • Аудиторія програми (стать, вік, мова, географія використання);
  • Інформація про версіях продукту і пристроях;
  • Події всередині програми;
  • Навігація по екранах і т.д.
Всі питання про те, що робити з цими даними, залишимо аналітикам, нас же цікавить, що потрібно зробити розробнику, щоб ці дані стали доступними.

Інтеграція Flurry SDK в додаток Windows Phone

Після створення облікового запису на сайті https://dev.flurry.com у вас з'явиться можливість створити новий додаток для будь-якої з основних платформ.

image

Для цього Вам потрібно вказати ім'я додатка і категорію, до якої воно відноситься.

image

Для програми буде створений унікальний ключ і стане доступна завантаження 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);
}


image

Існує також функція примусового завершення сесії, однак викликати її не обов'язково, так як вона за замовчуванням пов'язана із закриттям програми. Але якщо Вам в якомусь випадку потрібно завершити поточну сесію це можна зробити так само просто:

private void Application_Closing(object sender, ClosingEventArgs e)
{
FlurryWP8SDK.Api.EndSession();
}


image

Реєстрація збоїв програми

При обробці виключень, як правило, ми очікуємо певний тип помилок, але іноді виникають непередбачені ситуації і додаток просто «падає». В цьому випадку отримати інформацію про необробленому виключення — безцінне! Flurry надає нам таку можливість:

public App()
{
UnhandledException += Application_UnhandledException;
}

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventargs e)
{
FlurryWP8SDK.Api.LogError("Some error", e.ExceptionObject);
}

В якості параметрів функція LogError приймає повідомлення про помилку і саме виключення.

image

image

Реєстрація подій

Щоб відстежувати користувальницькі події, які відбуваються під час сеансу, слід скористатися функцією 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 список параметрів.

image

Все досить просто, однак, є ряд обмежень:
  • Кожен проект підтримує не більше 300 подій;
  • Кожна подія може мати не більше 10 параметрів;
  • Унікальний ідентифікатор події, ім'я параметра значення параметра не може перевищувати 255 символів.


image

Конфігурація Flurry

На додаток Flurry SDK має кілька методів конфігурації. Їх слід викликати (хоча і не обов'язково) після запуску нової сесії (виклику методу StartSession).

// Встановлює номер версії аналітичних даних
FlurryWP8SDK.Api.SetVersion(version string);

// Встановлює унікальний ідентифікатор користувача
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>

Тепер, при натисканні на елементі списку у нас буде реєструватися подія без зайвого коду.

image

Даний приклад елементарний, але його можна поліпшити:
  • додати передачу параметрів;
  • унікальні ідентифікатори подій винести на ресурси;
  • відстежувати події навігації по сторінках програми і т.д.
І не забудьте, що для роботи даного прикладу, потрібно підключити до проекту збірку System.Windows.Interactivity.

Висновки

Отже, Flurry Analytics вміє вимірювати найбільш популярні аналітичні показники, більшість з яких можна переглядати без додаткової настройки, що називається «з коробки». Сервіс надається безкоштовно, а інтеграція в додаток дуже проста. В якості недоліку можна відзначити не повну деталізацію звітів про збої в додатку і те, що оновлення аналітичних даних на порталі вимагає деякого часу (хоча це актуально і для інших систем).
Використовуючи цей інструмент в реальному проекті Тинькофф Мобільний Гаманець, на підставі статистики переходів користувачів всередині програми, ми вирішили відмовитися від розділу «Поповнення готівкою» зважаючи на його низьку затребуваність (переконавшись, що користувачі розуміють, де цей розділ знаходиться, але просто не вбачають у ньому потреби). В той же час розділ «Переклад на нову банківську карту» зараз знаходиться досить глибоко, а є одним з найпопулярніших. У новій версії він буде ближче до основної сторінки і поміняє тематичний розділ.

Джерело: Хабрахабр

0 коментарів

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