
比較的深刻なモバイルアプリケーションの開発と販売促進は、ユーザーがアプリケーションで何をしているかを分析することなしにはほとんど不可能です。このソースから、アプリケーションストアにさまざまな統計パラメーターをインストールして分析しました。 今日、モバイルアプリケーションの分析には3つの主要な領域があります。
- 追跡インストールソース( モバイルアプリトラッキング 、 AppsFlyer 、 ADXtrackingなどのツールは、原則として、アプリケーションを促進するために使用されます);
- アプリケーション内の分析(最も有名なツールはFlurry 、 Google Analytics 、 Yandex.MetricaおよびMixpanelで、モバイルアプリケーション内のユーザーの行動を監視する機能を提供し、製品のさらなる開発を決定できます);
- アプリケーションストアからの統計の収集(最も人気のあるサービスはApp AnnieとDistimoで 、アプリケーションと競合他社の両方のストア内の位置を追跡できます)。
この記事は開発者を対象としているため、分析をWindows Phoneアプリケーションに統合する方法に焦点を当てます。 Flurry Analyticsは分析システムとして検討されます。
サービスの説明
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はいくつかのタイプのイベントをサポートしているため、これには多数のオーバーロードがあります。
- 通常のイベント(イベント);
- 指定されたパラメーター(イベントパラメーター)を持つイベント。
- 測定された期間のイベント(時限イベント)。
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); }
通常のイベントを登録するときにコードからわかるように、このイベントの一意の識別子を文字列として渡すだけです。 パラメーター化されたイベントの場合、パラメーターのリストが追加されます。これをイベントに関連付けます。 時限イベントを作成する場合(例のように、ユーザーが特定のページにいた時間を判断するため)、trueを渡す必要があり、必要に応じて、EndTimedEvent関数を呼び出して同じイベント識別子を渡してイベントを終了する。 パラメータのリストを時限イベントに関連付けることもできます。

すべてが非常に単純ですが、いくつかの制限があります。
- 各プロジェクトがサポートするイベントは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サーバーにイベントを登録します。 このクラスの使用例は、標準のパノラマアプリテンプレートで見ることができます。
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は最も一般的な分析インジケータを測定できます。ほとんどのインジケータは、追加設定なしで表示できます。これは「そのまま」と呼ばれます。 このサービスは無料で、アプリケーションへの統合は非常に簡単です。 欠点として、アプリケーションのクラッシュレポートの不完全な詳細と、ポータル上の分析データの更新に時間がかかるという事実に注意できます(ただし、これは他のシステムにも当てはまります)。
実際のTinkoffモバイルウォレットプロジェクトでこのツールを使用し、アプリケーション内のユーザーコンバージョンの統計に基づいて、需要が低いため「現金補充」セクションを放棄することにしました(ユーザーがこのセクションの場所を理解していることを確認しますが、単にその必要性が見えないようにします) ) 同時に、「新しい銀行カードへの転送」セクションは非常に深くなり、最も人気のあるセクションの1つになりました。 新しいバージョンでは、メインページに近くなり、テーマセクションが変更されます。