iOSアプリ開発者だったら試してみたい！アプリ専用解析サービスFlurryのiOS SDKの導入と設定


[Flurry](http://dev.flurry.com/)というモバイル端末用のアクセス解析サービスがあり、そのiOS SDKを導入するときのメモです。タイトルは釣りになります。また、[MixpanelのiOS SDK導入と設定についての記事](http://qiita.com/yimajo/items/44e55fc3ef1c553213fb)もまとめているのでそちらと比較してみるのもいいかもしれません。

# SDKのダウンロード

[Flurryのサイト](https://dev.flurry.com/)からアカウント登録後、"Add a new application"からアプリケーションの登録を行う。"Choose this if your app is a universal iOS app"を選択しアプリ名やカテゴリーを設定し登録されるとアプリケーションキーとダウンロードリンクが手に入る。

# インストール方法

ダウンロードリンクからFlurry-iOS-4.3.2を展開し、その中のFlurryディレクトリにあるFlurry.h、libFlurry_4.3.2.aをプロジェクトに追加する。

また、下記のフレームワークも必要になる

- SystemConfiguration.framework
- Security.framework 


# ライブラリの初期化

```objc
#import "Flurry.h"
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
     [Flurry setCrashReportingEnabled:YES];
     //note: iOS only allows one crash reporting tool per app; if using another, set to: NO
     [Flurry startSession:@"YOUR_API_KEY"];    
     //your code
}
```

# イベントのトラッキング

## 通常のトラッキング

通常のイベントトラッキングはイベント名を指定する

```objc
[Flurry logEvent:@"Article_Read"];
```

任意のDicrionaryを渡すこともできる。

```objc
NSDictionary *articleParams =
   [NSDictionary dictionaryWithObjectsAndKeys:
      @"John Q", @"Author", // Capture author info
      @"Registered", @"User_Status", // Capture user status
      nil];
 
[Flurry logEvent:@"Article_Read" withParameters:articleParams];
```

トラッキング出来る上限は300。

## イベントの時間を取得する？


logEvent:withParameters:timed:メソッドを使い、あらかじめ登録したイベント名のパラメータをセットしておきendTimedEvent:withParameters:でイベントの終了を検知させることでその間の時間を取得することが出来る様子。

```objc
NSDictionary *articleParams =
   [NSDictionary dictionaryWithObjectsAndKeys:
      @"John Q", @"Author", // Capture author info
      @"Registered", @"User_Status", // Capture user status
      nil];
 
[Flurry logEvent:@"Article_Read" withParameters:articleParams timed:YES];
 
// In a function that captures when a user navigates away from article
[Flurry endTimedEvent:@"Article_Read" withParameters:nil]; // You can pass in additional 
   //params or update existing ones here as well

```

注意点は２つのメソッドで共通のイベント名を使うこと。

# ユーザーの情報

## idを指定する

解析のため明示的にIDを指定することも出来る

```
[Flurry setUserID:@"USER_ID"];
```

例えば自分が運営しているWebサービスのユーザーIDなど、他プラットフォームでも共通のIDを割り当てられるなら解析のために指定すべきだろう。

## 年齢を指定する

```
[Flurry setAge:21];
```

## 性別を指定する

```
[Flurry setGender:@"m"];
```

mでmale
fでfemale

# アプリケーションのエラーや例外のトラッキング

アプリケーションのエラーや例外を送ることも出来る。

```objc
[Flurry logError:@"ERROR_NAME" message:@"ERROR_MESSAGE" exception:e];
```

例外自体を引数で渡しているのにエラー名とメッセージも渡すのか、どちらかがあればいいのかイマイチ分かりづらい。おそらくNSErrorが発生しそれを送りたい場合はエラー名とメッセージを渡し、例外を送りたい場合は例外のみ渡せば良い気がする。

両方渡すと管理画面上で解析がどうなるか等も気になってしまうし、もしこのように似たもののどちらかを渡せばいいのであれば、メソッドを分けるかメソッド名が長くなってもいいので分かりやすくすべきではないかと思う。

# ページのトラッキング

これは何をしていてどこで使うべきか不明。

```objc
[Flurry logAllPageViews:navigationController];
```

logPageViewメソッドはviewWillAppear:時に仕込めばいいような気はする。

```objc
[Flurry logPageView];
```

このメソッド名はFlurryの他プラットフォームに合わせてしまっているためで、メソッド名や引数で何をしているかが分からないし説明を見てもよく分からなかった。


# その他

iOSアプリ開発者は知らなきゃヤバイ！Mixpanel iOS SDKの導入と設定
http://qiita.com/yimajo/items/44e55fc3ef1c553213fb

Flurry公式
http://support.flurry.com/index.php?title=Analytics/GettingStarted

# 雑感

Mixpanelと似ている部分は多いがSDKでイベントの経過時間を測れる機能があるのは大きな特徴。

気になる点としてはドキュメントの説明が足らずメソッド名から機能が分かりづらい。導入についてはcocoapods経由ではないので古い印象を受けてしまう。欲を言えばサンプルプロジェクトなどが欲しい。