MBaaS徹底入門――Kii Cloudでスマホアプリ開発

第11回 Kii Cloudを用いたチャットアプリケーションの開発[その7]アプリケーションのデータ分析(実装編)

この記事を読むのに必要な時間:およそ 4 分

第10回では,Kii Cloudが提供しているデータ分析機能について概要を説明しました。第11回となる今回は,データ分析を利用した機能改善の例として,第8回で実装したスタンプ機能に焦点を当てます。スタンプの利用状況を収集して,人気のあるスタンプを分析します。またアプリケーションから分析結果を利用してスタンプを人気順にソートする機能を実装してみましょう。

なお,今回使用したソースコードについては,GitHubで公開しています。こちらもあわせてご覧ください。

分析ルールの作成

前回の分析ルールの定義で解説した手順に従って実際にスタンプの利用状況を分析するためのルールを作成してみましょう。

今回の例ではスタンプの利用回数をカウントするだけの非常にシンプルなルールを作成します。

もし,サインアップ時にユーザの属性情報等(性別,年齢,住所)を入力してもらうように拡張すれば,イベントデータにそれらの情報を付加して分析することで,より多角的な分析が可能になります。⁠性別,年齢層で人気のスタンプに差があるかどうかなど)

分析ルールの作成画面

分析ルールの作成画面

分析ルールについて詳しく見ていきましょう。

Name

分析ルールの名前を設定します。わかりやすい名前を設定してください。

今回は「スタンプの利用状況」という名前にしました。

Data

分析対象データのソースの種類を設定します。KiiChatアプリで使用してきたchat_stampsやchat_roomに保存されているデータはすべてApp Dataに分類されます。今回はEvent Dataという分析専用のアプリケーション全体で共有されるデータを使用します。

Aggregate using

集計する対象と,その集計方法を設定します。今回は使用されたスタンプ(スタンプのURI)の件数をカウントしたいので「"Count" of "stamp_uri"」と設定します。またstamp_uriは文字列のデータなので,型は"string"を選択します。

Filter by type

Event Dataは1つの共通のバケットに複数の種類のイベントデータを保存していくようなイメージになります。これらのイベントの種類を区別するためにTypeを設定します。今回はスタンプを送信したタイミングで発生するイベントなので「stamp_usage」としました。今回のサンプルでは分析する対象のイベントが1種類なのであまり意味がありませんが,複数のイベントを分析する場合に役に立ちます。

Dimensions

分析結果をグルーピングする設定です。今回はスタンプの人気を分析する為に,スタンプごとの使用回数を計算したいので,⁠stamp_uri」を設定します。

イベントデータの送信

分析ルールを作成した後は,分析対象のイベントデータをアプリケーションから送信するコードを実装しましょう。今回,実装する機能のデータフローは以下のようになります。

イベントデータ送信のデータフロー

イベントデータ送信のデータフロー

まずイベントデータを送信するメソッドをChatStampクラスに実装します。

public static void sendUsageEvent(ChatMessage message) {
    if (message.isStamp()) {
        try {
            KiiEvent event = KiiAnalytics.event("stamp_usage");
            event.set("stamp_uri", message.getStampUri());
            event.push();
        } catch (IOException ignore) {
            Logger.w("failed to send event");
        }
    }
}

最初にKiiAnalytics#event(String)メソッドにイベントタイプを指定してKiiEventのインスタンスを生成します。KiiEventには任意のkey-valueを設定することができます。

先ほど分析ルール作成で集計の対象として設定した⁠stamp_uri⁠をキーに,値にはChatStampのURIを設定します。最後にKiiEvent#push()でイベントデータを送信します。

ここで実装したメソッドは,メッセージを送信する処理であるChatActivity.SendMessageTask#doInBackground()から呼ぶようにします。

private class SendMessageTask extends AsyncTask<Void, Void, Boolean> {
    private final ChatMessage message;
    private SendMessageTask(ChatMessage message) {
        this.message = message;
    }
    @Override
    protected Boolean doInBackground(Void... params) {
        try {
            this.message.getKiiObject().save();
            // イベントデータの送信
            ChatStamp.sendUsageEvent(this.message);
            return true;
        } catch (Exception e) {
            Logger.e("failed to send messsage", e);
            return false;
        }
    }
}

著者プロフィール

福崎範佳(ふくざきのりよし)

Kii株式会社

http://www.kii.com/

コメント

コメントの記入