私はwinformsアプリを持っていて、ユーザーが特定のボタンなどをクリックするたびに、および他のアクションを追跡したいと思っています。この情報を追跡し、それをまとめて、最もよく使用される機能などでメトリックを実行できるようにするための最良の方法は何ですか。
これはWinFormsアプリであり、世界中にユーザーがいます。
私はwinformsアプリを持っていて、ユーザーが特定のボタンなどをクリックするたびに、および他のアクションを追跡したいと思っています。この情報を追跡し、それをまとめて、最もよく使用される機能などでメトリックを実行できるようにするための最良の方法は何ですか。
これはWinFormsアプリであり、世界中にユーザーがいます。
設計で確実に対処しなければならない 2 つの大きな問題があります。
プライバシー (ドンがほのめかしたこと) - 収集して中央サーバーに送信する情報を明確にする必要があります。理想的には、中央サーバーに送り返す正確なデータをユーザーが検査できる必要があります (必要な場合)。 ) - 公開されているソフトウェアには、オプトアウトするための非常に簡単な方法が必要です。
パフォーマンスとスケーラビリティ - サーバー側で実際に必要なデータの量を見積もり、クライアント側のデータを集約および圧縮するあらゆる種類のトリックを調べる必要があります (送信するトラフィックの量と、どのくらいの頻度で送信しますか)
クライアント側の実装に関しては、Sqlite.netまたは別の組み込み DB を調査することをお勧めします。組み込み DB を使用してこの情報をクライアントに保存すると、集計の柔軟性が大幅に向上し、トランザクション対応で高速かつ簡単に実装できるという利点があります。Sqlite は非常に寛大なパブリック ドメイン ライセンスを持っているため、法的な観点から見ると、パブリック アプリでの使用は非常に簡単です。
GoogleScholarSearchを実行してみてください。ベン・リブリットと共著者によるいくつかの興味深いアイデアと、各ユーザーからランタイム情報のサンプルを取得することに基づいた、アレックス・オルソと共著者(免責事項-私はアレックス・オルソの共著者の1人)による別の一連のアイデアがあります、そしてそれを面白い方法でまとめます。
http://theory.stanford.edu/~aiken/publications/papers/pldi03b.pdf
と
http://www.cs.umd.edu/class/fall2006/cmsc838p/Ramss/remoteClassJournal.pdf
そのような論文/アイデアの2つの(必ずしも最良ではない)例です。
私はこのようなことを試してみます:
// execute this method once all forms have been created
public static void HookButtons()
{
foreach( Form f in Application.OpenForms )
{
EnumerateControls( f.Controls );
}
}
public static void EnumerateControls( ICollection controls )
{
foreach( Control ctrl in controls )
{
if( ctrl.Controls.Count > 0 )
{
EnumerateControls( ctrl.Controls );
}
if( ctrl is ButtonBase )
{
ctrl.MouseClick +=new MouseEventHandler( ctrl_MouseClick );
}
}
}
static void ctrl_MouseClick( object sender, MouseEventArgs e )
{
ButtonBase clicked = ((ButtonBase)sender);
// do something with the click information here
}
これをどのように処理するかに注意してください。一部の企業は、あまりにも多くの情報を収集したり、収集された情報が明確でないことから、ユーザーの反発を受けています。最も安全な方法は、「phone home」機能を有効にする前にユーザーに確認することです。送信する前にユーザーが実際のデータを確認できるようにすることも良いようです。
ワンクリック アプリが起動して更新をチェックするたびに発生するワンクリック展開呼び出しに便乗する方法があるかどうか疑問に思いました。まだ調べてないけど。
実際の数値の収集に関しては、おそらくユーザー設定が最も簡単な場所です。それらに慣れていない場合は、プロジェクトのプロパティを確認して、[設定] タブに移動してください。