F.O.X Android SDK 自動計測機能のすゝめ

こんにちは。F.O.X開発の中の人、ガーヒラです。
前回は[F.O.X Android SDK バージョン3系から4系に乗り換える](https://qiita.com/czhiraga/items/15bad80642d65c62d225)という記事を書きましたが今回は、v4.3.0から新たに追加した自動計測機能 "FOX Automator"について紹介します。

## 何ができるの？

次の計測を自動で行います。

* `インストール計測` : アプリが広告経由でインストールされ初回起動したことを計測
* `セッション計測` : 継続率を取得するためのアプリ起動セッションを計測
* `リエンゲージメント計測` : リエンゲージメント広告を踏んでのアプリ起動を計測（広告のチカラを使ってインストール済みの休眠ユーザーを再度アクティブにするための施策の可視化）

自動で行うというのは、最初のアクティベート処理を記載するとアプリを監視し、状況に応じて成果を送信します。

## 生まれた背景

単純に導入コストを削減することだけを考えていたら生まれました。([前回記事](https://qiita.com/czhiraga/items/15bad80642d65c62d225)では少ないステップ数での実装を謳ってましたが、そもそも無くしましたｗ)
恐らく現場のエンジニアは、アプリの開発に工数を割きたいのに、広告効果計測？なんじゃそれ！ってなるわけです。
また、最近はそうではないかもしれませんが、コンバージョン？リエンゲージメント？広告知識が全くなかった自分がそうでしたが、広告用語や仕組みがわからないままSDKを導入していると疎通テストでハマるんですよ、何のために導入しているのかを理解する時間がもったいないし。テスト用広告URLのリンクをブラウザで踏んでからSDKを導入したアプリを起動する、でも成果が取れていないからもう一度やってくれって言われ、無駄に時間を消耗させられてしまう。。
何とかしてその手間を巻き取れないかを考え続けた結果、思いついたデザインだったわけです。


## 使い方

前置きが長くなってしまいましたが、コードの話に移ります。

### インストール

前回の記事同様、build.gradleには次の内容を入れます。本記事掲載時の最新バージョンは4.4.0です。

```
repositories {
    maven {
        url "https://github.com/cyber-z/public-fox-android-sdk/raw/master/mavenRepo"
    }
}

dependencies {
    compile 'co.cyberz.fox:track-core:4.4.0'
}
```
※ BugFixもあるので現時点で利用するなら4.4.0をオヌヌメします。

### アクティベーションと自動計測の起動

Application継承クラス(MultiDexApplicationでも同じ)に以下のように、F.O.Xの管理画面で発行された必須IDと
起動処理の実装を行います。

```java
import android.app.Application;
import co.cyberz.fox.Fox;
import co.cyberz.fox.annotation.FoxConfig;

@FoxConfig(appId = 発行されたアプリID,
           appKey = "発行されたAPP_KEY",
           appSalt = "発行されたAPP_SALT",
           isDebug = BuildConfig.DEBUG)
public class YourApplication extends Application {

  @Override
    public void onCreate() {
        super.onCreate();

        // SDKアクティベーション・自動計測開始
        Fox.AUTOMATOR.init(this).startTrack();
    }

}  
```

基本的には上記の実装で完了です。initメソッドの引数はContextとなっています。
アプリ内イベントの計測（チュートリアル・課金等）は別途その都度実装する必要がありますが起動計測系の実装はアノテーションの記述と、この１行で済みます。
また、アノテーションでの基本情報の指定が嫌という場合には、以下のようにFoxConfigインスタンスを生成しinitメソッドに指定します。

```java
import android.app.Application;
import co.cyberz.fox.Fox;
import co.cyberz.fox.FoxConfig;

public class YourApplication extends Application {

  @Override
    public void onCreate() {
        super.onCreate();

        FoxConfig config = new FoxConfig(this, 発行されたアプリID, "発行されたAPP_KEY", "発行されたAPP_SALT");
        config.addDebugOption(BuildConfig.DEBUG);
        // SDKアクティベーション・自動計測開始
        Fox.AUTOMATOR.init(config).startTrack();
    }

}
```

### 詳細情報を指定しての実行

インストール計測で細かな設定を指定する場合の実装方法を紹介します。

```java
import android.app.Application;
import co.cyberz.fox.Fox;
import co.cyberz.fox.FoxTrackOption;
import co.cyberz.fox.annotation.FoxConfig;

@FoxConfig(appId = 発行されたアプリID,
           appKey = "発行されたAPP_KEY",
           appSalt = "発行されたAPP_SALT",
           isDebug = BuildConfig.DEBUG)
public class YourApplication extends Application {

  @Override
    public void onCreate() {
        super.onCreate();

        // 計測オプションの指定
        FoxTrackOption options = new FoxTrackOption();
        options.setRedirectUrl("myapp://top")
               .setBuid(getUserId())
               .setTrackingStateListener(new FoxTrackOption.TrackingStateListener() {
                  @Override
                  public void onComplete() {
                    // 計測完了時に実行する処理

                  }
        });
        // SDKアクティベーション・自動計測開始
        Fox.AUTOMATOR.init(this).startTrack(options);
    }

}  

```

FoxTrackOptionクラスを使い、計測の必要に応じてオプションを指定します。

* `setRedirectUrl`ではCookie計測を行う際のブラウザ起動でアクセス先のURLを指定します。アプリ自身のカスタムURLを指定し瞬時にアプリに戻すことも可能です。
* `setBuid`ではその通りBUIDを指定します。BUIDはアプリにおけるユーザーを識別するIDと解釈してください。このユーザーはどの広告を踏んでアプリのインストールに至ったかを可視化するために利用します。（ただし、初回起動時のApplicationクラス内でユーザーIDを用意することが通常だと難しいかと思いますので、回避する実装方法を別途用意しております。今度書く。）
* `setTrackingStateListener`はSDKが成果の計測が完了したタイミングをコールバックで受け取るためにあります。他のライブラリと組み合わせて使う場合など、確実にF.O.Xの計測が完了してから他の処理を実行したい時（どーゆー時？）を想定しています。今回のように自動計測とはあまり相性が良くはありませんが、Activity内で単体でtrackInstallを実行する際に用意した機能となっています。


以上、自動計測についてでした。
[詳細の仕様や使い方はこちら](https://github.com/cyber-z/public-fox-android-sdk/blob/4.x/lang/ja/doc/track_auto/README.md)にあります。


漢は黙ってクライアントの計測処理実装を巻き取る。（ただしこの機能はiOSでは用意がなくAndroidのみです、すみません）
どうぞよろしくお願いします。