2014年1月3日金曜日

Microsoft Application Insights を ストアアプリで使う (その1)

※2016年4月追記 StoreApp / UWP App用のApplication Insights 新規受け付けは2016年4月15日で終了しています。既存ユーザーはHockeyAppへ移行するようにというアナウンスが出ています。

Transitioning Mobile Apps from Application Insights to HockeyApp
https://azure.microsoft.com/ja-jp/blog/transitioning-mobile-apps-from-application-insights-to-hockeyapp/

※2015年2月追記 Application Insights は現在Azure ベースのサービスに移行しており、本記事でお話しているVisual Studio Online 版は提供が終了するようです。このため本記事は現在のApplication Insights にはあまり当てはまるところがありません。
Azure版については以下の記事も御参照下さい。

うまく行かない人用の Application Insights ガイド(2015/02)
http://ddlgjp.blogspot.jp/2015/02/application-insights.html


------


今回、ストアアプリ WiFiSD8 に Microsoft Application Insights を組み込む機会がありました。未だ試用版ではありますが、アプリの使用状況を把握するにはかなり有用なサービスであるなぁ、という印象です。簡単ですが紹介・使い方記事を書いてみました。



概要

Application Insights とは

Application Insights (以下「AI」と略」) は、Webサイト・Azure・Windows ストアアプリ・Windows Phone アプリ・.NET アプリ の使用状況を収集・分析するためのMicrosoft のサービスです。Visual Studio Online の中で提供されています。

昨年10月、Visual Studio Online と同時にアナウンスされましたが、その時はAzure等のWebサービス向けでした。昨年12月に ストアアプリ版のPreliminary SDKがリリースされました(このため、全体にどちらかというとサーバー向けのデザインというか・・・アプリから見ると??な所、サーバーのみで使える機能、が多いです)。

AI Dashboard の例 (MSDNより借用)


AI SDK をストアアプリに組み込むだけで、基本的な情報…

  • 一日あたりのユニークユーザー数・新規ユーザー数
  • ユーザー辺りのセッション(アプリケーションの起動・終了)数
  • アプリのバージョン割合
  • ユーザーの使用環境(モニタサイズ、OSバージョン等)

は Coding 無しで取得されます。特にユニークユーザー数は Windows Store のDashboard では判らない情報で、PubCenter等の広告の運用や、アプリ販売・アプリ内販売の値段決定等を考える際には大変に有用な情報だろうと思われます(AdDuplexでも取得できますが)。

それ以上の細かい情報… Appの各ページが何回表示されたか、ある処理に掛かった時間、数値・文字列等…を取得するには、簡単なCode をアプリ内に「イベント」として埋め込みます。

例を挙げると、実際のアプリ内のページ遷移を集計することで、ユーザーが実際にどうやってアプリを使っているかを追跡する事ができます。あるアクションについて二つのパス…アプリ上に常に表示するボタンと、アプリ バー内に置いたボタン…がある場合、

  • 実際どれくらいの割合で二つのパスが使われているのか?
  • 片方のパスがほぼ0だったらそれは要らないのでは?
  • 意図せざる使われ方をしていたら、何かデザイン変更・チュートリアル追加等が必要なのでは?

等、UI改善に役立てる事が出来るでしょう。

他にも、以下のような様々な使い方があるのではと思います。
  • GridView上に表示するアイテムの平均・最大最少を見て、データの見せ方を考える(少なければリッチな見せ方に重点を置く、多ければVirtualization が効くようにする、グルーピング機能を検討する等)
  • あるアクションに掛かる時間の平均・最大最少を取得する

一方、使用者が特定できない形とはいえ、ユーザー情報を収集するサービスですので、使用には一定の注意が必要です。興味本位でデータを集める、無断で公開する等でユーザーからの信用を失っては元も子もありません。Baidu での一連のFrameUp は記憶に新しい所ですし。


Availability

現在(2014年1月)の所、AIは Preview Release であり、無料で使用することができます。Visual Studio Online 内でTesterを募集しており、そこのフォームにMail Addressを入力してしばらくするとActivation Code が送られてきます。

Visual Studio Online のトップページに案内が表示されている(はず)
Activation Code を入力してログインすると、AI で使う アプリケーションのGUID を取得することができます。この ID を アプリケーション起動時にパラメータとして AI SDKに渡すことで、一意なデータ集計が行われます。
初期化コードは以下のような感じです(App.xaml.cs)。

        protected override async void OnLaunched(LaunchActivatedEventArgs args)
        {
            Frame rootFrame = Window.Current.Content as Frame;

            Microsoft.ApplicationInsights.Telemetry.WindowsStore.ClientAnalyticsSession.Default.Start("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");            

            if (rootFrame == null)
            {
            ... 



アプリへの埋め込み


実際の作業は、MSDNのチュートリアル(とても判り易いです)を参照しながら進めていく事になりますが、自分が引っ掛かった2,3点について少し説明します。

Analyze Windows Store App Usage
http://msdn.microsoft.com/en-us/library/dn509554.aspx


AI SDK の インストール

Tutorial に従って NuGet からInstallするのですが、「リリース前のパッケージを含める」を選択する必要があります(しないと検索しても見つかりません)。

ソリューション エクスプローラ→右クリック→NuGet パッケージの管理

C# - Any CPU でビルドしているアプリに AI を導入する場合


AI SDKは x86 / x64 / ARM, CPU 別のComponentとして提供されています。このため、ストアアプリをC# - Any CPU でビルド・パッケージングしている場合、Native CPU別のパッケージに変更する必要があります。

ビルドについては、Visual Studio の構成マネージャーで x86, x64, ARM をそれぞれ設定します。

VSのメニュー ビルド → 構成マネージャ
実際の開発中は x64 / ARM だとXAML デザイナが動かない(x64マシン上でも)ため、多くは x86で回すことになります。Debug Targetに合わせて適宜変更します。

なお、Any CPU から CPU Native に変更した場合、既にAny CPU のPackageがインストールされているシステムに対して Visual Studio から配置を行うと、配置がエラーになる・配置エラー出ないけれども実際動かすとSplash Screenで止まる、等が起こる場合があります。

この場合、Any CPU でBuild したパッケージを一度ターゲット マシンからアンインストールし、その後でVisual Studio から配置を行うことで正常にDebugできます。

なお、Visual Studio からではなく、ストアからアプリをインストール・更新する場合(エンドユーザーの場合)は特に問題ありません。例えばRelease 1 がAny CPU Package、Release 2 がCPU Native の Package だった場合、アプリの更新はRelease 1 → Release 2 で問題無く行われ、アンインストールが必要、アプリ情報が消える、等という事はありません。

パッケージングについては、パッケージ作成の際にNeutral を外し、各CPU のチェックを入れます。
作成が完了すると.appxupload ファイルがCPU毎に3つ作成されるので、それら3つをDashboardにUploadします。
※ Package 3つになったとしても、共通のAppIdを持つのでストア上では一個のアプリになります。

また、言語別のリソースを持つ場合、VS2013の既定のバンドル設定『必要に応じて』では複数のCPUパッケージ+言語リソースは一個のバンドル パッケージにまとめられます。この辺りはお好みでどうぞ。上で述べたように、ユーザーから見ると特に変わるところはありません。


VSのメニュー ストア→アプリ パッケージの作成 



...長くなってしまったので、アプリ内へのイベントの埋め込み、プライバシー等については章を分けてまた書きたいと思います。




0 件のコメント:

コメントを投稿