Xamarin Insights ことはじめ


こんにちは。エクセルソフトの田淵です。

今日は Xamarin Advent Calendar 19日目です。

今日は Xamarin Insights について軽くご紹介します。(ドキュメント読んでサンプル動かしただけとも言うｗ)

# Xamarin Insights とは？

Xamarin Insights は皆さんの作るアプリに Analytics と Crash Report の機能を追加する Xamarin のサービスで、2014年11月に開催された Evolve で発表されました。([Keynote のビデオ](https://evolve.xamarin.com/#keynote-xamarin-insights))

機能の詳細については [Xamarin のドキュメントページ](https://evolve.xamarin.com/#keynote-xamarin-insights) をご参照ください。Insights 登録後は [こちら](https://insights.xamarin.com/docs) でもスタートガイド的なドキュメントを確認できます。

現在は Preview 版として、Xamarin ユーザーであればどなたでもご利用いただけますので、ベータテストなどで使ってみると良いかと思います。

ドキュメントページにあるサンプルアプリ [Android Insights](http://developer.xamarin.com/guides/cross-platform/insights/application/Resources/AndroidInsights.zip) を落として動かしてみました。

# How It Works

Xamarin Insights を使うには以下の手順が必要です。

1. Initialize
1. User Resistration
1. Reporting

詳細は[ドキュメントページ](https://evolve.xamarin.com/#keynote-xamarin-insights)をご参照ください。
ユーザーを登録しておくと、`Xamarin Insights.Traits.Name` で名前を取得出来たりするようです。
レポートは try/catch して `Insights.Report(ex)` すればいい感じです。

# インストール

最初に [Xamarin Insights サイト](http://insights.xamarin.com/) に行き、`Add New App` でアプリを作成し、`Copy the API Key` に表示される API Key の値を控えておきます。
次にプロジェクトで NuGet から `Xamarin.Insights` をインストールします。
後は各 OS の書式に沿って Initialize します。

> Android はいくつか Permission を追加する必要があり、iOS は正確なクラッシュログを取得するには dSYM ファイルをアップロードする必要があります。

# クラッシュレポートの使い方

try/catch でエラーをレポートします。

```csharp
try
{
     int divByZero = 42 / int.Parse("0");
}
catch (DivideByZeroException ex)
{
     Insights.Report(ex);
}
```

レポートが集まってグラフ化されるのには半日〜1日くらいかかるのですが、各エラーレポートはすぐに確認できます。
Insights のサイトで Users > ユーザー選択 > ISSUES を選択すると右下に表示されます。
![スクリーンショット_2014-12-19_22_54_12.png](https://qiita-image-store.s3.amazonaws.com/0/32453/1fe41854-77ce-a92e-a596-ab4bbfc0b1c3.png "スクリーンショット_2014-12-19_22_54_12.png")

右下に表示されるエラーをクリックするとレポートの詳細が表示されます。レポートには情報を追加することもできます。

```csharp
try
{
    var block = new byte[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    using (var text = File.OpenWrite(@"/bin/hello.txt"))
    {
        text.Write(block, 0, 10);
    }
}
catch (IOException ex)
{
    // see http://msdn.microsoft.com/en-us/library/system.exception.data%28v=vs.110%29.aspx for more details on this
    ex.Data["MoreData"] = "You can't write to the bin directory!";
    // send the report
    Insights.Report(ex);
    // throw the exception - this exception would need to be caught using another try/catch
    throw ex;
}
```

この `IOException ex` を catch した場合は次のようにエラーが確認できます。
![スクリーンショット 2014-12-19 18.48.07.png](https://qiita-image-store.s3.amazonaws.com/0/32453/71156868-3c8b-b7ce-c453-06af62210bf6.png "スクリーンショット 2014-12-19 18.48.07.png")

次のように try/catch 出来なかった想定外のエラーも収集できます。

```csharp
btnCrash.Click += delegate
{
    var block = new byte[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    block[11] = 10;
};
```

![スクリーンショット 2014-12-19 18.47.26.png](https://qiita-image-store.s3.amazonaws.com/0/32453/aaffd6a2-259b-4db5-912b-b6665e1ecd46.png "スクリーンショット 2014-12-19 18.47.26.png")


# Event/Time Tracking

イベントや時間を取ることもできます。こちらは [Google Analytics / Components / Xamarin](http://components.xamarin.com/view/googleanalytics) みたいな機能かもしれません。が、時間がなくて触れませんでした。是非皆さんで確かめてみてください笑

以上です。


明日は [@omanuke](http://twitter.com/omanuke) さんです。

ガチ勢のエントリー楽しみですね！引き続き Xamarin をよろしくお願いいたします。